Entwickler-Ecke
Windows API - Window Hook
Wotan89 - Sa 10.11.07 23:21
Titel: Window Hook
Ich hab ein Problem mit einer booleanvariable(switch), welche dauernd auf false geschalten wird. Vielleicht ist mein Quelltext verkehrt.
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:
| library Project2;
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
{$R *.res} var hook:cardinal; switch:boolean;
function show(ncode,wparam,lparam:integer):lresult; stdcall; var help:lresult; begin help:=Callnexthookex(hook, ncode, wparam, lparam); if wparam=107 then case switch of true:switch:=false; false:switch:=true; end; if not switch then result:=help; end;
function hookinstall:boolean; stdcall; begin result:=false; hook:=0; switch:=true; hook:=setwindowshookex(WH_Keyboard,@show,HInstance, 0); if hook <> 0 then result:=true; end;
function hookuninstall:boolean;stdcall; begin result:=false; unhookwindowshookex(hook); result:=true; end;
exports hookinstall, hookuninstall; begin end. |
Dient nur einer Tastatursperre welche mit der Taste + ver-bzw. entriegelt wird.
BenBE - So 11.11.07 04:21
Was macht wparam = 107???
BTW:
Delphi-Quelltext
1: 2: 3: 4:
| case switch of true:switch:=false; false:switch:=true; end; |
ist für das Toggeln verantwortlich ... Jedoch prüfst Du nicht die Message, in der WParam=107 auch wirklich die gewünschte Bedeutung hat.
Wotan89 - So 11.11.07 16:29
wparam soll für den Integerwert des Tastendruckes stehen! Das plus-zeichen steht für 107. Dieses Umschalten soll eben nur ausgelöst werden, wenn der man + drückt. Daraufhin wird dann die Tastatur gesperrt oder entsperrt. Mit der case-Anweisung müsste es doch dann immer einmal true und einmal false sein, es ist aber immer false...
BenBE - So 11.11.07 16:34
Weil der Hook für zahlreiche Nachrichten aufgerufen wird ...
Und zu einem Tastendruck gehören immer 2 Nachrichten: WM_KEYDOWN und WM_KEYUP ... Und da musst Du filtern, bei welcher er reagieren soll
Wotan89 - So 11.11.07 19:23
Wie kann ich denn die Messages auslesen? Außerdem stieß ich schon einmal vor das Problem den Rückgabewert zu manipulieren. Z.B. Statt der A-Taste meinetwegen die K-Taste auszugeben.... Außerdem dürfte die Funktion den Booleanwert nicht verändern, da die case-anweisung doch nur unter der Bedingung, dass wparam=107 ist, aufgerufen wird. Dies habe ich mit einer showmessage-funktion nocheinmal geprüft(case-Anweisung wird nicht ausgeführt, solange ich nicht + drücke), trotzdem hat die Variable switch den Wet false...
BenBE - So 11.11.07 22:13
RTFM. Steht in der Hilfe.
Tipp: Ist einer der Parameter ;-)
Wotan89 - Mo 12.11.07 18:11
Dankeschön :P , aber könntest du mir einen Quelltext schicken, bei dem das mit der booleanvar hinhaut? Das will bei mir nicht in den Schädel. Wäre echt nett ;).
Wotan89 - Mo 12.11.07 22:57
Hat sich erledigt ;) nochmal danke
jaenicke - Di 13.11.07 09:44
Titel: Re: Window Hook
Wotan89 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4:
| case switch of true:switch:=false; false:switch:=true; end; | |
Wie wäre es mit
switch := not switch; ? ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!