![]() |
Tastendrücke protokollieren
Wie erreiche ich es, dass ich an Tasten komme die gedrückt werden? OnFormKeyDown zeichnet ja soweit ich weiss nur tasten auf, die direkt auf dem formular passieren, also durch edits ect.
|
Re: Tastendrücke protokollieren
Aber stell bitte kienen Unfug damit an (Spioniere keine Passwörter oder so aus ;) )
![]() Nachtrag: Das Prog ist gar nicht mehr auf Luckies Webseit, sry. Nachtrag2: ![]() |
Re: Tastendrücke protokollieren
Was du brauchst sind so genannte Hooks.
Gibt es eine Menge sowohl hier im Forum, als im ganzen Web. Ich empfehle die Asserbads Tutorial. Czapie. |
Re: Tastendrücke protokollieren
Zitat:
|
Re: Tastendrücke protokollieren
mmh... gut! :?
Jetze finde ich das Tutorial aber etwas dünn. ---> Sprich ich bin daraus nicht wirklich schlau geworden, weil ich finde, dass zu wenige Dinge erklärt werden. Und das viel verlinkte Programm von Luckie ist auch nicht hilfreich, da es sehr unübersichtlich ist, und man oft kaum erkennt, ob eine Zeile jetzt Teil des Programms ist, oder dem Erstellen der Form dient. Was ich brauche, bzw. was mich interessiert sind die reinen Proceduren/Funktionen mit denen ich an dei Tastendrücke kommen kann. :!: Z.B:
Delphi-Quellcode:
:duck:
liste:TListe;
liste.insert(getgedruecktetaste); |
Re: Tastendrücke protokollieren
Also, Luckies Programm mit Ayas Unit :mrgreen: finde ich recht schön aufgebaut.
Ich hänge sie mal nicht an, ich hoffe, so ist das okay. Er ist so lang, weil die Lizenz auch dabei ist, muss ich aus rechtlichen Gründen ja amchen. ;) Hier die Hook-Unit:
Delphi-Quellcode:
{///////////////////////////////////////////////////////////////////////////////
// // \\ // // // This code is written by: AyaKoshigaya \\ // // // ============================================= \\ // // // Koshigaya Studios 2000 - 2003 \\ // //// [url]http://www.Koshigaya.de[/url] [email]Aya@Koshigaya.de[/email] \\// /// \// //////////////////////////////////////////////////////////////////////////////// -== LIZENZ ==- DIESES PROGRMM / DIESER QUELLCODE IST KOSTENLOS. 1. Lizenz Diese Software wird "So wie sie ist" zur verfügung gestellt, ohne gewährleistung irgendeiner Art. Sie haben das Recht sie weiter zu verteilen oder den Quellcode zu modifizieren. Diese Software darf nur für nicht kommerzielle Wwecke eingesetzt werden. 2. Haftung In keinem Fall kann der Autor haftbar gemacht werden für irgendwelche Schäden, gleich welcher art. 3. Copyright Die Software wird sowohl durch Urheberrechtsgesetze und internationale Urheberrechtsverträge geschützt, als auch durch andere Gesetze und Vereinbarungen über geistiges Eigentum. 4. Weitergabe Die Software darf und soll in der hier angebotenen Form weitergegeben werden. Alle Rechte verbleiben aber beim Autor. 5. Modifizierung des Quellcodes Der Quellcode darf verändert / modifiziert werden unter folgenden Bedingungen: 1.) Modifizierter Quellcode ist zu kennzeichen. 2.) Der Copyrightvermerk aus dem Dateikopf muß erhalten bleiben. 3.) Der Ursprung des original Quellcodes darf nicht verfälscht werden. 6. Wirksamkeit Sollte eine der Bestimmungen dieser Lizenzbestimmungen unwirksam sein, so wird davon die Wirksamkeit der übrigen Bestimmungen nicht berührt. //////////////////////////////////////////////////////////////////////////////// ****************** Declarations you need in your Program *********************** const WM_KEYBOARD_HOOK = WM_USER + 52012; function CreateHook(hWnd: HWND; ShiftKeys: Boolean): Boolean; stdcall; external 'KoshigayaKeyboardHook.dll'; function DeleteHook: Boolean; stdcall; external 'KoshigayaKeyboardHook.dll'; ********************************************************************************} library KBHook; uses Windows, Messages; 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 else begin 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 then if not (wParam in [16,17,18]) or GetShiftKeys then PostMessage(hwndBuffer^,WM_KEYBOARD_HOOK,Key,GetActiveWindow); end; end; function CreateHook(hWnd: HWND; ShiftKeys: Boolean): Boolean; stdcall; var bHWND: PHWND; begin hMMF:=CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE or SEC_COMMIT,0,SizeOf(hWnd),'KoshigayaKeyboardHookHandle'); 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 DeleteHook: Boolean; stdcall; begin FreeMem(hWndBuffer); CloseHandle(hMMF); Result:=UnhookWindowsHookEx(hHook); hHook:=0; end; exports CreateHook, DeleteHook; var MMF: THandle; begin MMF:=OpenFileMapping(FILE_MAP_READ,false,'KoshigayaKeyboardHookHandle'); if MMF<>0 then begin hWndBuffer:=MapViewOfFile(MMF,FILE_MAP_READ,0,0,SizeOf(HWND)); CloseHandle(MMF); end; end. |
Re: Tastendrücke protokollieren
Zitat:
Du hast geschrieben, dass dir in dem Tutorial zu wenig erklährt wird. Du kannst glaube ich gerne hier die Sachen fragen, die du nicht verstehst, irgendwer kann dir das bestimmt genauer erklähren. Dafür gibts das Forum ja :wink: Man liest sich, Stanlay :hi: |
Re: Tastendrücke protokollieren
Zitat:
:wink: |
Re: Tastendrücke protokollieren
Du mußt dich ja nicht so streng daran halten.
Prinzipiell empfehle ich dir ein bißchen Arbeit mit der Windows-API und speziell mit Handles. Czapie. P.S.: Sorry, kann ja nicht jeden User-Namen auswendig kennen ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz