AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) doppelter Start verhindern und Prog in den Vordergrund
Thema durchsuchen
Ansicht
Themen-Optionen

doppelter Start verhindern und Prog in den Vordergrund

Ein Thema von khh · begonnen am 20. Jan 2010 · letzter Beitrag vom 11. Dez 2010
Antwort Antwort
Seite 1 von 2  1 2      
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.929 Beiträge
 
FreePascal / Lazarus
 
#1

doppelter Start verhindern und Prog in den Vordergrund

  Alt 20. Jan 2010, 11:38
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
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: doppelter start verhindern

  Alt 20. Jan 2010, 11:44
BringToFront oder so ähnlich heißt die Routine.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: doppelter start verhindern

  Alt 20. Jan 2010, 11:47
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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: doppelter Start verhindern und Prog in den Vordergrund

  Alt 20. Jan 2010, 12:10
"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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: doppelter Start verhindern und Prog in den Vordergrund

  Alt 20. Jan 2010, 12:23
Hallo,

der Befehl heisst BringWindowToFront

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

1


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: doppelter Start verhindern und Prog in den Vordergrund

  Alt 20. Jan 2010, 12:48
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Gehstock

Registriert seit: 28. Jan 2006
Ort: Görlitz / Sachsen
489 Beiträge
 
Delphi 2007 Professional
 
#7

Re: doppelter Start verhindern und Prog in den Vordergrund

  Alt 20. Jan 2010, 13:21
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
Marcel
  Mit Zitat antworten Zitat
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#8

AW: doppelter Start verhindern und Prog in den Vordergrund

  Alt 11. Dez 2010, 12:44
Sag mal was muss ich an die ForceWindowToFront Funktion übergeben damit es funktioniert? Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: doppelter Start verhindern und Prog in den Vordergrund

  Alt 11. Dez 2010, 12:51
Ohne mir das genau angesehen zu haben: Das Fensterhandle von dem Fenster was man nach vorne holen will?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#10

AW: doppelter Start verhindern und Prog in den Vordergrund

  Alt 11. Dez 2010, 13:28
Ja kann sein, und wie mache ich das?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:47 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