Problem mit Hotkey-Schalter
-
Salute, ich habe folgendes Programm bisher:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "MausSim.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" using namespace std; bool active = false; TForm2 *Form2; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm2::setKey(TObject *Sender) { HotKeyIdentifier_uint = GlobalAddAtom("Hotkey"); HotKeyModifier_uint = 0; RegisterHotKey(Handle, HotKeyIdentifier_uint, HotKeyModifier_uint, 78); //Hotkey (N) registrieren. } //--------------------------------------------------------------------------- void __fastcall TForm2::deleteKey(TObject *Sender) { UnregisterHotKey(Handle, HotKeyIdentifier_uint); //HotKey löschen GlobalDeleteAtom(HotKeyIdentifier_uint); //HotKey Identifier löschen } //--------------------------------------------------------------------------- void __fastcall TForm2::WMHotKey(TMessage &Msg) { TForm::Dispatch(&Msg); if(active==true) { mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); active = false; } else { mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); active = true; } } //--------------------------------------------------------------------------- void __fastcall TForm2::closeProg(TObject *Sender) { Close(); } //---------------------------------------------------------------------------
Nun möchte ich einen Schalter einbauen, mit dem man den Hotkey sozusagen "scharf" schalten kann.
Also dass erst der eine Hotkey benutzt werden muss bevor ich den eigentlichen Hotkey benutzen kann.
Kleines Beispiel:
Ich definiere als Schalter die Taste H und als eigentlichen Hotkey die Taste N.
Wenn ich nun N drücke ohne vorher H gedrückt zu haben passiert nix.
Wenn ich nun H drücke und dann N, passiert das, was ich im Code angegeben habe.
Drücke ich nun wieder irgendwann H, wird der aktuelle Modus beibehalten (Maustaste down oder up) aber der Hotkey wird wieder "entschäft".Wie kann ich das am einfachsten bewerkstelligen?
Neue MessageMap oder irgendwie gedrückte Taste abfragen...?
Bin für alles offen
-
dazu musst du noch einen zweiten Hotkey anlegen und den anderen beim Druck auf den ersten anlegen
TForm::Dispatch(&Msg); if(Msg.WParam == HotKeyIdentifier_uint1) //Hotkey zum aktivieren { RegisterHotKey(Handle, HotKeyIdentifier_uint2, HotKeyModifier_uint, 78); //Hotkey (N) registrieren. } else if(Msg.WParam == HotKeyIdentifier_uint2)//Hotkey (N) { if(active) { mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); active = false; } else { mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); active = true; } }
greetz KN4CK3R
-
supi, danke dir