![]() |
Problem bei KeyHook
Ich wollte ein Programm schreiben welches mit erlaubt tastenergebnisse umzuwandeln. Soll heißen das Prigramm registriert beispielsweise das [ENTER] gedrück wurde und wandelt es in [LEERTASTE] um bevor ess beim programm ankommt. Sinn der Sache ist es die Tasten die die PC-Fernbedienung emuliert umzuwandeln in die Tasten welche Winamp, PowerDVD usw. als ShortCuts erwarten
Also habe ich angefangen eine Tastatur-Hook zu programmieren, was auch sehr gut funktioniert. Allerdings ist der Hook nur Lokal und nicht Global. Die Hook-Prozeduren stecken in einer DLL welche von einer EXE geladen werden. den DLL-Source poste ich hier:
Delphi-Quellcode:
//Edit:
library hook;
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt- Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL. Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String- Informationen als PChar- oder ShortString-Parameter übergeben. } uses windows, StdCtrls, comCtrls, Forms, SysUtils, Messages, dialogs; var OrgVar : TEdit; ChgVar : TEdit; Form : TForm; ValList : TListView; hLocalHook : Cardinal; hGlobalHook : Cardinal; {$R *.res} function LocalHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin Result := CallNextHookEx(hLocalHook, nCode, wParam, lParam); if wParam=9 then exit; if GetForegroundWindow()<>Form.Handle then exit; if OrgVar.Focused then OrgVar.Text:=IntToStr(wParam); if ChgVar.Focused then ChgVar.Text:=IntToStr(wParam); end; function GlobalHook(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var i : integer; begin wParam:=65; Result := CallNextHookEx(hGlobalHook, nCode, wParam, lParam); end; procedure setLocalHook;stdcall begin if hLocalHook = 0 then hLocalHook:=SetWindowsHookEx(WH_KEYBOARD, @LocalHook, hInstance, 0); end; procedure unsetLocalHook;stdcall; begin If hLocalHook<>0 then UnhookWindowsHookEx(hLocalHook); end; procedure setGlobalHook;stdcall begin if hGlobalHook = 0 then hGlobalHook:=SetWindowsHookEx(WH_KEYBOARD, @GlobalHook, hInstance, 0); end; procedure unsetGlobalHook;stdcall; begin If hGlobalHook<>0 then UnhookWindowsHookEx(hGlobalHook); end; procedure setVars(OrgVarEdit,ChVarEdit:TEdit;MainForm:TForm;ValListView:TListView); begin OrgVar:=OrgVarEdit; ChgVar:=ChVarEdit; Form:=MainForm; ValList:=ValListView; end; exports setLocalHook, unsetLocalHook, setGlobalHook, unsetGlobalHook, setVars; begin end. Was dazu vielleicht noch gesagt werden sollt, der lokale Hook wird genutzt um die Einstellunen der Tastatur-Changes zu tätigen, dieser wird abgeschaltet kurz bevor der gobale Hook gestartet wird. Welcher welcher ist, geht aus den Prozedur-namen eindeutig hervor. |
Re: Problem bei KeyHook
OK, hab es nun hingekriegt das es mit dem globalem Hook funktioniert. Ich nutze dazu statt WH_KEYBOARD einfach WH_KEYBOARD_LL, aber wie kann ich nun die Eingaben ändern bevor die das Programm erreichen?
[PUSHBEITRAG] Kann mir wirklich keiner helfen? Kann man eigendlich aum glauben :( [/PUSHBEITRAG] [edit=Christian Seehase]Pushen von Threads frühestens nach 24 Stunden :!: Pushbeitrag gelöscht. Mfg, Christian Seehase[/edit] |
Re: Problem bei KeyHook
*push*Das Problem besteht noch immer, ich hoffe mir kann bald jemannd helfen :(
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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-2025 by Thomas Breitkreuz