Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   doppelter Start verhindern und Prog in den Vordergrund (https://www.delphipraxis.net/146460-doppelter-start-verhindern-und-prog-den-vordergrund.html)

khh 20. Jan 2010 10:38


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

Luckie 20. Jan 2010 10:44

Re: doppelter start verhindern
 
BringToFront oder so ähnlich heißt die Routine.

himitsu 20. Jan 2010 10:47

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

Luckie 20. Jan 2010 11:10

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.

hoika 20. Jan 2010 11:23

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.

1


Heiko

himitsu 20. Jan 2010 11:48

Re: doppelter Start verhindern und Prog in den Vordergrund
 
Zitat:

Zitat von hoika
als Link ein bisschen c++ Code,
ist gut lesbar, sollte 1:1 in Delphi umsetzbar sein.

Zum Thema "doppelter Start verhindern" gibt es auch noch massenhaft Threads in der DP und bei einem Teil der vorgestellten Codes wird auch die andere "Instanz" in den Vordergrund geholt.

Gehstock 20. Jan 2010 12:21

Re: doppelter Start verhindern und Prog in den Vordergrund
 
Zitat:

Zitat von hoika
Hallo,

der Befehl heisst BringWindowToFront

als Link ein bisschen c++ Code,
ist gut lesbar, sollte 1:1 in Delphi umsetzbar sein.

1


Heiko

mal aus rein persönlichen Intresse währe das richtig übersetzt?

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

OrNEC 11. Dez 2010 11:44

AW: doppelter Start verhindern und Prog in den Vordergrund
 
Sag mal was muss ich an die ForceWindowToFront Funktion übergeben damit es funktioniert? Danke!

Luckie 11. Dez 2010 11:51

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?

OrNEC 11. Dez 2010 12:28

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 21:00 Uhr.
Seite 1 von 2  1 2      

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