Einzelnen Beitrag anzeigen

Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#1

Mutex und Parameterweitergabe

  Alt 10. Apr 2007, 11:49
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
Willy Scheibel
  Mit Zitat antworten Zitat