Ist folgendes realisierbar?

Status
Nicht offen für weitere Antworten.

Sonic

Mitglied
Hallo Community

Herrlich das Wetter, ich komme gerad vom Freibad. :cool:

So nun zur Frage:
Wir habe gerade über Keylogger diskutiert. Ist es möglich ein Programm zuschreiben welches genau dies tut? Beachtet bitte, dass das Programm im Hintergrund sein wird und nicht wie meist einen Teil des Desktops einnimmt. Normalerweise weist man einer Komponente einen KeyListener zu. Wie funktioniert es aber nun wen die Applikation im Hintergrund ist ???:L

Kann ich mich zwischen USB-Anschluß/PS2 (von der Tastatur) und dem USB-Anschluß/PS2 (vom Client) zwischen stellen und die Signale mitlesen?

Über Links oder Codevorschläge würde ich mich sehr freuen.



Ich wünsche euch einen herrlichen Sommer!
 

Illuvatar

Top Contributor
Geht in reinem Java nicht. Dafür müsste man eine native Methode einbinden, vermutlich in C++ geschrieben. Wie die z.B. aussehen könnte, kannst du in folgenden C#-Codeausschnitten sehen:

Code:
        public void Start()
        {
                // Create an instance of HookProc.
                KeyboardHookProcedure = new WinApi.HookProc(KeyboardHookProc);
                //install hook
                hKeyboardHook = WinApi.SetWindowsHookEx(
                    WinApi.WH_KEYBOARD_LL,
                    KeyboardHookProcedure,
                    Marshal.GetHINSTANCE(
                    Assembly.GetExecutingAssembly().GetModules()[0]),
                    0);
                //If SetWindowsHookEx fails.
                if (hKeyboardHook == 0)
                {
                    //Fehlerbehandlung
                }
        }
        private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
        {
                // ...
        }
Code:
        [StructLayout(LayoutKind.Sequential)]
        public class KeyboardHookStruct
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }

        public class WinApi
        {
            [DllImport("user32.dll", CharSet = CharSet.Auto,
               CallingConvention = CallingConvention.StdCall, SetLastError = true)]
            public static extern int SetWindowsHookEx(
                int idHook,
                HookProc lpfn,
                IntPtr hMod,
                int dwThreadId);

            [DllImport("user32.dll", CharSet = CharSet.Auto,
                CallingConvention = CallingConvention.StdCall, SetLastError = true)]
            public static extern int UnhookWindowsHookEx(int idHook);

            [DllImport("user32.dll", CharSet = CharSet.Auto,
                 CallingConvention = CallingConvention.StdCall)]
            public static extern int CallNextHookEx(
                int idHook,
                int nCode,
                int wParam,
                IntPtr lParam);

            public delegate int HookProc(int nCode, int wParam, IntPtr lParam);

            public const int WH_MOUSE_LL = 14;
            public const int WH_KEYBOARD_LL = 13;

            public const int WM_KEYDOWN = 0x100;
            public const int WM_KEYUP = 0x101;
            public const int WM_KEYPRESS = 0x102;
            public const int WM_SYSKEYDOWN = 0x104;
            public const int WM_SYSKEYUP = 0x105;
            public const int WM_SYSKEYPRESS = 0x106;
        }
}
 

Sonic

Mitglied
Danke Illuvatar für deine Antwort


Das Thema ist somit für mich erledigt. Lasst die Sonne in euer Herz! :cool:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben