Hey ho!
Ich habe ein klitzekleines Schönheitsproblem mit einem meiner Programme.
Da dieses Programm bloß ein mal offen sein soll, habe ich es mit
Mutex ausgestattet und lasse die Parameter an die erste Instanz des Programmes weitergeben.
Delphi-Quellcode:
program Test;
uses
Windows,
Sysutils,
Forms,
haupt
in '
haupt.pas'
{Form1};
{$R *.res}
var
//dwMessage: DWORD; (ist in unit haupt deklariert)
dwMutex : DWORD;
hWindow : DWORD;
dwAtom : DWORD;
begin
dwMessage := RegisterWindowMessage('
{93C5B2B7-CE8D-439A-857B-4CC76F35C091}');
// Eigene Message erzeugen
dwMutex := CreateMutex(
nil,true,'
Test');
// Schauen, ob das Programm schon mal läuft
try
if GetLastError <> ERROR_ALREADY_EXISTS
then // Wenn nicht, dann
begin
Application.Initialize;
// Anwendung ganz normal starten
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else // Falls doch...
begin
hWindow := FindWindow(
nil, '
Testprogramm');
// Das Hauptfenster finden
if hWindow <> 0
then // Falls das Fenster gefunden wurde
begin
if (paramcount > 0)
and FileExists(paramstr(1))
then // Parameter zählen
begin
dwAtom := GlobalAddAtom(PChar(paramstr(1)));
// Den ersten in der Atomliste aufnehmen
SendMessage(hWindow,dwMessage,0,dwAtom);
// Und dem Fenster den Zeiger auf dieses Atom schicken
end;
end;
end;
finally
if dwMutex <> 0
then CloseHandle(dwMutex);
// Mutex wieder schließen
end;
end.
Es das funktioniert auch wunderbar und ohne Probleme, nur flackert mein Programm unschön und es dauert ziemlich lange, um alle Dateien einzulesen.
Deswegen habe ich versucht, mir eine kleine
nonVCL-Exe zu schreiben, die das ganze (so hatte ich gehofft) schneller ausführt, aber die hat fast genau so lange gebraucht und es sind unterwegs auch noch Dateinamen abhanden gekommen. Das hat also nicht geklappt.
Nun meine Frage:
Gibt es eine Möglichkeit das ganze zu beschleunigen oder zu optimieren?
Danke für alle Antworten!
Flare