AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi KeyHook - Kleine Einsteigerhilfe gesucht
Thema durchsuchen
Ansicht
Themen-Optionen

KeyHook - Kleine Einsteigerhilfe gesucht

Ein Thema von A-M-X · begonnen am 12. Feb 2006 · letzter Beitrag vom 13. Feb 2006
Antwort Antwort
A-M-X

Registriert seit: 29. Sep 2005
Ort: Karlsruhe
152 Beiträge
 
#1

KeyHook - Kleine Einsteigerhilfe gesucht

  Alt 12. Feb 2006, 14:22
Huhu!

Erstmal: Ich habe nicht das Problem 'Wie programmiere ich einen Keylogger' oder 'Wie sende ich Tasten an ein anderes Fenster', nein , ich HABE einen Keylogger programmiert bzw. mir die Codes aus dem besten Delphi Forum -> DP gesucht und mir mal ein Programm zusammengeschnipselt.

Hier mein Problem, bei dem ich hoffe, dass es gelöst werden kann:

Ich habe die dll KeyHook.dll

Delphi-Quellcode:
library KeyHook;

uses
  Windows,
  Messages;

{$R *.res}

type
  PHWND = ^HWND;

const
  WM_KEYBOARD_HOOK = WM_USER + 52012;

var
  hHook: LongWord = 0;
  Key: Word;
  KeyboardLayout: HKL;
  GetShiftKeys: Boolean;
  hWndBuffer: PHWND;
  hMMF: THandle;

function KeyboardProc(nCode: Integer; wParam: LongWord; lParam: LongWord): LongWord; stdcall;
var
  LastKey: Char;
  KeyState: TKeyboardState;
begin
Result := CallNextHookEx(hHook, nCode, wParam, lParam);
if nCode < 0 then Exit;
KeyboardLayout := GetKeyboardLayout(0);
GetKeyboardState(KeyState);
if ToAsciiEx(wParam, MapVirtualKeyEx(wParam, 2, KeyboardLayout), KeyState, @LastKey, 0, KeyboardLayout) > 0 then
  Key := Ord(LastKey)
else
  Key := wParam;
if ((lParam and $80000000) = 0) and (not (wParam in [16, 17, 18]) or GetShiftKeys) then
PostMessage(hwndBuffer^, WM_KEYBOARD_HOOK, Key, GetActiveWindow);
end;

function Key_CreateHook(hWnd: HWND; ShiftKeys: Boolean): Boolean; stdcall;
var
  bHWND: PHWND;
begin
hMMF := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE or SEC_COMMIT, 0, SizeOf(hWnd), 'EDO-SoftKeyHookHandle');
bHWND := MapViewOfFile(hMMF, FILE_MAP_WRITE, 0, 0, SizeOf(HWND));
bHWND^ := hWnd;
UnmapViewOfFile(bHWND);
GetMem(hWndBuffer, SizeOf(HWND));
hWndBuffer^ := hWnd;
GetShiftKeys := ShiftKeys;
if hHook = 0 then
  hHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, hInstance, 0);
Result := hHook <> 0;
end;

function Key_DeleteHook: Boolean; stdcall;
begin
FreeMem(hWndBuffer);
CloseHandle(hMMF);
Result := UnhookWindowsHookEx(hHook);
hHook := 0;
end;

exports
  Key_CreateHook,
  Key_DeleteHook;

var
  MMF: THandle;

begin
MMF := OpenFileMapping(FILE_MAP_READ, false, 'EDO-SoftKeyHookHandle');
if MMF <> 0 then
  begin
  hWndBuffer := MapViewOfFile(MMF, FILE_MAP_READ, 0, 0, SizeOf(HWND));
  CloseHandle(MMF);
  end;
end.
So nun verwende ich die auch in meinem Programm. Geht alles schön und gut.

Nur wenn der Benutzer z.B. die Funktionstaste F1 oder F2 ... drückt, erscheint das von der DLL nicht einfach so.

