Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi HotKey Experimente... (https://www.delphipraxis.net/55050-hotkey-experimente.html)

glkgereon 15. Okt 2005 20:40


HotKey Experimente...
 
Hi

ich spiele im Moment etwas mit Hotkeys rum...

ich möchte drei Systemweite Hotkeys anlegen und auf diese Reagieren.

folgender Code basiert auf einem Code aus dem DF.
Die Hotkeys werden in einer Ini gespeichert
Um die HotKeys zu setzen nutze ich THotKey
Delphi-Quellcode:
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;

[.....]

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey=HKA_Reset then MI_ClpResetClick(Self)
  else if Msg.HotKey=HKA_Code then MI_ClpCodeClick(Self)
  else if Msg.HotKey=HKA_Decode then MI_ClpDecodeClick(Self);
end;

procedure TForm1.CreateHotKeys;
begin
  HKA_Reset:=GlobalAddAtom('ResetClp');
  HKA_Code:=GlobalAddAtom('CodeClp');
  HKA_Decode:=GlobalAddAtom('DecodeClp');
  RegisterHotKey(0,HKA_Reset,0,HKVK_Reset);
  RegisterHotKey(0,HKA_Code,0,HKVK_Code);
  RegisterHotKey(0,HKA_DeCode,0,HKVK_DeCode);
end;

procedure TForm1.DestroyHotKeys;
begin
  UnRegisterHotKey(0,HKA_Reset);
  GlobalDeleteAtom(HKA_Reset);
  UnRegisterHotKey(0,HKA_Code);
  GlobalDeleteAtom(HKA_Code);
  UnRegisterHotKey(0,HKA_DeCode);
  GlobalDeleteAtom(HKA_DeCode);
end;

procedure TForm1.LoadFromIni;
begin
  HKVK_Reset:=Ini.ReadInteger('HotKeys','ResetVK',0);
  HKVK_Code:=Ini.ReadInteger('HotKeys','CodeVK',0);
  HKVK_Decode:=Ini.ReadInteger('HotKeys','DecodeVK',0);
  EdtHK_Reset.HotKey:=HKVK_Reset;
  EdtHK_Code.HotKey:=HKVK_Code;
  EdtHK_Decode.HotKey:=HKVK_Decode;
end;

procedure TForm1.SaveToIni;
begin
  Ini.WriteInteger('HotKeys','ResetVK',HKVK_Reset);
  Ini.WriteInteger('HotKeys','CodeVK',HKVK_Code);
  Ini.WriteInteger('HotKeys','DecodeVK',HKVK_Decode);
  Ini.WriteInteger('HotKeys','DecodeVK',HKVK_Decode);
end;
Die Werte kommen auch ordnungsgemäß in der Ini-Datei an und werden wieder geladen, aber es passiert nichts :(
ist da irgendein grober Fehler drin?

Rastaman 15. Okt 2005 20:53

Re: HotKey Experimente...
 
Ich weiß ja nich aber mit diesen Atomen da würd ich nich durchsteigen :mrgreen:

Der erste Parameter von RegisterHotKey muss Form1.Handle sein, weil das das Fenster ist, dass die WM_HOTKEY Nachricht bekommt :zwinker:

CalganX 15. Okt 2005 21:31

Re: HotKey Experimente...
 
Hi,
Zitat:

Zitat von Gerrit89
Ich weiß ja nich aber mit diesen Atomen da würd ich nich durchsteigen :mrgreen:

die sind Nichts weiter, als eine systemweit eindeutige Zahl.

Wie Gerrit sagt, musst du schon das Handle des Formulars angeben, sonst landen die WM_HOTKEY-Nachrichten ja irgendwo im Nirvana. ;)
Außerdem musst du afaik Msg.WParam überprüfen. Oops... ich sehe gerade, dass du TWMHotKey verwendest. Da bin ich mir nicht ganz sicher, aber ich schätze es wird am Handle liegen ;)

Chris

glkgereon 15. Okt 2005 21:39

