Autor Beitrag
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 14.04.13 16:21 
Einen schönen sonnigen Sonntag!
Trotz des schönen Wetters versuche ich mich gerade an einem kleinen Keylogger. Dazu habe ich eine fast perfekte DLL bei Torry gefunden: www.swissdelphicente...showcode.php?id=1722
Das einzige Problem hierbei ist, dass die DLL Probleme bei der Erkennung von Gruoß-und Kleinbuchstaben hat...
Ich verwende eigentlich nur diesen Teil, da ich kein Memo benötige:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  if ((KeyStroke and (1 shl 30)) <> 0then
    begin
      GetKeyboardState(KeyState1);
      Count := ToAscii(VirtualKey, KeyStroke, KeyState1, AryChar, 0);
      if Count = 1 then
      begin
        SendMessage(hMemo, WM_CHAR, Ord(AryChar[0]), 0);
        {I included 2 ways to get the Charaters, a Memo Hnadle and
         a WM_USER+1678 message to the program}

        PostMessage(hApp, WM_USER + 1678, Ord(AryChar[0]), 0);
      end;
    end;

Was jetzt sehr komisch ist, dass GetKeboardState nur dann ein richtiges Ergebnis liefert, wenn die Maus über dem Formular steht. Das Forumular muss nicht mal fokusiert sein, lediglich die Maus muss sich darüber befinden. Aber warum?!
Hier der Ausschnitt aus meiner DLL:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
function KeyHook(code: integer; WParam: word; lParam: Longint): Longint; stdcall;
var Wnd: hWnd;
    KeyState: TKeyBoardState;
    AryChar: array[0..1of Char;
begin
 Wnd:= FindWindow(WinClass, nil);
 Result:= 0;

 if (Code = HC_NOREMOVE) or (Code<0then exit;

 if Code = HC_ACTION then
  if ((lParam and (1 shl 30)) <> 0then
  begin
   GetKeyboardState(KeyState);
   if ToAscii(WParam, lParam, KeyState, AryChar, 0) = 1 then
    PostMessage(Wnd, KeyEvent, Ord(AryChar[0]), 0);
  end;
 Result := CallNextHookEx(HookHandle, Code, WParam, lParam);
end;


Weiß jemand, woran das liegt? Die Message empfang ich dann mittels WndProc
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.WndProc(var Msg: TMessage);
begin
 case Msg.Msg of
  KeyEvent: memo1.Text:= memo1.Text+Chr(Msg.WParam); // Testweise dann doch in einem Memo
 end;
end;


Viele Grüße
Littleben
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 14.04.13 17:12 
hier gibt es einen Hook ohne DLL, Mouse und Großkleinschreibung sollten IMHO auch kein Problem sein.

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 14.04.13 18:57 
ich würde gerne bei meiner DLL bleiben ;)
MeierZwoo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94
Erhaltene Danke: 11

Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
BeitragVerfasst: So 14.04.13 21:20 
Es gibt auf der Tastatur auch keine "Großbuchstaben" oder "Kleinbuchstaben". Es gibt nur ScanCodes und den Status. Und ob "Kleinbuchstabe" (Erstbelegung) oder "Großbuchstabe" (Zweitbelegung) oder die Drittbelegung (mit Ctrl) oder die Viertbelegung (mit ALT) gemeint sind, ergibt sich aus der Kombunation mit demj Status. Also muß auch der Status mit berücksichtigt werden.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 14.04.13 21:37 
Verstehe nicht ganz den Bezug auf mein Problem :nixweiss:
MeierZwoo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 94
Erhaltene Danke: 11

Win 7, DOS5
Delphi 2007 Architect, BP7/TP5, LISP, PS
BeitragVerfasst: So 14.04.13 23:26 
Dann beschreib deine Groß/Kleinschreibungs Probleme doch mal exakt - evtl. liege ich ja komplett daneben.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 15.04.13 16:21 
Also: Mit dem gegebenen Code funktioniert die Groß/Kleinbuchstaben Erkennung, WENN sich der Mauszeiger über dem Formular befindet. Hört sich total absurd an, ist aber so ^^
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 15.04.13 19:42 
Hab den Fehler: GetKeyboardState wirkt sich zuerst nur lokal aus. Deshalb muss man einen Umweg gehen:
ausblenden Delphi-Quelltext
1:
KeyState[VK_SHIFT]:= GetKeyState(VK_SHIFT)