Entwickler-Ecke
Windows API - Hook - app.handle in MMF/Registry dann hwndTarget zuweisen?
T.E. - So 14.02.10 15:12
Titel: Hook - app.handle in MMF/Registry dann hwndTarget zuweisen?
Moin moin,
ich habe zwei kleine Probleme:
und zwar code ich derzeit gerade an einem Tool für meine Firma, das überprüfen soll ob die Tasten eines USB Panels, das die Funktionstasten F1 bis F24 auslagert, ordnungsgemäß funktionieren.
So ich habe mich da für eine Hook lösung entschieden und benötige dafür jetzt leider noch mal etwas Hilfe:
Ich habe in der Hook DLL die typischen Funtkionen drin für den aufruf, bzw. die De-/Installation.
In der Aufrufenden Funktion habe ich nun noch folgenden Aufruf, der die gedrückte Taste an das Hauptprogramm weitergeben soll
Delphi-Quelltext
1:
| PostMessage(_hwndTarget, WM_USER + 8888, Key, GetActiveWindow); |
Mein Problem eins ist, das ich nicht wirklich weiß wie ich den Parameter _hwndTarget deklarieren soll, bzw. was ich genau da rein schreiben muss, da man mir nur gesagt hatte, das ich das Application.handle im Create des Servers in die Registry oder in ein MemoryMapped File schreiben soll. Aber für wie genau soll ich das machen? ich weiß zwar wie ich werte in die Registry schreibe bzw. auslese, aber soll ich einfach das applicaiton.handel der projekt1.exe irgendwo in die registry unter hookapphandle = applicaiton.handle schreiben? und dieses dann in der dll _hwndTarget zuweisen?
Wäre für Hilfe sehr dankbar!
Greetz Torben
BenBE - So 14.02.10 18:31
Andere Möglichkeit:
RegisterWindowMessage nutzen, um zwischen Client und Server eine eindeutige Window-Message auszumachen.
Nach der Installation sendet die Hook-DLL eine Broadcast-Message mit der registrierten Message-ID zur Hauptanwendung zurück.
In der Nachricht können dann 8 Byte Daten übermittelt werden (z.B. ein Fenster wo der Hook auf Nachrichten wartet oder andere Daten).
Astat - Mo 15.02.10 00:20
Hallo T.E, die Welt ist klein "g"
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| uses Registry;
function GetHandle(HKEY: DWORD; const SubKey, ValueName: String; CanCreate: Boolean = false): DWORD; var Reg : TRegistry; begin result := DWORD(-1); Reg:=TRegistry.create; Reg.RootKey:=HKey; if Reg.OpenKey(SubKey,CanCreate) then if Reg.ValueExists(ValueName) then result := Reg.ReadInteger(ValueName); Reg.CloseKey; Reg.Free; end;
procedure AddHandle(HKEY: DWORD; const SubKey, ValueName: String; dwVal: DWORD; CanCreate: Boolean = true); var Reg: TRegistry; begin Reg:=TRegistry.Create; Reg.RootKey:=HKey; if Reg.OpenKey(SubKey, CanCreate) then Reg.WriteInteger(ValueName, dwVal); Reg.CloseKey; Reg.Free; end;
procedure TForm1.FormCreate(Sender: TObject); begin AddHandle(HKEY_LOCAL_MACHINE, 'SOFTWARE', 'hwndTarget', Application.Handle); end;
end. |
lg. Astat
Hobby-Programmierer - Mo 15.02.10 13:20
Hallo Astat ...
Würde sich da net - die mal von dir erwähnte - Atomtabelle anbieten?
Auch könnte ich schwören dass ich mal Code gesehen habe wo das Application.Handle der Dll direkt übergeben wurde, als Parameter über eine Procedure die den Hook in der Dll startet?
LG aus Berg am Laim :o)
TE: Ich pers. finde es doof das der Thread zerissen wurde! Hinweis auf Crossposting wäre angebracht gewesen.
Astat - Mo 15.02.10 14:21
Hallo Hobby-Programmierer,
Hobby-Programmierer hat folgendes geschrieben : |
...
Würde sich da net - die mal von dir erwähnte - Atomtabelle anbieten?
|
Nein, ist ja nur ein Flag ohne hinterlegtem Wert.
Hobby-Programmierer hat folgendes geschrieben : |
Auch könnte ich schwören dass ich mal Code gesehen habe wo das Application.Handle der Dll direkt übergeben wurde, als Parameter über eine Procedure die den Hook in der Dll startet?
|
Ja, kann man ja implementieren, die Startproc des Hooks mit einem zusätzlichen Parameter versehen,
wenn dieser <> 0 dann Handle in Registry eintragen, wenn = 0 dann nichts eintragen.
Normalerweise verwendet man da eleganterweiese sowieso Memory mapping.
lg. Astat
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!