Re: HotKey Experimente...
 
Zitat:

Zitat von Chakotay1308
Hi,
Zitat:

Zitat von Gerrit89
Ich weiß ja nich aber mit diesen Atomen da würd ich nich durchsteigen :mrgreen:

die sind Nichts weiter, als eine systemweit eindeutige Zahl.

Wie Gerrit sagt, musst du schon das Handle des Formulars angeben, sonst landen die WM_HOTKEY-Nachrichten ja irgendwo im Nirvana. ;)
Außerdem musst du afaik Msg.WParam überprüfen. Oops... ich sehe gerade, dass du TWMHotKey verwendest. Da bin ich mir nicht ganz sicher, aber ich schätze es wird am Handle liegen ;)

Chris

Ja gut, ok

da war ich mir sowieso nicht so ganz sicher, weil im DF stannt da Handle...und ich wusste nicht so richtig was da rein sollte...also erstmal 0 :)

dagegen das was ich da überprüfen soll ich unverändert und steht da so :)

danke euch beiden!!!

glkgereon 15. Okt 2005 21:40

Re: HotKey Experimente...
 
Nein, tut mir leid, hilft nix :?

Zitat:

Oops... ich sehe gerade, dass du TWMHotKey verwendest
gibt es ne alternative, zu der du ein funktionierendes Beispiel hast?

CalganX 15. Okt 2005 21:48

Re: HotKey Experimente...
 
Hi,
naja... indirekt habe ich eine Alternative. Ich habe es ein wenig anders gemacht, da mein Projekt ziemlich objekt-orientiert ist. D.h. mein Hotkey hat eine eigene Klasse spendiert bekommen. Aber ich kann mal skizzieren, wie das bei mir aussieht.

Delphi-Quellcode:
// Im Konstruktur der Klasse wird ein Handle für die Klasse erzeugt und eine Nachrichten-Methode deklariert. Das sieht so aus:
fHandle := Classes.AllocateHWnd(self.MsgProc);
// Wobei fHandle das Feld für das Handle ist und MsgProc die Methode für die Nachrichten ist.
// MsgProc sieht so aus:
procedure THotkeyItem.MsgProc(var msg: TMessage);
begin
  // Nachrichtenschleifen
  if msg.Msg = WM_HOTKEY then
    if Assigned(FOnHotkey) then
      fOnHotKey(self, self.Name)
  else
    DefWindowProc(FHandle, msg.Msg, msg.WParam, msg.LParam);
end;
// fOnHotKey ist hier nur eine beliebige Methode. Dort kannst du hinschreiben was du willst und was du gerade brauchst
Ansonsten ist meine Klasse ähnlich zu dem, was du da "fabriziert" (:mrgreen:) hast. Wenn aber das jetzt auch nicht klappt oder du das nicht verstehst mit der Klasse, dann kann ich auch die ganze Klasse posten.

Chris

PS: Obiger Code ist erfolgreich in meinem Hier im Forum suchenWallpaperChanger im Einsatz. ;)

glkgereon 10. Nov 2005 16:10

Re: HotKey Experimente...
 
Ich hab noch ne Frage zum Thema hotkeys...

kann ich Hotkeys reservieren die einen Teil statisch und einen Teil beliebig haben?

also zum Beispiel

Strg + Alt + Zahlentaste

Christian Seehase 11. Nov 2005 09:01

Re: HotKey Experimente...
 
Moin Gereon,

Du musst jede gewünschte Tastenkombination einzeln registrieren.

glkgereon 11. Nov 2005 09:11

Re: HotKey Experimente...
 
Zitat:

Zitat von Christian Seehase
Moin Gereon,

Du musst jede gewünschte Tastenkombination einzeln registrieren.

Argh ^^

naja, muss wohl :)

Robert Marquardt 11. Nov 2005 09:17

Re: HotKey Experimente...
 
Application.Handle duerfte am besten funktionieren. Das ist das eigentliche Hauptfenster der Applikation.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz