RegisterHotKey neu definieren?
-
Hi,
ich habe einen HotKey, den ich gerne registrieren möchte.
Der ist aber bereits vergeben.
Jetzt möchte ich den "un-registrieren", geht aber nicht, weil ich das Atom nicht habe.
Ist das möglich, z.B. WIN+F zu überschreiben?Danke.
Hier ist mein Code:if (!RegisterHotKey(NULL, kombiAtom, theApp.GetAsSystemTaste(m_strMetaTaste), m_strTaste.GetAt(0))) { CString fehler; DWORD dw = theApp.GetLastErrorCode(fehler); // Hot key is already registered. if (dw == ERROR_HOTKEY_ALREADY_REGISTERED) { if (MessageBox(fehler+"Soll die Registrierung überschrieben werden?", "Fehler", MB_ICONQUESTION|MB_YESNO) == IDYES) { theApp.ResetErrors(); if (!UnregisterHotKey(NULL, kombiAtom)) { MessageBox(theApp.GetLastError(), "Fehler", MB_ICONINFORMATION); } else { // dann nochmal probieren... theApp.ResetErrors(); if (!RegisterHotKey(NULL, kombiAtom, theApp.GetAsSystemTaste(m_strMetaTaste), m_strTaste.GetAt(0))) { MessageBox(theApp.GetLastError(), "Fehler", MB_ICONINFORMATION); } } } } else { MessageBox(fehler, "Fehler", MB_ICONINFORMATION); }Also eigentlich geht es um die Zeile:
if (!UnregisterHotKey(NULL, kombiAtom))
-
The UnregisterHotKey function frees a hot key previously registered by the calling thread.
Evtl. müsstest du dich zuvor mit AttachThreadInput mit dem Thread verknüpfen, der den Hotkey zuvor reserviert hat

-
Wie wäre es mit eine systemweiten Hook??
-
@flenders:
Aber woher soll ich denn wissen, wer den HotKey reserviert hat?@HOOK:
Nee, das möchte ich eigentlich vermeiden.
Es klappt ja eigentlich alles.
Nur für bereits belegte HotKeys geht's net.
Müsste eigentlich nur an den Identifier für den HotKey rankommen.
Gibt es da nicht eine Möglichkeit über GlobalFindAtom oder über die AtomTable etc.?Ich weiss zwar, dass ich mir darüber einen Identifier für den HotKey besorgen kann, aber nicht wie ich darin nach registrierten HotKeys (bzw. nach den Tastenkombinationen) suchen...
Oder gibt es alternativ vielleicht noch irgendeine Information, die ich per GetLastError() rausbekommen kann? Bisher hole ich "nur" den ErrorCode und den ErrorText raus. Vielleicht gibt es noch mehr Informationen...
Wisst Ihr was dazu?
Danke schonmal!!
Gruß
Timo