Einzelnen Beitrag anzeigen

hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Mutex und Programm nicht doppelt starten

  Alt 17. Jan 2007, 09:57
Dein mHandle ist das Handle des Mutex, das geht natürlich nicht!
Was du brauchst ist das Handle auf die bereits laufende Instanz des Programmes, daher das Findwindow. Ich schrieb ja, das dort ein Fehler sein könnte. Such mal hier im Forum nach Mutex und Fenster nach vornebringen, dort gibt es funktionierende Lösungen.

Edit:
Habe eben in der Newsgruppe de.comp.language.delphi.misc ein Beispiel gefunden, (ist von Nineberry, der weiss was er tut)
Delphi-Quellcode:
procedure CheckOnce;
const
  TestTitle = 'Nicoles Einweganwendung testing...';
  AppTitle = 'Nicoles Einweganwendung';
var
  hWnd: THandle;
begin
  // einen anderen Titel setzen, so dass wir uns
  // nicht selbst finden
  Application.Title:= TestTitle;
  hWnd:= FindWindow('TApplication', AppTitle);

  if hWnd <> 0 then
  begin
    // Eine andere Instanz läuft schon;

    // Falls minimiert, wiederherstellen
    if IsIconic(hWnd) then
      ShowWindow(hWnd, SW_SHOW);

    // Diese in den Vordergrund bringen
    SetForegroundWindow(hWnd);

    // Uns selbst schließen
    Halt;
  end;

  // Wir sind die erste Instanz -> Titel setzen, so
  // dass weitere unsfinden
  Application.Title:= AppTitle;
end;
Damit müsstest du deine andere Instanz finden, der schickst du dann die Message (und wenn du WM_USER + 4711 sendest, dann musst du natürlich auch auf WM_USER + 4711 abfragen)
/Edit
  Mit Zitat antworten Zitat