Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Anfängerfrage zu Hooks (https://www.delphipraxis.net/195511-anfaengerfrage-zu-hooks.html)

derseitzer 6. Mär 2018 11:22

Anfängerfrage zu Hooks
 
Hallo ich habe eine kurze Frage zu Hooks:
Habe nach diesem Tut soweit alles fertig: https://www.delphi-treff.de/tutorial...astatur-hooks/
Mein Hauptformular, in dem ich die DLL einbinde sieht so aus:

Code:
begin
  lib := LoadLibrary('blablabla\Keyboardhook.dll');
  if lib <> INVALID_HANDLE_VALUE then
  begin
    InstallHook := GetProcAddress(lib, 'InstallHook');
    UnInstallHook := GetProcAddress(lib, 'UninstallHook');
  end;

end.
Frage: Wann und wo muss ich die Keyboardhookproc-Funktion ausführen? Diese sollte ich ja ausführen, um auf einen Tastendruck reagieren zu können..

Whookie 6. Mär 2018 13:12

AW: Anfängerfrage zu Hooks
 
Ohne das jetzt näher angesehen zu haben, gehe ich davon aus, dass diese Funktion wohl über InstallHook übergeben und dann von Windows entsprechend aufgerufen wird, bis sie über UninstallHook wieder entfernt wird.

derseitzer 6. Mär 2018 13:17

AW: Anfängerfrage zu Hooks
 
Code:
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM):
 LRESULT; stdcall;
begin
showmessage('hi');
//es ist ebenfalls möglich die Bearbeitung an eine Bedingung zu knüpfen
//it's possible to call CallNextHookEx conditional only.
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
  case nCode < 0 of
    TRUE: exit; //wenn code kleiner 0 wird nix gemacht

    FALSE:
      begin
      if lParam = VK_SPACE then
      begin
      showmessage('Space!');
  end;
      end;
  end;
end;
Die Showmessages werden bei mir nicht ausgeführt :/ ich dachte es liegt daran.. woran könnte es dann liegen?

Zacherl 6. Mär 2018 14:43

AW: Anfängerfrage zu Hooks
 
Welchen Hook Typ verwendest du? Mit der nicht low-level Variante der Keyboard Hooks hatte ich auch schonmal Probleme. Läuft irgendeine Art von Sicherheits-Software?

Edit:
Folgender Code funktioniert bei mir unter Windows 10 - 64 Bit (für
Delphi-Quellcode:
WH_KEYBOARD_LL
benötigt man sogar nichtmal eine Dll :)):
Delphi-Quellcode:
var
  Hook: HHOOK;

function TestHook(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
begin
  Winapi.Windows.Beep(1000, 50);
  Result := CallNextHookEx(Hook, code, wparam, lparam);
end;

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  Hook := SetWindowsHookEx(WH_KEYBOARD_LL, TestHook, hInstance, 0);
  if (Hook = 0) then RaiseLastOSError;
end;

EWeiss 6. Mär 2018 19:31

AW: Anfängerfrage zu Hooks
 
Zitat:

Zitat von Zacherl (Beitrag 1395351)
Welchen Hook Typ verwendest du? Mit der nicht low-level Variante der Keyboard Hooks hatte ich auch schonmal Probleme. Läuft irgendeine Art von Sicherheits-Software?

Edit:
Folgender Code funktioniert bei mir unter Windows 10 - 64 Bit (für
Delphi-Quellcode:
WH_KEYBOARD_LL
benötigt man sogar nichtmal eine Dll :)):
Delphi-Quellcode:
var
  Hook: HHOOK;

function TestHook(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
begin
  Winapi.Windows.Beep(1000, 50);
  Result := CallNextHookEx(Hook, code, wparam, lparam);
end;

procedure TfrmMain.Button1Click(Sender: TObject);
begin
  Hook := SetWindowsHookEx(WH_KEYBOARD_LL, TestHook, hInstance, 0);
  if (Hook = 0) then RaiseLastOSError;
end;

Interessant..
Nur was sagen die Malware, Virenscanner?

gruss

Zacherl 6. Mär 2018 19:55

AW: Anfängerfrage zu Hooks
 
Zitat:

Zitat von EWeiss (Beitrag 1395369)
Nur was sagen die Malware, Virenscanner?

Wird zwar nicht generell als schädlich eingestuft, aber kommt durchaus vor, dass bestimmte Sicherheitssoftware diese Aktion - teils ohne Rückfrage - blockiert. Halbwegs gute Produkte für erfahrenere Anwender fragen in der Regel erstmal nach.

Delphi-Laie 6. Mär 2018 21:07

AW: Anfängerfrage zu Hooks
 
Eigentlich ist auf Assarbads bzw. Olivers Internetseite die Hookprogrammierung mit Delphi erschöpfend erklärt: https://assarbad.net/en/stuff/tutorials/hooks/

Wundert mich, daß das hier noch niemand einwarf. Ich konnte mich da gut durcharbeiten, bei Fragen hilft Oliver auch gern weiter.

Zitat:

Zitat von Zacherl (Beitrag 1395374)
Zitat:

Zitat von EWeiss (Beitrag 1395369)
Nur was sagen die Malware, Virenscanner?

Wird zwar nicht generell als schädlich eingestuft, aber kommt durchaus vor, dass bestimmte Sicherheitssoftware diese Aktion - teils ohne Rückfrage - blockiert. Halbwegs gute Produkte für erfahrenere Anwender fragen in der Regel erstmal nach.

Immerhin sind die Hooks offiziell von Microsoft implementierte Steuerungsmechanismen für das Betriebsprogramm. So etwas pauschal zu verwerfen ("blockieren"), ist eigentlich ein Affront sondersgleichen. Ein Warnhinweis mit Abschaltoption täte es auch und m.E. sogar besser.

EWeiss 6. Mär 2018 21:11

AW: Anfängerfrage zu Hooks
 
Zitat:

Immerhin sind die Hooks offiziell von Microsoft implementierte Steuerungsmechanismen für das Betriebsprogramm. So etwas pauschal zu verwerfen ("blockieren"), ist eigentlich ein Affront sondersgleichen. Ein Warnhinweis mit Abschaltoption täte es auch und m.E. sogar besser.
Dito sehe ich genauso.
ABER!
Wenn man ein Programm mit diversen Hooks verkauft und anschließend den Aufschrei des Kunden miterleben muss ist das auch nicht gerade angenehm.
Wollte das nur mal gefragt haben.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz