Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi nonVCL Programm nur einmal starten (https://www.delphipraxis.net/24928-nonvcl-programm-nur-einmal-starten.html)

DP-Maintenance 28. Jun 2004 23:45

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Object-Pascal / Delphi-Language" nach "Windows API" verschoben.
Wie der Titel schon vermuten lässt gehört das besser nach Windows API.

WeTec 29. Jun 2004 11:37

Re: nonVCL Programm nur einmal starten
 
lange Rede, kurzer Sinn.

ich habs jetzt so gelöst:
Delphi-Quellcode:
var
  mHandle: THandle;   // Mutexhandle

function dlgfunc(hwnd...
begin
...
end;

begin
  mHandle := CreateMutex(nil, True, 'XYZ');
  if GetLastError = ERROR_ALREADY_EXISTS then halt;
  if mHandle <> 0 then ReleaseMutex(mHandle);
...
end.
trotz dem danke an alle beteiligten!
:wink:

MathiasSimmack 29. Jun 2004 15:02

Re: nonVCL Programm nur einmal starten
 
Also, ich hoffe mal, du hast einfach nur vergessen, hier im Forum zu sagen, dass deine Dialogbox zwischen dem Erzeugen und Freigeben des Mutex aufgerufen wird. Die 3 Punkte am Ende lassen mich aber was anderes vermuten, also wundere dich nicht, wenn du dein Programm trotz Mutex mehrfach starten kannst. ;)

Edit: Du hast Glück, :mrgreen:, "ReleaseMutex" sorgt dafür, dass man dein Programm nur ein einziges Mal starten kann, auch wenn du ihn vor dem Erzeugen der Dialogbox freigibst.

WeTec 30. Jun 2004 16:03

Re: nonVCL Programm nur einmal starten
 
klar! stimmt ja!
mit
Delphi-Quellcode:
CloseHandle(mHandle);
funktioniert es nicht.

so klappt es aber:
Delphi-Quellcode:
begin
  mHandle := CreateMutex(nil, True, 'XYZ');
  if GetLastError = ERROR_ALREADY_EXISTS then halt
  else
  begin
    // Fenster erzeugen
    ...
  end;
  if mHandle <> 0 then CloseHandle(mHandle);
end.
danke für den Hinweis :thuimb:

NicoDE 30. Jun 2004 20:13

Re: nonVCL Programm nur einmal starten
 
http://www.luckie-online.de/Ablage/E...co/oneinst.zip

Das Behandeln der Nachricht in Deiner Nachrichtenschleife bzw. Fensterprozedur darfst/kannst Du selbst schreiben ;)

WeTec 1. Jul 2004 18:57

Re: nonVCL Programm nur einmal starten
 
@NicoDE: super. danke! :thuimb:
jetzt fehlt nur noch das das Fenster in den vordergrund geholt wird.
werd ich wohl mal mit FindWindow herum experimentieren. oder hat hier dafür jemand was one VCL da?

NicoDE 1. Jul 2004 19:08

Re: nonVCL Programm nur einmal starten
 
Da die zweite Instanz mit den Parametern versorgt wird, hindert Dich niemand daran, an der Stelle SetForegroundWindow aufrufen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:54 Uhr.
Seite 2 von 2     12   

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