Ich habe das folgendermaßen gelöst:

Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
S: String;
begin
if Msg.message = WM_KEYBOARD_HOOK then
 // --------------------------- Beginn der Sonder und Ausnahmefunktionen
  begin
  if Msg.wParam = 13 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Enter>';
  Exit;
  end;
  if Msg.wParam = 32 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Spacebar>';
  Exit;
  end;
  if Msg.wParam = 112 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F1">';
  Exit;
  end;
  if Msg.wParam = 113 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F2">';
  Exit;
  end;
  if Msg.wParam = 114 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F3">';
  Exit;
  end;
  if Msg.wParam = 115 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F4">';
  Exit;
  end;
  if Msg.wParam = 116 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F5">';
  Exit;
  end;
  if Msg.wParam = 117 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F6">';
  Exit;
  end;
  if Msg.wParam = 118 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F7">';
  Exit;
  end;
  if Msg.wParam = 119 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F8">';
  Exit;
  end;
  if Msg.wParam = 120 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F9">';
  Exit;
  end;
  if Msg.wParam = 121 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F10">';
  Exit;
  end;
  if Msg.wParam = 122 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F11">';
  Exit;
  end;
  if Msg.wParam = 123 then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Function Key "F12">';
  Exit;
  end;
  if Msg.wParam = VK_BACK then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + '<Backspace>';
  Exit;
  end;

//------------------------ Ende der Sonder und Ausnahmefunktionen
  Memo1.Lines.Text := Memo1.Lines.Text + (Chr(Msg.wParam));
  end;
end;

So nun ist da ein kleines Problem:

Ich möchte nicht andauernd

Delphi-Quellcode:
  if Msg.wParam = {Irgendeine Taste} then
  begin
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + 'Irgend ne Taste';
  Exit;
eingeben.

Meine Frage:

Gibt es da eine Methode, den Quelltext zu verkürzen? Ich meine also z.B.

Delphi-Quellcode:
120: '<Function Key F9>';
121: '<Function Key F10>';
oder so.. nur im "grafischen" Sinne


Hab mich damit noch nie so richtig beschäftigt, kenne mich da also nicht so aus.
Weiß einer wie das geht?

P.S.: Die, die das jetzt immer noch ned geblickt haben ( ): Ich möchte den Quelltext bei
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
verkürzen
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: KeyHook - Kleine Einsteigerhilfe gesucht

  Alt 12. Feb 2006, 14:41
Hi,

Code lässt sich geringfügig kürzen:

Delphi-Quellcode:
case msg.wParam of
  13: Memo1.Lines.Add('<Enter>');
  32: Memo1.Lines.Add('<Spacebar>');
  // Funktionstasten
  112..123: Memo1.Lines.Add(format('<Function Key "F%d">',[msg.wParam - 111]));
  VK_BACK: Memo1.Lines.Add('<Backspace>');
else
  Memo1.Lines.Add(Chr(Msg.wParam));
end;
Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
A-M-X

Registriert seit: 29. Sep 2005
Ort: Karlsruhe
152 Beiträge
 
#3

Re: KeyHook - Kleine Einsteigerhilfe gesucht

  Alt 12. Feb 2006, 14:52
Zitat von dataspider:
Hi,

Code lässt sich geringfügig kürzen:

Delphi-Quellcode:
case msg.wParam of
  13: Memo1.Lines.Add('<Enter>');
  32: Memo1.Lines.Add('<Spacebar>');
  // Funktionstasten
  112..123: Memo1.Lines.Add(format('<Function Key "F%d">',[msg.wParam - 111]));
  VK_BACK: Memo1.Lines.Add('<Backspace>');
else
  Memo1.Lines.Add(Chr(Msg.wParam));
end;
Cu, Frank
Hm komisch wenn ich starte, und meine maus bewege, maus drücke oder irgendwas mache, OBWOHL Key_Hook garnicht installiert/aktiviert ist, kommen irgendwelche zeichen in meinem Memo1

Edit: Noch n Fehler...
  Mit Zitat antworten Zitat
A-M-X

Registriert seit: 29. Sep 2005
Ort: Karlsruhe
152 Beiträge
 
#4

Re: KeyHook - Kleine Einsteigerhilfe gesucht

  Alt 12. Feb 2006, 15:16
Ich sehe gerade: Wenn ich "s" drücke, kommt im Memo "Function Key F4" und bei anderen Tasten auch...

Wie behebt man das?

P.S.: Bitte neue Antwort schreiben =) thx
  Mit Zitat antworten Zitat
A-M-X

Registriert seit: 29. Sep 2005
Ort: Karlsruhe
152 Beiträge
 
#5

Re: KeyHook - Kleine Einsteigerhilfe gesucht

  Alt 13. Feb 2006, 14:42
Hat da keiner ne Antwort drauf?

*Push* ^^ (Sagt mir bitte, wenn man ned pushen darf)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz