AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi SetForegroundWindow vs. CoolTrayIcon.ShowMainForm
Thema durchsuchen
Ansicht
Themen-Optionen

SetForegroundWindow vs. CoolTrayIcon.ShowMainForm

Ein Thema von Master-of-Magic · begonnen am 27. Jan 2008 · letzter Beitrag vom 27. Apr 2008
Antwort Antwort
Master-of-Magic

Registriert seit: 24. Jul 2006
37 Beiträge
 
Delphi 2005 Personal
 
#1

SetForegroundWindow vs. CoolTrayIcon.ShowMainForm

  Alt 27. Jan 2008, 16:37
Ich nutze Mutex, um den Mehrfachstart eines Tools zu verhindern. Mein Programmstart sieht folgendermaßen aus:

Delphi-Quellcode:
Mutex := CreateMutex(nil, True, cMutexID);
  // +++ identify an already running app +++
  if (Mutex <> 0) and (GetLastError = 0) then
  begin
    // +++ none was found, so proceed as usual +++
  {...}
  end
  else
  begin
    // +++ look for the running app windows handle +++
    Application.Initialize;
    repeat
      HAPPLICATION := FindWindow(PChar('TSPMTmain'), nil);
    until HAPPLICATION <> Application.Handle;
    // +++ found it, so activate the running app +++
    if HAPPLICATION <> 0 then
    begin
       Windows.ShowWindow(HAPPLICATION, SW_Normal);
       Windows.SetForegroundWindow(HAPPLICATION);
    end;
    Halt;
  end;
Funktioniert soweit alles wunderbar. Das Tool benutzt das CoolTrayIcon und kann darüber komplett in die Taskbar minimiert werden. Um es wiederherzustellen wäre dann ein Klick auf Icon nötig, der die ShowMainForm-Methode der Komponente auslöst.

Obiger Code aktiviert allerdings das vorhandene Fenster via API und umgeht dabei die notwendige CoolTrayIcon-Methode.
Folge: Das Tool wird nicht in der Taskleiste angezeigt und lässt sich auch nicht mehr minimieren - erst ein Klick aufs TrayIcon stellt das Fenster korrekt wieder her ...

Gibt es eine einfache Möglichkeit das CoolTrayIcon.ShowMainForm des anderen Prozesses auszulösen? Oder muss ich dafür doch extra Messages einrichten?
  Mit Zitat antworten Zitat
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#2

Re: SetForegroundWindow vs. CoolTrayIcon.ShowMainForm

  Alt 18. Feb 2008, 06:21
Hast du schon eine Lösung gefunden?
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#3

Re: SetForegroundWindow vs. CoolTrayIcon.ShowMainForm

  Alt 27. Apr 2008, 16:09
Falls das hier jmd. interessiert, die Lösung:
Delphi-Quellcode:
   repeat
      appH := FindWindow(PChar('TMform'), nil);
   until appH <> Application.Handle;

    if appH <> 0 then
    begin
       ParentH := GetWindowLong(appH, GWL_HWNDPARENT);
       Windows.ShowWindow(appH, SW_Normal);
       postmessage(ParentH,WM_SYSCOMMAND,SC_RESTORE,0);
       Windows.SetForegroundWindow(appH);
    end;
Im OnRestore Ereignis der Anwendung (ApplicationEvents benutzen!) kann man dann festlegen, dass das TrayIcon verschwindet.
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  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 00:06 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