AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

registerHotKey funktioniert nicht

Ein Thema von dYnAm1c · begonnen am 26. Jun 2011 · letzter Beitrag vom 30. Jun 2011
Antwort Antwort
Seite 5 von 5   « Erste     345   
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#41

AW: registerHotKey funktioniert nicht

  Alt 30. Jun 2011, 12:01
Ich hatte doch geschrieben wo das Problem liegt. Deine Hookprozedur ist falsch. Der Tastaturcode wird dort gar nicht direkt übergeben...
Zitat:
wParam [in]
Type: WPARAM

The identifier of the keyboard message. This parameter can be one of the following messages: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP.

lParam [in]
Type: LPARAM

A pointer to a KBDLLHOOKSTRUCT structure.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
dYnAm1c

Registriert seit: 26. Jun 2011
23 Beiträge
 
#42

AW: registerHotKey funktioniert nicht

  Alt 30. Jun 2011, 21:34
Also ich habe jetzt zumindest einen Teilerfolg,
im moment sieht es so aus, dass egal welche Taste ich drücke, der Button gedrückt wird. Aber das klappt jetzt zumindest schonmal Systemweit, was z.B. mit registerHotKey ja gar nicht im Spiel funktioniert hat.
Jetzt sieht der Code so aus:

Delphi-Quellcode:
function LowLevelKeyboardProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
  case nCode < 0 of
  True:
      exit;

  False:
      if (PostMessage(wParam, WM_KEYDOWN, VK_NUMPAD7, 0)) then
       Form1.Button1.Click;

  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#43

AW: registerHotKey funktioniert nicht

  Alt 30. Jun 2011, 23:03
Delphi-Quellcode:
  False:
      if (PostMessage(wParam, WM_KEYDOWN, VK_NUMPAD7, 0)) then
       Form1.Button1.Click;
Du willst also an wParam die Message WM_KEYDOWN schicken? Und machst davon, ob das ging abhängig, ob du Click ausführst?
Sorry, aber überlegst du eigentlich was du da tust?

Aber wenn du offenbar nicht in die Dokumentation schauen willst, wird das natürlich nichts...
Dabei ist es so einfach:
Delphi-Quellcode:
type
  tagKBDLLHOOKSTRUCT = record
    vkCode: DWORD;
    scanCode: DWORD;
    flags: DWORD;
    time: DWORD;
    dwExtraInfo: DWORD;
  end;
  TKbdDLLHookStruct = tagKBDLLHOOKSTRUCT;
  PKbdDLLHookStruct = ^TKbdDLLHookStruct;

...

function KeyboardHookProc(nCode: Integer; wParam: wParam; lParam: lParam): LRESULT; stdcall;
begin
  if (nCode >= 0) and (wParam = WM_KEYDOWN) and (PKbdDLLHookStruct(lParam)^.vkCode = VK_NUMPAD7) then
    ShowMessage('Test');
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
end;
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
dYnAm1c

Registriert seit: 26. Jun 2011
23 Beiträge
 
#44

AW: registerHotKey funktioniert nicht

  Alt 30. Jun 2011, 23:12
Aber wenn du offenbar nicht in die Dokumentation schauen willst, wird das natürlich nichts...
Wirklich, ich hab mir alles in der MSDN angeschaut und ich verbeuge mich davor das du sagst das ist total einfach, ich wär auf den Code nicht in Monaten gekommen glaube ich.

Ich hätte da noch eine Frage, was genau tut dieser Abschnitt?
Delphi-Quellcode:

  TKbdDLLHookStruct = tagKBDLLHOOKSTRUCT;
  PKbdDLLHookStruct = ^TKbdDLLHookStruct;
Das "^" Zeichen hab ich in Delphi so noch nie gesehen?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#45

AW: registerHotKey funktioniert nicht

  Alt 30. Jun 2011, 23:31
Wirklich, ich hab mir alles in der MSDN angeschaut und ich verbeuge mich davor das du sagst das ist total einfach, ich wär auf den Code nicht in Monaten gekommen glaube ich.
Das ist nur die Übersetzung der Definition in C++ in der Doku, die unter wParam ja verlinkt ist:
http://msdn.microsoft.com/en-us/library/ms644967.aspx

Wenn du die nicht verstanden hast, hättest du das ja schreiben können. So konnte ich ja nicht wissen, dass du damit nicht klar kommst. Nur vermuten...

Ich hätte da noch eine Frage, was genau tut dieser Abschnitt?
Delphi-Quellcode:

  TKbdDLLHookStruct = tagKBDLLHOOKSTRUCT;
  PKbdDLLHookStruct = ^TKbdDLLHookStruct;
Das "^" Zeichen hab ich in Delphi so noch nie gesehen?
Damit wird PKbdDLLHookStruct als Pointer auf TKbdDLLHookStruct deklariert. Das heißt eine solche Variable zeigt auf eine TKbdDLLHookStruct Struktur.

Diese Deklaration ist so üblich:
tagKBDLLHOOKSTRUCT ist der Originalname aus der API, TKbdDLLHookStruct der Name mit Delphischreibweise und PKbdDLLHookStruct der Pointer darauf.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
dYnAm1c

Registriert seit: 26. Jun 2011
23 Beiträge
 
#46

AW: registerHotKey funktioniert nicht

  Alt 30. Jun 2011, 23:46
Vielen Dank und endlich klappt alles!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   


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 03:10 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