Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi HotKey-Registrierung (https://www.delphipraxis.net/20701-hotkey-registrierung.html)

devnull 21. Apr 2004 21:02


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:
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;
Wie kann ich denn jetzt den HotKey wieder entfernen? :gruebel:
Kann mir da jemand helfen ?

mfg
devnull

Christian Seehase 21. Apr 2004 21:12

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.

devnull 21. Apr 2004 21:15

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 ?!

Christian Seehase 21. Apr 2004 21:27

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:
ListBox1.Lines.AddObject(ShortCutToText (Hotkey1.HotKey),TObject(sc_ct));
Mit IndexOf kannst Du dann die jeweilige Zeile finden, und aus der Eigenschaft Objects die ID auslesen, die zu dem Key gehört.
z.B. so:

Delphi-Quellcode:
var
  iIndex : integer;

begin
  iIndex := ListBox1.Lines.IndexOf('STRG-A');
  if iIndex = -1 then exit;
  UnRegisterHotkey(Handle,integer(ListBox1.Items.Objects[iIndex]));
end;
Mit Memo bzw. Richedit Lines funktioniert das leider nicht, da hier bei AddObject nichts zusätzlich gespeichert wird.


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