Autor Beitrag
ArnF
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 22.09.02 16:32 
Ich bin gerade Dabei einen Keyboard-Hook zu schreiben. Dabei übergebe ich beim installieren des Hooks, der in einer DLL-Datei ist, mehrere Werte. Diese Werte speicher ich dann in intern deklarierte Variablen.
Diese Variablen werden aber zurückgesetzt, sobald die Installationsprozedur beendet ist.

Wie kann ich es schaffen, dass die Werte in den Variablen erhalten bleiben?

_________________
Das Leben ist ein Sch...-Spiel, aber die Grafik ist cool.
Manfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Mo 23.09.02 12:06 
Hi!
Verrate uns doch bitte einmal, wo Du die Variablen eigentlich deklarierst? In der Hauptunit der DLL können Variablen deklariert werden, deren Inhalt über die Laufzeit der DLL erhalten bleiben. Vielleicht startest Du auch unbemerkt eine zweite Instanz der DLL?

_________________
Computer können schneller rechnen als wir, deshalb machen sie auch mehr Fehler
ArnF Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 26.09.02 16:19 
Aufgerufen werden die Funktinen in der DLL über
ausblenden Quelltext
1:
Function InstallHook(Hwnd: Hwnd; WaitTime: Integer): Boolean; stdcall; external 'keyboardhook.dll';					


Ausschnitt aus der DLL:
ausblenden volle Höhe 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:
library KeyboardHook;

uses
  ...

var
  HookHandle: hWnd = 0;
  WindowHandle: hWnd = 0;
  WTime: Integer;

function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
  if nCode<0 Then exit;
  if wParam=Ord('S') Then
  if (lParam and Trunc(Power(2,31)))=Trunc(Power(2,31)) Then
    begin  //Wird ausgeführt, wenn "S" losgelassen wird
      //WindowHandle und WTime sind jetzt 0;
    end;
end;

function InstallHook(Hwnd: Hwnd; WaitTime: Integer): Boolean; stdcall;
begin
  Result := False;
  if HookHandle = 0 then begin
    HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0);
    WindowHandle := Hwnd;  //Hier wird WindowHandle gesetzt
    Result := TRUE;
    WTime:=WaitTime; //Hier wird WTime gesetzt
  end;
end;

exports
  InstallHook,
  UninstallHook;
end.


Bei der Installations-Funktion werden die Variablen WaitTime und HWND übergeben und in die Variablen WTime und WindowHandle übergeben.
Bei der Hauptprozedur, die auf die Tastatureingaben reagiert, kann diese Variablen nicht mehr auswerten, da diese wieder 0 sind.


Kann es vielleicht am Aufruf über "external ..." liegen?

_________________
Das Leben ist ein Sch...-Spiel, aber die Grafik ist cool.