mit THotKey globale Hooks vergeben
-
Hi!
Ich hab mir nen Systemweiten HotKey gemacht. ==>http://www.c-plusplus.net/forum/viewtopic.php?t=39144
Jetzt hab ich mir das Eingabefeld für Hotkeys genommen (THotKey) und möchte aber nicht nur einzelne Tasten nehmen, sondern auch z.B. ein Alt davor stehen haben.
RegisterHotKey( Handle, HotKeyIdentifier_uint, HotKeyModifier_uint, HotKey->HotKey //Hier werden einzelne Buchstaben übergeben );Kann mir jemand Helfen?
Und wie kann ich den Wert in einer ini-Datei speichern, wieder auslesen und dann wieder ins HotKey-Feld reinschreiben?
Andere Werte von dem Prog kann ich ja einfach als Text speichern.
-
Hab mir jetzt für die Alt- und Strg-Tasten einfach ne checkbox genommen. Aber ich kriegs noch nicht hin den Wert aus der ini-Datei wieder in die HotKey-Box reinzuschreiben. In der ini-Datei steht irgendeine Zahl. Bei nem A ist es die 65. Wie kann ich das zurückschreiben?
zur zeit sieht's so aus:DWORD groesse_sc; groesse_sc=5; char key[5]; GetPrivateProfileString("shortcut","key","50",ref_time,groesse_ref,ini_path.c_str()); HotKey->HotKey=(int) key;
-
Du hast ja gar nicht die Variable 'key' verwendet und einen String kannst du nicht einfach in eine Zahl per Cast umwandeln.
So wäre es schon richtiger:GetPrivateProfileString("shortcut","key","50",key,&groesse_sc,ini_path.c_str()); HotKey->HotKey=StrToInt(key);Aber viel eleganter geht es mit der Klasse TIniFile...
-
THX, hab ich wohl übersehen, war ja auch schon spät^^
So gehts
THX
-
Ich möchte jetzt 2 Hotkeys vergeben. Dazu habe ich dieses Hier erneut verwendet, jedoch mit anderen Variablennamen:
Exit_HotKeyIdentifier_uint = GlobalAddAtom("Exit-Hotkey"); Exit_HotKeyModifier_uint = MOD_ALT; RegisterHotKey(Handle, Exit_HotKeyIdentifier_uint, Exit_HotKeyModifier_uint, 89 /* ist "Y" */); UnregisterHotKey(Handle, Exit_HotKeyIdentifier_uint); GlobalDeleteAtom(Exit_HotKeyIdentifier_uint);Jetzt möchte ich in
void __fastcall TForm1::WMHotKey(TMessage &Msg) { TForm::Dispatch(&Msg); }Abfragen, welche Tasten nun gedrückt wurden, die vom ersten Hotkey, oder die vom zweiten. Oder kann man alle Tastendrücke dadrin überprüfen?? Dazu müsste man aus Msg die Modifiers und die andere gedrückte Taste auslesen. Aber wie? Ich hab das schon mit GetKeyNameText versucht, kriegs aber nicht hin.

Noch ne Frage: Was tut TForm::Dispatch?
-
hmm..., ich hätt' schon gern ne Antwort^^
-
Schau einfach mal in die Windows SDK-Hilfe (oder alternativ in der MSDN) zum Stichwort "WM_HOTKEY".
Dort sind die Parameter der Message erklärt, welche du dann nur noch abfragen müßtest.Und TObject::Dispatch() leitet einfach die Botschaft (Message) an den Vorgänger des Objekts solange weiter, bis jemand die Botschaft verarbeitet, d.h. wenn du selbst die Botschaft abarbeitest, dann brauchst du Dispatch nicht aufrufen.
-
Also die Taste krieg ich raus, aber nicht, ob noch z.B. alt oder Strg dazu gedrückt wurde. Kann mir jemand helfen?
-
// Doppel-Post
-
modifiers = (UINT)LOWORD(lParam); if(modifiers & MOD_ALT) // alt. MOD_CONTROL, MOD_SHIFT oder MOD_WIN { }
-
thx
//Wo ist das Problem mit "Doppel-Posts"??
-
Meinen Eintrag hatte er aus Versehen doppelt eingetragen, so daß ich den zweiten gelöscht habe. Hatte nichts mit dir zu tun -)