2. Programmstart verhindern

Hallo,

aus dem Buch Delphi6 von Michael Ebner habe ich ein kleines Programm entnommen, das einen 2. Programmstart verhindern soll. Doch leider funktioniert es nicht so wie es soll. Zwar wird ein 2. Programmstart verhindert, doch das bereits gestartete Programm kommt nicht wie versprochen in den Vordergrund. Da ich auch am Quellcode mit meinem bescheidenen Delphi-Wissen keinen Fehler finden kann, frage ich hier, ob mir jemand einen Tipp geben kann. Übrigens funktioniert auch die *.exe von der Beispiel-CD nicht, zumindest bei Win XP und W2000. Zum besseren Verständnis habe ich das ganze Programm hier abgedruckt:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

const
WM_MUTEX = WM_USER + 4478;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
procedure WmMutex(var Message: TMessage); message WM_MUTEX;
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
hMutex: THandle;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
hMutex := CreateMutex(nil, false,
‚TABU Datentechnik 20. 9. 1999‘);
if WaitForSingleObject(hMutex, 50) = WAIT_TIMEOUT then
begin
SendMessage(HWND_BROADCAST, WM_MUTEX, 77345, 992345);
Application.Terminate;
end;
end;

procedure TForm1.WmMutex(var Message: TMessage);
begin
if (Message.WParam =77345)
and (Message.LParam = 992345)
then Application.BringToFront;
end;

end.

Hallo…

Versuch es mal so:

procedure TForm1.WmMutex(var Message: TMessage);
begin
 if (Message.WParam =77345) and (Message.LParam = 992345) then 
 BringToFront;
end;

Ist nur so eine Vermutung von mir - wäre schön wenn Du zurückmelden würdest ob es so funktioniert oder nicht.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

oder so
Oder so:

var InstCheck: THandle;
begin

//–Nur eine Instance zulassen
InstCheck := CreateSemaphore(nil, 0, 1, ‚PROGRAM_NAME‘);
if ((InstCheck 0) and (GetLastError = ERROR_ALREADY_EXISTS))
then begin
CloseHandle(InstCheck);
Halt;
end;
//–