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.