![]() |
registerHotKey funktioniert nicht
Hi,
ich hab im moment ein Problem mit der Funktion "registerHotKey". Ich habe in meinem Programm ein paar Numpad Tasten als HotKeys registriert, die funktionieren komischweise auch überall, nur irgendwie nicht da wo sie sollten, denn das Programm ist eine Hilfe für ein Spiel. Durch druck auf eine HotKey soll eigentlich ein Timer gestartet werden, das klappt in jedem anderen Spiel nur nicht in dem wo es sollte (es handelt sich hierbei um League of Legends). Die HotKeys scheinen einfach nicht in meinem Programm anzukommen wenn das Spiel im Vordergrund ist, sobald ich aber wieder mein Programm in den Vordergrund rücke gehen die Tasten wieder. Wie gesagt in jedem anderen Spiel funktioniert es. Gibt es vielleicht eine andere Methode, hab z.B. von GetAsyncKeyState gehört? Hier ein paar Code Ausschnitte: FormCreate
Delphi-Quellcode:
Private Deklaration
procedure TForm1.FormCreate(Sender: TObject);
begin // HotKey Own Blue Buff id1 := GlobalAddAtom('Hotkey1'); RegisterHotKey(Handle, id1, 0, VK_NUMPAD7); // HotKey Own Red Buff id2 := GlobalAddAtom('Hotkey2'); RegisterHotKey(Handle, id2, 0, VK_NUMPAD8); // HotKey Enemy Blue Buff id3 := GlobalAddAtom('Hotkey3'); RegisterHotKey(Handle, id3, 0, VK_NUMPAD4); // HotKey Enemy Red Buff id4 := GlobalAddAtom('Hotkey4'); RegisterHotKey(Handle, id4, 0, VK_NUMPAD5); // HotKey Enemy Red Buff id5 := GlobalAddAtom('Hotkey5'); RegisterHotKey(Handle, id5, 0, VK_NUMPAD1); // HotKey Enemy Red Buff id6 := GlobalAddAtom('Hotkey6'); RegisterHotKey(Handle, id6, 0, VK_NUMPAD2); end;
Delphi-Quellcode:
HotKey Prozedur
private
{ Private declarations } id1, id2, id3, id4, id5, id6: Integer; procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
Delphi-Quellcode:
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin if (Msg.HotKey = id1) then Button1.Click; if (Msg.HotKey = id2) then Button2.Click; if (Msg.HotKey = id3) then Button3.Click; if (Msg.HotKey = id4) then Button4.Click; if (Msg.HotKey = id5) then Button5.Click; if (Msg.HotKey = id6) then Button6.Click; end; |
AW: registerHotKey funktioniert nicht
Nicht umsonst lieft RegisterHotKey einen Rückgabewert zurück. ;)
|
AW: registerHotKey funktioniert nicht
Zitat:
|
AW: registerHotKey funktioniert nicht
Wieso? Weißt du nicht was ein Rückgabewert ist oder wo liegt das Problem?
Mehr zum Rückgabewert und ggf. zur Fehlerauswertung findest du jedenfalls in der Dokumentation zu RegisterHotkey: ![]() // EDIT: Funktioniert es denn bei anderen Programmen im Vordergrund? Dann liegt es vermutlich einfach daran, dass das Programm DirectInput verwendet. Da funktioniert das nicht so einfach, da braucht man vermutlich einen DirectX Hook (wie du ja selbst ![]() |
AW: registerHotKey funktioniert nicht
Also bei registerHotKey weiß ich soviel das wenn die Prozedur erfolgreich ist der Rückgabewert nicht 0 ist und wen sie nicht erfolgreich ist, ist sie 0. Aber in wieweit hilft mir das bei meinem Problem weiter? Sry ich steh gerade ein bisschen auf dem Schlauch versuche schon ziemlich lange das Problem zu lösen.
Zitat:
Edit: Ich hab bisher woanders immer nur Keyboard Hook gehört, wo ist der Unterschied zu DX Hook und gibts da möglicherweise Code Snippets oder Tuts? |
AW: registerHotKey funktioniert nicht
Dann funktioniert RegisterHotkey an sich. Dann wirst du damit aber in deinem Fall nicht weiterkommen.
Du könntest es mit einem normalen Keyboard Hook mit SetWindowsHookEx versuchen. Aber ich vermute das geht auch nicht. Dann bleibt nur noch der DirectX Hook. Wie das geht, steht hier: ![]() |
AW: registerHotKey funktioniert nicht
Das ist für jemanden der noch nicht alzu lang dabei ist leider nur schwer verständlich, gibts
noch eine einfachere Methode oder eventuell sogar jemanden der so einen Hook schon geschrieben hat bzw. eine Source? Edit: Zudem wird in deinem Link glaube ich mit C++ gearbeitet? |
AW: registerHotKey funktioniert nicht
Dass da mit C++ gearbeitet wird, ist üblich. ;-)
Die Aufrufe sind allerdings die selben wie dann auch in Delphi, da das Windows API verwendet wird. Dass es einfach ist, würde ich auch nicht behaupten. Auch für mich nicht. ;-) Leider habe ich auch nicht die Zeit es mir genauer anzuschauen. Ja, es haben sich hier im Forum schon andere damit beschäftigt, wie du sicher schon über die Suche gefunden hattest, oder? ![]() ![]() Quelltexte für Delphi habe ich in der Richtung allerdings nicht gefunden. |
AW: registerHotKey funktioniert nicht
Da ich noch relativ nah am Anfang bin ist es für mich fast unmöglich einen Code von C++ auf Delphi zu
übertragen, auch wenn es die selbe API ist. Ich wollte das ganze aber vielleicht auch erst noch einmal mit SetWindowsHookEx versuchen um zu schauen obs wirklich nicht klappt, allerdings komm ich da auch nicht ganz zum Ende. Ich hab auch einige Sachen diesbezüglich gefunden, auch z.B. ein komplettes Tutorial dazu, wo sich bei mir allerdings der Fehler auftut das mein Programm die DLL anscheind überhaupt nicht versucht zu laden trotz den Funktionen (welche statisch ist):
Delphi-Quellcode:
auch wenn die DLL nicht im Verzeichniss ist startet das Programm, was es ja eigentlich gar nicht dürfte.
function InstallHook(Hwnd: THandle): Boolean; stdcall;
external 'keyboardhook.dll'; function UninstallHook: Boolean; stdcall; external 'keyboardhook.dll'; Also falls jemand Erfahrung in die Richtung hat bitte melden :) MfG |
AW: registerHotKey funktioniert nicht
Sry für diesen Doppelpost aber durch editieren hätte das wascheinlich nie jemand bemerkt^^
Ich habe jetzt nach Tutorials von Assarbad einen Keyboard Hook gebaut, jetzt habe ich nurnoch ein Problem. Ich würde gerne aus der DLL aus meine Buttons auf der Form ansteuern wenn ein HotKey betätigt wird. Hier wie ich es versuche aber es nicht geht:
Delphi-Quellcode:
library KeyboardHook;
uses Windows, Dialogs, Main, Messages; var HookHandle: Cardinal = 0; WindowHandle: Cardinal = 0; function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); case nCode < 0 of TRUE: Exit; FALSE: if (wParam = VK_NUMPAD7) then Main.Form1.Button1.Click; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 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