Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   registerHotKey funktioniert nicht (https://www.delphipraxis.net/161282-registerhotkey-funktioniert-nicht.html)

jaenicke 30. Jun 2011 11:01

AW: registerHotKey funktioniert nicht
 
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.

dYnAm1c 30. Jun 2011 20:34

AW: registerHotKey funktioniert nicht
 
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;

jaenicke 30. Jun 2011 22:03

AW: registerHotKey funktioniert nicht
 
Zitat:

Zitat von dYnAm1c (Beitrag 1109336)
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... :roll:
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;

dYnAm1c 30. Jun 2011 22:12

AW: registerHotKey funktioniert nicht
 
Zitat:

Zitat von jaenicke (Beitrag 1109354)
Aber wenn du offenbar nicht in die Dokumentation schauen willst, wird das natürlich nichts... :roll:

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?

jaenicke 30. Jun 2011 22:31

AW: registerHotKey funktioniert nicht
 
Zitat:

Zitat von dYnAm1c (Beitrag 1109355)
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...

Zitat:

Zitat von dYnAm1c (Beitrag 1109355)
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.

dYnAm1c 30. Jun 2011 22:46

AW: registerHotKey funktioniert nicht
 
Vielen Dank und endlich klappt alles!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.
Seite 5 von 5   « Erste     345   

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