AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mutex und Parameterweitergabe

Ein Thema von Flare · begonnen am 10. Apr 2007 · letzter Beitrag vom 10. Apr 2007
Antwort Antwort
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
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#2

Re: Mutex und Parameterweitergabe

  Alt 10. Apr 2007, 11:56
Moin Moin,
Hmm?Sender sollte OK sein?
Wie sieht den die Empfängerseite aus ???
Jörg
have FUN
  Mit Zitat antworten Zitat
Flare

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

Re: Mutex und Parameterweitergabe

  Alt 10. Apr 2007, 12:25
Ich weiß zwar jetzt nicht, was du mit Sender meinst, aber so sieht der Empfang und die Verarbeitung aus (unit haupt):

Delphi-Quellcode:
procedure TForm1.WndProc(var msg : TMessage);
var
  pFileName : PChar;
  dwLen : DWORD;
begin
  if msg.Msg=dwMessage then // Wenn die erhaltene Message wirklich die Message mit dem Parameter ist...
  begin
    dwLen := MAX_PATH+1;
    pFileName := StrAlloc(dwLen); // Speicher anfordern
    try
      GlobalGetAtomName(msg.lParam,pFileName,dwLen); // Parameter holen

      Files.Add(pFileName); // Parameter verarbeiten

      GlobalDeleteAtom(msg.lParam); // Parameter aus der Atomliste löschen
    finally
      StrDispose(pFileName); // Speicher wieder freigeben
    end;
  end
  else inherited WndProc(msg); // Andere Nachrichten darf jemand anderes verarbeiten
end;

Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr.
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