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 1 von 5  1 23     Letzte »    
dYnAm1c

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

registerHotKey funktioniert nicht

  Alt 26. Jun 2011, 22:20
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:
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;
Private Deklaration
Delphi-Quellcode:
  private
    { Private declarations }
    id1, id2, id3, id4, id5, id6: Integer;
    procedure WMHotKey(var Msg: TWMHotKey);
    message WM_HOTKEY;
HotKey Prozedur
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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: registerHotKey funktioniert nicht

  Alt 26. Jun 2011, 22:31
Nicht umsonst lieft RegisterHotKey einen Rückgabewert zurück.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
dYnAm1c

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

AW: registerHotKey funktioniert nicht

  Alt 26. Jun 2011, 22:49
Nicht umsonst lieft RegisterHotKey einen Rückgabewert zurück.
Sry damit kann ich gerade nichts anfangen^^
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: registerHotKey funktioniert nicht

  Alt 26. Jun 2011, 22:52
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:
http://msdn.microsoft.com/en-us/library/ms646309.aspx

// 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 drüben im DF schon vermutet hattest).
Sebastian Jänicke
AppCentral

Geändert von jaenicke (26. Jun 2011 um 22:55 Uhr)
  Mit Zitat antworten Zitat
dYnAm1c

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

AW: registerHotKey funktioniert nicht

  Alt 26. Jun 2011, 22:55
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.

// 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.
Ja tut es habs mit einfachen Ordnern und einem anderen Spiel versucht.


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?

Geändert von dYnAm1c (26. Jun 2011 um 23:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: registerHotKey funktioniert nicht

  Alt 26. Jun 2011, 22:59
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:
http://www.codeguru.com/cpp/w-p/dll/...-Interface.htm
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
dYnAm1c

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

AW: registerHotKey funktioniert nicht

  Alt 26. Jun 2011, 23:15
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?

Geändert von dYnAm1c (27. Jun 2011 um 01:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: registerHotKey funktioniert nicht

  Alt 27. Jun 2011, 06:01
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?
http://www.delphipraxis.net/70391-fr...proc-hook.html
http://www.delphipraxis.net/150333-d...data-hook.html
Quelltexte für Delphi habe ich in der Richtung allerdings nicht gefunden.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
dYnAm1c

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

AW: registerHotKey funktioniert nicht

  Alt 27. Jun 2011, 16:38
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:
function InstallHook(Hwnd: THandle): Boolean; stdcall;
  external 'keyboardhook.dll';
function UninstallHook: Boolean; stdcall; external 'keyboardhook.dll';
auch wenn die DLL nicht im Verzeichniss ist startet das Programm, was es ja eigentlich gar nicht dürfte.
Also falls jemand Erfahrung in die Richtung hat bitte melden


MfG
  Mit Zitat antworten Zitat
dYnAm1c

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

AW: registerHotKey funktioniert nicht

  Alt 28. Jun 2011, 19:08
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


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:36 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