AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Eigene Anwendung/Fenster nach vorne holen per Shortcut
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Anwendung/Fenster nach vorne holen per Shortcut

Ein Thema von Jumpy · begonnen am 4. Dez 2012 · letzter Beitrag vom 12. Dez 2012
Antwort Antwort
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#1

Eigene Anwendung/Fenster nach vorne holen per Shortcut

  Alt 4. Dez 2012, 12:03
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut

  Alt 4. Dez 2012, 12:16
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut

  Alt 4. Dez 2012, 15:48
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:
Application.ShowMainForm:= false;
ShowWindow(Application.Handle, SW_HIDE) ;
SetWindowLong(Application.Handle, GWL_EXSTYLE, getWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW) ;
Das angezeigte Form hab ich mit deinem Code versehen, erstmal inklusive Showmessage. Das showmessage kommt nicht.

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
SetForegroundWindow(DF.Handle); Mir mein Anzeigefenster auch nicht nach vorne.

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?
Ralph
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
297 Beiträge
 
Delphi 12 Athens
 
#4

AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut

  Alt 4. Dez 2012, 16:20
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut

  Alt 4. Dez 2012, 16:39
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#6

AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut

  Alt 4. Dez 2012, 18:16
Schließe mich Pfaffe an, weil: dafür würde ich nicht extra ein Programm erweitern. Die Windows Funktion funktioniert wunderbar. Grüße
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut

  Alt 5. Dez 2012, 09:01
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

@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.
Ralph
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut

  Alt 12. Dez 2012, 12:01
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:
procedure TMain.WMHotKey(var Message: TMessage);
begin
  SetForegroundWindow(DF.Handle);
end;
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?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.620 Beiträge
 
Delphi 12 Athens
 
#9

AW: Eigene Anwendung/Fenster nach vorne holen per Shortcut

  Alt 12. Dez 2012, 13:27
Nicht ausprobiert, aber klappt es mit MSDN-Library durchsuchenBringWindowToTop?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 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