Eigene Anwendung/Fenster nach vorne holen per Shortcut
Hallo,
ich hab ein Programm erstellt, das im Prinzip nur gewisse Informationen auf einem Form anzeigt. Die Nutzer haben die Möglichkeit es in den Optionen als StayOnTop einzustellen und dann legt es sich über alle anderen Programme und ist immer nutzbar. Manche User betreiben es aber lieber im normalen Modus, d.h. nach und nach legen sich andere Programme darüber. Jetzt wäre es schön, wenn man das mit einem Windows-weiten Tastatur-Shortcut oder ähnlichem wieder nach vorne holen könnte. Es hat keinen Eintrag in der Taskbar, aber ein Taskbar-Icon, über das man das nach vorne holen kann, dieses wird aber von Windows gelegentlich ausgeblendet, so dass man ggf. zwei Mausklicks braucht, um das Fenster darüber zu öffnen. Es ist also eine Möglichkeit da, das Fenster zu erreichen, aber ich und auch einige der User, hätten gerne eine Tastenkombi mit der das geht. Kann man in das Programm irgenwas einbauen, um ShortCuts zu empfangen oder bei Windows zu regisrieren oder sowas? -------- Ich habe in das Programm einen Mutex eingebaut. Wird das Programm erneut gestartet, so wird die alte Instanz nach vorne geholt und die neue wieder beendet. D.h. wenn es einen Möglichkeit gäbe Programme per Short-Cut zu starten, würde mir das auch schon reichen. Wäre schön, wenn da jemand Infos hätte ob/wie das geht. Suche nach BringToFront usw. hat mir nichts beschert, bei den Ergebnissen geht es meist um Programm-Interne Abläufe, während ich ja von ausserhalb auf mein Programmfenster Einfluss nehmen will. |
AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut
Delphi-Quellcode:
unit unit3;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm3 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public procedure WMHotKey(var Message: TMessage); message WM_HOTKEY; end; var Form3: TForm3; implementation {$R *.dfm} { TForm3 } const HotkeyID=12345; procedure TForm3.FormCreate(Sender: TObject); begin RegisterHotKey(Handle, HotkeyID , MOD_CONTROL, VK_F10); end; procedure TForm3.FormDestroy(Sender: TObject); begin UnregisterHotKey(Handle, HotkeyID); end; procedure TForm3.WMHotKey(var Message: TMessage); begin Showmessage('Hallo') end; end. |
AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut
Danke Bummi für den Ansatz. Leider bekomme ich es nicht so recht ans Laufen. Vllt. ist meine Konstellation zu speziell?
Ich habe eine MainForm, die ist (in der Regel) ausgeblendet:
Delphi-Quellcode:
Das angezeigte Form hab ich mit deinem Code versehen, erstmal inklusive Showmessage. Das showmessage kommt nicht.
Application.ShowMainForm:= false;
ShowWindow(Application.Handle, SW_HIDE) ; SetWindowLong(Application.Handle, GWL_EXSTYLE, getWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW) ; Dann hab ich deinen Code mal in die MainForm verlegt und diese sichtbar gelassen. Da kommt das showmessage. Liegen jedoch andere Anwendungen über meiner, so seh ich das showmessage gar nicht, erst, wenn ich in der Taskleiste auf das Icon der MainForm klicke. Zudem bringt das
Delphi-Quellcode:
Mir mein Anzeigefenster auch nicht nach vorne.
SetForegroundWindow(DF.Handle);
Ich habe so dass Gefühl, dass es klappen würde, wenn ich mich in einem anderen Fenster meiner Anwendung befinde, kann das sein? Oder müsste das wenn dann immer klappen, auch wenn kein Fenster meiner Anwendung den Fokus hat? |
AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut
Es geht auch mit Windows Bordmittel:
Lege von Deinem Programm eine Verknüpfung an. Dann mit rechter Maustaste auf die Verknüpfung klicken und Menüpunkt Eigenschaften wählen. Im Dialog Eigenschaften auf der Lasche Verknüpfung kann der Anwender eine Tastenkombination festlegen indem er den Cursor in das Eingabefeld setzt und die gewünschte Taste drückt. |
AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut
Ich weiß ja nicht was genau Du machst, aber so etwas geht auch ....
Delphi-Quellcode:
program Project2;
uses Windows,Forms, messages,Dialogs, Unit3 in 'Unit3.pas' {Form3}; {$R *.res} var FHandle:Cardinal; const HotkeyID=12345; type TDummy=Class Class procedure MyOnMessage(var Msg: TMsg; var Handled: Boolean); End; { TDummy } class procedure TDummy.MyOnMessage(var Msg: TMsg; var Handled: Boolean); begin if msg.message=WM_HOTKEY then begin Showmessage('Hallo'); Handled := true; end else begin Handled := false; end; end; begin Application.Initialize; RegisterHotKey(Application.Handle, HotkeyID , MOD_CONTROL, VK_F10); FHandle := Application.Handle; Application.ShowMainForm:= false; ShowWindow(Application.Handle, SW_HIDE) ; SetWindowLong(Application.Handle, GWL_EXSTYLE, getWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW) ; Application.CreateForm(TForm3, Form3); Application.OnMessage := TDummy.MyOnMessage; Application.Run; UnregisterHotKey(FHandle, HotkeyID); end. |
AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut
Schließe mich Pfaffe an, weil: dafür würde ich nicht extra ein Programm erweitern. Die Windows Funktion funktioniert wunderbar. Grüße
|
AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut
Irgendwie hatte ich gestern einen schlechten Tag. Bummis erste Lösung funktioniert genau wie angegeben. Ich war nur irgendwie mit den Handeln durcheinander gekommen. Eingebaut hab ich es nun in die MainForm und in der dann aufgerufenen Funktion benutze ich SetForegroundWindow nun mit dem Handle des Forms, dass ich nach vorne holen will und so klappt's dann.
Ein anderer Denkfehler war, das SetForegroundWindow nach einem showmessage zu platzieren. So kamm das versteckte ShowMessage mit dem OK-Button, dass ich aber nicht sehen konnte, weil es hinter anderen Fenstern versteckt war (k.A. warum das showmessage nicht System-Modal ist oder ist das bei keiner Anwendung so? Erinner mich gerade nicht). Da ich so zunächst nie OK klicken konnte, kam auch das Fenster nicht nach vorne. Kommt das Showmessage nach dem SetForegroundWindow klappte es dann natürlich. Es gibt halt Tage an denen ich wünschte ich wäre ein Kaffee-Trinker und könnte mir mit einer Kanne Kaffee die Spinnweben aus dem Kopf spülen :-D @Pfaffe/Jonas: Habt natürlich irgendwo recht, aber ich haue in dem Fall lieber 10 Zeilen mehr in den Quellcode, als bei 40 Kollegen rumzurennen und denen den Short-Cut einzurichten. Darauf würde das nämlich hinauslaufen, wie ich unseren Haufen hier kenne. |
AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut
Hallo,
ich muss das nochmal rauskramen hier, weil ich da eine kleine Abwandlung brauche. Ich schaffe es das betroffene Fenster nach vorne zu holen:
Delphi-Quellcode:
Aber der Fokus ist noch bei einer Anwendung/Fenster die/das vorher den Fokus hatte (sprich Fenster-Rahmen ist oben noch blau). Wie hole ich mein Fenster/Anwendung nicht nur nach vorne, sondenr geb ihr auch den Fokus bzw. mach sie zur aktiven Anwendung?
procedure TMain.WMHotKey(var Message: TMessage);
begin SetForegroundWindow(DF.Handle); end; |
AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut
Nicht ausprobiert, aber klappt es mit BringWindowToTop?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:39 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