![]() |
HotKey-Registrierung
Hi,
ich möchte mit einem Programm mit ShortCuts andere Programme usw. öffnen. Also habe ich zu Testzwcken Code aus DP benutzt. Das Erstellen eines ShortCuts funktioniert auch einwandfrei; sobald ich aber den HotKey wieder entfernen will (siehe unten, 'UNREGISTER') funktioniert das nicht alles.
Delphi-Quellcode:
function ConvertPascalShortCut(const p_scIN : TShortCut) : TcsWinHotKey;
const _iModifier : array [0..7] of integer = ( 0, MOD_SHIFT, MOD_CONTROL, MOD_SHIFT or MOD_CONTROL, MOD_ALT, MOD_SHIFT or MOD_ALT, MOD_CONTROL or MOD_ALT, MOD_SHIFT or MOD_CONTROL or MOD_ALT ); begin Result.dwModifier := p_scIN; // Die für Modifier entscheidenden Stellen herausfiltern Result.dwModifier := Result.dwModifier and $0000FF00; // an die richtige Stelle schieben Result.dwModifier := Result.dwModifier shr 13; // und den richtigen Modifier aus der Tabelle holen Result.dwModifier := _iModifier[Result.dwModifier]; // Virtual Key herausfiltern Result.dwVK := p_scIN and $000000FF; end; procedure create_hotkey; var whkWork : TcsWinHotKey; begin whkWork := ConvertPascalShortCut(Hotkey1.HotKey); RegisterHotKey(Handle, sc_ct, whkWork.dwModifier,whkWork.dwVK); Memo1.Lines.Add(programm_link); // Speichert Programm_link in Memo Memo1.Lines.Add(ShortCutToText (Hotkey1.HotKey)); // Speichert HotKey in Memo end;
Delphi-Quellcode:
Wie kann ich denn jetzt den HotKey wieder entfernen? :gruebel:
procedure unregister;
var s2 : string; begin // Die registrierten HotKeys (z.Bsp: STRG-A) sind ja in dem Memo gespeichert // s2 definiert fragliches das HotKey s2 := Memo1.Lines[..]; UnRegisterHotKey(FShortCut.Handle, TextToShortCut (s2)); end; Kann mir da jemand helfen ? mfg devnull |
Re: HotKey-Registrierung
Moin devnull,
bei UnRegisterHotkey werden das Handle auf das Fenster für den der Hotkey registriert wurde, und die ID des Hotkeys übergeben. Um also einen einmal Registrierten Hotkey wieder zu entfernen brauchst Du nur die ersten beiden Parameter, die Du bei RegisterHotkey verwendet hast (in Deinem Source Handle und sc_ct). Die Daten aus dem Memo helfen Dir da nicht. |
Re: HotKey-Registrierung
Aso, stimmt.
sc_ct ist ja sowas wie ne ID (integer) für den Hotkey. Da ich ja mehrere HotKeys mit dem Prog registrieren möchte, hol ich mir den fraglichen HotKey aus dem Memo und suche mir dann die sc_ct-ID ?! |
Re: HotKey-Registrierung
Moin devnull,
wenn die Möglichkeit besteht das Memo durch eine Listbox zu ersetzen, könntest Du die Zeilen mit den Hotkeys mittels AddObject hinzufügen, wobei als "Objekt" die ID des Keys gespeichert wird.
Delphi-Quellcode:
Mit IndexOf kannst Du dann die jeweilige Zeile finden, und aus der Eigenschaft Objects die ID auslesen, die zu dem Key gehört.
ListBox1.Lines.AddObject(ShortCutToText (Hotkey1.HotKey),TObject(sc_ct));
z.B. so:
Delphi-Quellcode:
Mit Memo bzw. Richedit Lines funktioniert das leider nicht, da hier bei AddObject nichts zusätzlich gespeichert wird.
var
iIndex : integer; begin iIndex := ListBox1.Lines.IndexOf('STRG-A'); if iIndex = -1 then exit; UnRegisterHotkey(Handle,integer(ListBox1.Items.Objects[iIndex])); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 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