AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Merkwürdiges Problem mit Kbd Hook
Thema durchsuchen
Ansicht
Themen-Optionen

Merkwürdiges Problem mit Kbd Hook

Ein Thema von T3rm1n4T0r · begonnen am 9. Okt 2005 · letzter Beitrag vom 12. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
T3rm1n4T0r

Registriert seit: 10. Sep 2004
38 Beiträge
 
Turbo Delphi für Win32
 
#1

Merkwürdiges Problem mit Kbd Hook

  Alt 9. Okt 2005, 18:23
Hi,
ich hab mir einen KeyboardHook geschrieben, der eine Message and das Hauptprogramm sendet, damit ich dort alles auswerten kann.
Das Ganze sieht so aus:
Delphi-Quellcode:
function KbdHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Result := CallNextHookEx(Keyboard_HookHandle, nCode, wParam, lParam);
  case nCode < 0 of
    True: exit; // nicht anrühren wenns negativ ist
    False:
      begin
        case ((lParam and $80000000) = 0) of
          True: ; // WM_KEYDOWN
        else // WM_KEYUP
          SendMessage(HWND_BROADCAST,myMsg3,wParam,lParam);
        end;
      end;
  end;
end;
Mein Problem ist jetzt, dass wenn ich in einem Spiel (in meinem Fall Warcraft III) eine Taste drücke, dann wird die Message zweimal gesendet. In Windows passiert dies auch manchmal. Undzwar wenn ich in einem Edit das auf der Form liegt eine Taste drücke. Hat das Edit keinen Focus, dann kommt die Message einmal an, so wie es sein soll?
Hat jemand eine Idee, was da los ist und wie ich das in den Griff bekommen kann?
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#2

Re: Merkwürdiges Problem mit Kbd Hook

  Alt 9. Okt 2005, 18:24
Das liegt daran weil sie auch wirklich 2 mal gesendet wird.
Einmal für KeyDown und einmal für KeyUp.
Guck mal in der Forensuche da findest du 100%ig was.

//Edit: Moment, irgendwas verwechsel ich da...Vergiss es
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
T3rm1n4T0r

Registriert seit: 10. Sep 2004
38 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Merkwürdiges Problem mit Kbd Hook

  Alt 10. Okt 2005, 18:40
Keiner ne Idee, was das falsch läuft?
  Mit Zitat antworten Zitat
T3rm1n4T0r

Registriert seit: 10. Sep 2004
38 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Merkwürdiges Problem mit Kbd Hook

  Alt 11. Okt 2005, 16:14
Also, erklären kann ich es mir immer noch nicht, warum das so ist. Allerdings lässt sich das Problem lösen indem man zusätzlich noch überprüft ob GetAsyncKeyState(vkc) = 0 ist. Das müsste zawr immer 0 sein, da ich ja das 32 Bit prüfe ob es gesetzt ist, aber irgendwie is da alles komisch
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Merkwürdiges Problem mit Kbd Hook

  Alt 11. Okt 2005, 16:27
Tipp: schreib in deiner Hook-Routine ein OutputDebugString mit nCode, wParam und lParam hinzu. Das kannst du in Delphi unten in der Meldungsliste sehen wenn du die eigentliche Anwendung debuggst (oder mit diesem Programm). Überprüfe dann an den Werten, ob sich die zweite (doppelte) Taste irgendwie von der ersten unterscheidet...
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
T3rm1n4T0r

Registriert seit: 10. Sep 2004
38 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Merkwürdiges Problem mit Kbd Hook

  Alt 11. Okt 2005, 20:23
Also hab das mal mit lparam gemacht und wenn ich keine Taste loslassen, dann erscheinen da unten bei Delphi 4 gleiche Nachrichten. Was bedeutet das jetzt?
  Mit Zitat antworten Zitat
Benutzerbild von LoRd-MuldeR
LoRd-MuldeR

Registriert seit: 9. Okt 2005
Ort: Somewhere over the Slaughterhouse
132 Beiträge
 
Delphi 7 Professional
 
#7

Re: Merkwürdiges Problem mit Kbd Hook

  Alt 11. Okt 2005, 20:29
Zitat von T3rm1n4T0r:
Wie wandel ich denn wParam und lParam in nen string um?
IntToStr
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Merkwürdiges Problem mit Kbd Hook

  Alt 11. Okt 2005, 22:09
Zitat von T3rm1n4T0r:
... und wenn ich keine Taste loslassen ...
??? Wie meinst du das ???

Probier mal alle Parameter auszugeben:
OutputDebugString(PChar(Format('KbdHookProc($%8.8x, $%8.8x, $%8.8x)', [nCode, wParam, lParam]))); ... und dann solltest du das natürlich insbesondere für die Fälle ausprobieren, wo du zweimal dieselbe Taste bekommst.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
T3rm1n4T0r

Registriert seit: 10. Sep 2004
38 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Merkwürdiges Problem mit Kbd Hook

  Alt 11. Okt 2005, 23:36
Irgendwie hab ich da Mist geschrieben. Also interessant ist nur lParam, da wParam sich nur von Taste zu Taste unterscheidet.
OutputDebugString hab ich direkt unter SendMessage eingebaut, also in KeyUp Case! Wenn nun dieses Ereignis eintritt ( ich lasse eine Taste los ), dann erscheinen bei Delphi 4 gleiche nachrichten mit dem gleichen lParam Wert.
Was das nun bedeutet weiß ich nicht. Ich denk man, dass das Ereignis dann sogar 4 Mal aufgerufen wurde?!
  Mit Zitat antworten Zitat
ripper8472

Registriert seit: 17. Aug 2003
275 Beiträge
 
#10

Re: Merkwürdiges Problem mit Kbd Hook

  Alt 11. Okt 2005, 23:56
"code" kann 4 werte enthalten. scheinbar wird fuer jeden dieser die nachricht einzeln abgearbeitet.

code = HC_ACTION ist was du willst.

gibts nen grund, wieso du mit diesen ungewoehnlichen cases arbeitest? einfaches "if" wuerde viel besser passen.
Christoph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:59 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