AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Tastatur Hook funktioniert nicht richtig

Tastatur Hook funktioniert nicht richtig

Ein Thema von Phil1977 · begonnen am 7. Aug 2012 · letzter Beitrag vom 7. Aug 2012
 
Phil1977

Registriert seit: 14. Feb 2010
8 Beiträge
 
#1

Tastatur Hook funktioniert nicht richtig

  Alt 7. Aug 2012, 08:25
Hallo,

Ich wollte mich mal in das Thema Hooks einarbeiten und habe zum Anfang mal mit einem vermeindlich einfachen Tastaturhook ausprobiert. Allerdings funktioniert der Hook nicht wie gewollt. Hier zunächst einmal der Code der DLL:

Code:
library KeyboardHook;

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



var
  HookHandle: Cardinal = 0;
  WindowHandle: Cardinal = 0;
  hook:cardinal;
  hwnd:cardinal;
  hopenfilemap:cardinal=0;
  p:pointer;
  switch:boolean;
  hcreatefilemap:cardinal=0;
  oldproc:pointer;

function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM):
LRESULT; stdcall;
begin
//es ist ebenfalls möglich die Bearbeitung an eine Bedingung zu knüpfen
//it's possible to call CallNextHookEx conditional only.


  case nCode < 0 of
    TRUE: exit; //wenn code kleiner 0 wird nix gemacht
                //if code smaller 0 nothing has to be done
    FALSE:
      begin
        Showmessage(inttostr(wparam));
        if (wParam<100)then Result := CallNextHookEx(HookHandle, nCode, 81, 81) //Wenn Tastaturcode kleiner 100, den Code auf 81 ändern
        else Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); //Wenn größer 100, die gedrückte Taste zurück geben
      end;
  end;
end;

function InstallHook(Hwnd: Cardinal): Boolean; stdcall;
begin
  Result := False;
  if HookHandle = 0 then begin
//Erstmal Hook installieren
//First install the hook
    HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardHookProc,
    HInstance, 0);
//Uebergebenes Fensterhandle sichern
//Save the given window handle
    WindowHandle := Hwnd;
    Result := TRUE;
  end;
end;

function UninstallHook: Boolean; stdcall;
begin
//Hook aus der Hookchain entfernen
//Uninstall hook from hook chain
  Result := UnhookWindowsHookEx(HookHandle);
  HookHandle := 0;
end;

exports
//Installations- und Deinstallationsroutine exportieren
//Export the installation and deinstallation routine
  InstallHook,
  UninstallHook;
end.
Zum Anfang habe ich in der KeyboardHookProc zunächst einmal versucht die Tastatureingabe auszuwerten und bei bestimmten Tasteneingaben eine andere Taste zurück zu geben. Wird eine Taste mit einem Zeichencode kleiner 100 gedrückt, soll immer die Taste mit dem Code 81 zurück gegeben werden. Wird eine Taste mit einem Code >= 100 gedrückt wird an der Eingabe nichts geändert.
Soweit die Theorie, allerdings funktioniert der Hook nicht richtig. Es wird nämlich mit obigem Code immer die gedrückte Taste zurück gegeben Die KeyboardHookProc wird richtig durchlaufen, das habe ich mit eingebauten Showmessage() zu debuggen schon getestet und wenn der Code <100 wird auch die richtige if schleife durchlaufen aber die Tastatur eingabe wird nicht geändert.
Noch seltsamer ist aber folgendes: Wenn ich in die entsprechende if-else-Schleife zum debuggen jeweils eine Showmessage einbaue funktioniert auf einmal alles wie gewollt:

Code:
 if (wParam<100)then
        begin
          Showmessage('Ein');
          Result := CallNextHookEx(HookHandle, nCode, 81, 81)
          end
        else
          begin
            Showmessage('Aus');
            Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
          end;
Hat jemand eine Idee wodran das liegen könnte?

PS: Bevor jemand fragt, welchen Sinn dieser Hook überhaupt haben soll: Garkeinen! Ich wollte nur zum Anfang mal probieren wie ich die Eingaben auslesen und dann auch verändert zurück geben kann.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz