![]() |
Re: Globaler HotKey/Shortcut - SysHotKey.pas
ne ich wuerd sagen so:
Delphi-Quellcode:
aber mal ne gegenfrage: wann drueckst du shift+alt? aber zu dem beispiel hab ich leider keine ahnung ... :> tut mir sry
WindowProc:=MyWindowProc;
Hotkeys[0].Key:=Lo(x); // Ascii Code von Alt Hotkeys[0].Modify:=0; inc(Hotkeys[0].Modify,MOD_Shift); // Ob Shift , Alt, STRG gedrueckt sein soll |
Re: Globaler HotKey/Shortcut - SysHotKey.pas
Ich möchte zum Beispiel "Shift+Alt+L" als HotKey benutzen :stupid:
|
Re: Globaler HotKey/Shortcut - SysHotKey.pas
uh, das is schwer und entzieht sich meiner kenntnis. ... sry, entweder du probierst es aus, so wie dus gemint hast ( MOD_CHIFT + MOD_ALT) ... oder ... ka...
warum wilslt du so einen schweren hotkey benutzen ? |
Re: Globaler HotKey/Shortcut - SysHotKey.pas
Na ja, ich will meinem User eine große Vielfalt bieten :-)
|
Re: Globaler HotKey/Shortcut - SysHotKey.pas
Ja, hm, das Problem ist, dass ich nicht jedem HotKey eine eigene Prozedur zum Ausführen mitgeben kann. Es wäre schön, wenn ich 'ne Variable übergeben könnte :oops:
|
Re: Globaler HotKey/Shortcut - SysHotKey.pas
Hallo,
interessiert hab ich das hier verfolgt, aber irgendwie krieg ich das nicht ans Laufen. Ich hab hier mal den gesamten Code nochmals zusammengefasst:
Delphi-Quellcode:
Der Teil in MyWindowProc
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type HkI=Record Key:tShortcut; Modify:Cardinal; Interval:Word; Notify:String; end ; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } procedure MyWindowProc(var Message:TMessage); public { Public-Deklarationen } end; var Form1: TForm1; HotKeys:array[0..2]of HKI; implementation {$R *.dfm} { TForm1 } procedure TForm1.MyWindowProc(var Message: TMessage); var notify:string; begin notify:=''; if Message.Msg=WM_Hotkey Then begin SetTimer(Self.Handle,Message.WParam,Hotkeys[Message.WParam-$BFF0].Interval*1000,nil); SendMessage(GetActiveWindow,WM_KEYDOWN,Hotkeys[Message.WParam-$BFF0].Modify,Hotkeys[Message.WParam-$BFF0].Key); SendMessage(GetActiveWindow,WM_KEYUP,Hotkeys[Message.WParam-$BFF0].Modify,Hotkeys[Message.WParam-$BFF0].Key); notify:=''; end else if Message.Msg=WM_TIMER Then Begin if HotKeys[Message.WParam-$BFF0].Notify<>'' Then begin notify:=''; notify:=HotKeys[Message.WParam-$BFF0].Notify; end; KillTimer(Self.Handle,Message.WParam); end else WndProc(Message); if sametext(notify,'bla') then Showmessage('Taste gedrückt'); notify:=''; end; procedure TForm1.FormCreate(Sender: TObject); begin WindowProc:=MyWindowProc; Hotkeys[0].Key:=Lo(97); // Ascii Code der zu drueckenden taste, bsp 'a' Hotkeys[0].Modify:=0; inc(Hotkeys[0].Modify,MOD_CONTROL); // Ob Shift , Alt, STRG gedrueckt sein soll Hotkeys[0].Notify:='bla'; // die msg, die beim tastendruck uebergeben wird RegisterHotKey(Self.Handle,$BFF0+0,Hotkeys[0].Modify,Hotkeys[0].Key); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnregisterHotKey(Self.Handle,$BFF0+0); end; end.
Delphi-Quellcode:
wird nie ausgeführt?
if Message.Msg = WM_HotKey then begin
Hab ich da was vergessen :wiejetzt: |
Re: Globaler HotKey/Shortcut - SysHotKey.pas
OK, jetzt klappts. Ich hatte als Ascii Code 97 definiert (a), statte 65 (A). Das klappt jetzt also.
Weiß einer wie ich die F-Tasten definieren kann? |
Re: Globaler HotKey/Shortcut - SysHotKey.pas
mach mal ein edit und schreib in die OnKeydown event das hier rein:
Delphi-Quellcode:
dann kommt ein popup mit dem ascii-code ... F1 is z.B. 112 wenn ich mich nich irre... :>
showmessage(inttostr(key));
@ Aike. .. du kannst doch den parameter "notify" aendern ... bei jeder taste ne andere notify-msg, dann kannst du damit arbeiten ... ( oder hab ichs jetzt verrafft ?) |
Re: Globaler HotKey/Shortcut - SysHotKey.pas
Das mit Notify klappt ganz gut!
Aber irgendwie kann ich nur einen HotKey definieren. Wenn ich ...
Delphi-Quellcode:
das so mache, passiert einfach gar nix :(
begin
WindowProc:=MyWindowProc; Hotkeys[1].Key:=Lo(65); // Ascii Code der zu drueckenden taste Hotkeys[1].Modify:=0; inc(Hotkeys[1].Modify,MOD_Alt); // Ob Shift , Alt, STRG gedrueckt sein soll Hotkeys[1].Notify:='string'; // die msg, die beim tastendruck uebergeben wird RegisterHotKey(Self.Handle,$BFF0+0,Hotkeys[1].Modify,Hotkeys[1].Key); end; |
Re: Globaler HotKey/Shortcut - SysHotKey.pas
RegisterHotKey(Self.Handle,$BFF0+1,Hotkeys[1].Modify,Hotkeys[1].Key);
so düerfte es gehen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 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