Autor Beitrag
T.E.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31

Win RT, Win 7 Pro, Win 8 Pro
Delphi 2009 Enterprise, Delphi XE, Delphi XE2
BeitragVerfasst: So 14.02.10 15:12 
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
ausblenden 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

_________________
Schöne Grüße,
Torben
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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).

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Astat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75
Erhaltene Danke: 1

Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Mo 15.02.10 00:20 
Hallo T.E, die Welt ist klein "g"

ausblenden volle Höhe 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;

//-- In der Dll zum ermitteln von _hwndTarget
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;

//-- In der Applikation von wo aus Du den Hook startest
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 238
Erhaltene Danke: 4

Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75
Erhaltene Danke: 1

Windows 2000
D6, D7, D2007, Lazarus
BeitragVerfasst: Mo 15.02.10 14:21 
Hallo Hobby-Programmierer,

user profile iconHobby-Programmierer hat folgendes geschrieben Zum zitierten Posting springen:
...
Würde sich da net - die mal von dir erwähnte - Atomtabelle anbieten?


Nein, ist ja nur ein Flag ohne hinterlegtem Wert.


user profile iconHobby-Programmierer hat folgendes geschrieben Zum zitierten Posting springen:
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