Einzelnen Beitrag anzeigen

Master-of-Magic

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

SetForegroundWindow vs. CoolTrayIcon.ShowMainForm

  Alt 27. Jan 2008, 17: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