![]() |
doppelter Start verhindern und Prog in den Vordergrund
hallo zusammen,
mit:
Delphi-Quellcode:
unit NichtDoppeltStarten;
{$mode objfpc}{$H+} interface implementation uses windows,Dialogs,sysutils; var mHandle: THandle; // Mutexhandle Initialization mHandle := CreateMutex(nil,True,'myprog.exe'); // 'xxxxx' Der Anwendungsname ist hier einzutragen if GetLastError = ERROR_ALREADY_EXISTS then begin // Anwendung läuft bereits {showMessage('Anwendung läuft bereits!!!!!');} // Wenn du deine Meldung willst, mach die Klammern weg Halt; end; finalization // ... und Schluß if mHandle <> 0 then CloseHandle(mHandle) end. {Dieter Hirt} verhindere ich, dass mein Prog mehrfach gestartet wird. Das funktioniert soweit auch. Gibt es ne Möglichkeit, das Programm damit in den Vordergrund zu holen? danke Gruss KH |
Re: doppelter start verhindern
BringToFront oder so ähnlich heißt die Routine.
|
Re: doppelter start verhindern
Was hat bitte die Überschrift mit deinem Problem zu tun?
Lösungen: - Fensterhandle des anderen Programmes suchen - über das Handle dieses Fenster vorholen oder - Nachricht "setz dich mal in den Vordergrund" an das andere Programm schicken - Nachricht im anderem Programm verarbeiten - und dann holt sich das andere Programm selber nach vorne |
Re: doppelter Start verhindern und Prog in den Vordergrund
"anderes Programm" liest man besser als "erste Instanz". Wenn das Programm schon einmal läuft, dann schickst du von der zweiten Instanz eine Nachricht an die erste Instanz. Die erste Instanz empfängt diese Nachricht und reagiert entsprechend darauf.
|
Re: doppelter Start verhindern und Prog in den Vordergrund
Hallo,
der Befehl heisst BringWindowToFront als Link ein bisschen c++ Code, ist gut lesbar, sollte 1:1 in Delphi umsetzbar sein. ![]() Heiko |
Re: doppelter Start verhindern und Prog in den Vordergrund
Zitat:
|
Re: doppelter Start verhindern und Prog in den Vordergrund
Zitat:
Delphi-Quellcode:
function ForceWindowToFront(HWND : hWnd):Boolean;
var ForegroundWindowThreadID : Dword; WindowThreadID : DWord; Begin if (hWnd = GetForegroundWindow) then Result := true else Begin ForegroundWindowThreadID := GetWindowThreadProcessId(GetForegroundWindow, nil); WindowThreadID := GetWindowThreadProcessId(hWnd, nil); if (ForegroundWindowThreadID <> WindowThreadID) then Begin AttachThreadInput(ForegroundWindowThreadID, WindowThreadID, true); Result := SetForegroundWindow(hWnd); AttachThreadInput(ForegroundWindowThreadID, WindowThreadID, false); end else Result := SetForegroundWindow(hWnd); ShowWindow(hWnd, SW_RESTORE); end; end; Edit: Ok habs mal getestet also es tut was es soll |
AW: doppelter Start verhindern und Prog in den Vordergrund
Sag mal was muss ich an die ForceWindowToFront Funktion übergeben damit es funktioniert? Danke!
|
AW: doppelter Start verhindern und Prog in den Vordergrund
Ohne mir das genau angesehen zu haben: Das Fensterhandle von dem Fenster was man nach vorne holen will?
|
AW: doppelter Start verhindern und Prog in den Vordergrund
Ja kann sein, und wie mache ich das?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz