AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Tastaturhook -> Tasten manupulieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tastaturhook -> Tasten manupulieren

Ein Thema von webby · begonnen am 16. Apr 2003 · letzter Beitrag vom 20. Jun 2003
Antwort Antwort
Benutzerbild von S - tefano
S - tefano

Registriert seit: 16. Dez 2002
Ort: Dülmen
477 Beiträge
 
Delphi 2009 Professional
 
#1
  Alt 19. Jun 2003, 13:21
Hi,

danke erstmal für die Definition, habs dann mal in die ProgrammUnit eingebunden.
Aber irgendwie gehts immernoch nicht...

Diese Funktion habe ich aus einem anderen Tutorial (irgendwo bei Google gefunden) rausgenommen und so modifiziert, dass ich erstmal zum Gucken was ich da empfange, bevor ich mich an die "Abkürzungsverlängerung" mache, die gedrückten Tasten in eine Stringlist schreibe und später auf Buttonklick in ein Memo übertrage:

Delphi-Quellcode:
function hookproc(ncode: integer; wpara: wparam; lpara: lparam): longint; stdcall;
begin
  Result := 0;
  if ncode=Hc_action then
  begin
    if (Peventmsg(Lpara).message = wm_keydown) or (Peventmsg(Lpara).message = wm_syskeydown) then
    begin
      key:= Peventmsg(Lpara).paraml;
      key:= Peventmsg(lpara).paramH;
      key:= mapvirtualkey(key,0);
      universalkey(key); //gibt String für den jeweiligen key-Integer in keystr aus
      //den keystring in die Stringlist schreiben
      if keystr = '[ENTER]then list.Add(keystr) //wenn Enter gedrückt wurde, neue Zeile anfangen,
      else list[list.Count - 1]:= list[list.count - 1] + keystr; //sonst einfach anhängen
    end;
    if peventmsg(lpara).message = wm_keyup then
    begin
      key:= Peventmsg(Lpara).paraml;
      key:= mapvirtualkey(key,0);
    end;
  end;
end;
Key ist ein globaler Integer, list ist meine Stringlist die ich zuvor initialisiert habe.
Was ich an dieser Funktion schon die ganze Zeit fragwürdig finde ist, warum key drei mal hintereinander verschiedene Werte zugewiesen werden.

Als ich den Hook noch mit WH_KEYBOARD gesetzt hab, war es noch so, dass das Programm durch die zweite If-Abfrage durchkam (die wo geguckt wird, ob eine Taste oder eine Systemtaste gedrückt wurde) durchkam, dann aber die Funktion mapvirtualkey eine 0 zurückgab (weil das, was key vorher zugewiesen wurde, fast immer größer als 1000 war, aber auf jeden Fall immer größer als die ASCII- Range). Deswegen wurde auch jede Taste als Pause erkannt, weil universalkey der 0 die Taste Pause zuweist.
Mit WH_KEYBOARD_LL geht das Programm aber komplett an der zweiten if- Abfrage vorbei, es wird also durch den Tastendruck über den Hook zwar die Funktion ausgeführt, aber der Tastendruck wird dann als solcher nicht mehr erkannt.

So setze ich den Hook:

  setwindowshookex(WH_KEYBOARD_LL, hookproc, Hinstance, 0); Ist irgendwo irgendwas falsch? Oder gibts in der hookproc auch noch Teile, die so nur unter 9x funktionieren können?
Hoffe ihr könnt was finden.

Bis dann,

S - tefano
"Sir, we are surrounded!" - "Excellent, we can attack in every direction!"
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:33 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