Autor Beitrag
FaFu
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 09.10.08 14:27 
Hallo,
ich hab mir paar Tutorials durchgelesen und hab für die DLL (keyboardhook.dll) folgenden Quelltext:

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:
40:
41:
42:
43:
44:
45:
46:
library KeyboardHook; 
uses 
  Windows, 
  Messages; 

var 
  HookHandle: Cardinal = 0
  WindowHandle: Cardinal = 0

function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall
begin 

  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); 
  case nCode < 0 of 
    TRUE: exit; 
    FALSE: 
      begin 

      end
  end
end

function InstallHook(Hwnd: Cardinal): Boolean; stdcall
begin 
  Result := False; 
  if HookHandle = 0 then begin 

    HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc, HInstance, 0); 

    WindowHandle := Hwnd; 
    Result := TRUE; 
  end
end

function UninstallHook: Boolean; stdcall
begin 

  Result := UnhookWindowsHookEx(HookHandle); 
  HookHandle := 0
end

exports 

  InstallHook, 
  UninstallHook; 
end.






Und für mein Projekt wollte ich erstmal nur testen ob es auf einen Tastendruck reagiert.

Hier der Quelltext:


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:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
unit Unit1; 

interface 

uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, StdCtrls; 

type 
  TInstallHook = function(Hwnd: THandle): Boolean; stdcall
  TUninstallHook = function: Boolean; stdcall
  TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end

var 
  InstallHook: TInstallHook; 
  UninstallHook: TUninstallHook; 
  lib: Cardinal; 
  Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
  lib := LoadLibrary('keyboardhook.dll'); 
  if lib <> INVALID_HANDLE_VALUE then 
  begin 
    InstallHook := GetProcAddress(lib, 'InstallHook'); 
    
  end// else ERROR 
end
procedure HookProc(var Result: WParam); 
begin 
if Result = $10000 then 
RenameFile('C:\MyWorks\x.txt','C:\MyWorks\y.txt');         // Test um eine Datei umzunennen
end
procedure TForm1.FormDestroy(Sender: TObject); 
begin 
UnInstallHook := GetProcAddress(lib, 'UninstallHook'); 
end

end.



$10000 ist ja eigentlich Die Pfeiltaste nach unten und RenameFile war halt nur als Test gedacht.

Was hab ich falsch gemacht? Ich kann alles starten, aber das Prog. tut halt nix

Kann mir jemand helfen, bitte so dass ich es versteh, bin noch ziehmlicher Anfänger auf dem Gebiet.

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt
bjd
Hält's aus hier
Beiträge: 11

Win XP Professional
Delphi 4 Std., Delphi 7 Pers., Object Pascal
BeitragVerfasst: So 12.10.08 17:14 
Vielleicht solltest du die Funktionen auch noch aufrufen und nicht nur den DLL-Funktionen zuweisen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
InstallHook := GetProcAddress(lib, 'InstallHook');
InstallHook(...);

[...]

UnInstallHook := GetProcAddress(lib, 'UninstallHook');
UnInstallHook(...);


Außerdem solltest du die DLL noch freigeben: FreeLibrary