Einzelnen Beitrag anzeigen

Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit Parameter an eine laufende Instanz übergeben

  Alt 12. Feb 2005, 11:48
Hi allesamt,

ich hab da ein Problem bei dem ich selber keinen Ausweg finde.

Und zwar möchte ich meinem Programm auch Parameter übergeben, wenn es bereits läuft.
Und das Programm natürlich nicht nochmal starten.
Ich hab da auch ein scheinbar 100% passendes Tutorial auf SwissDelphiCenter gefunden --> hier

Aber nachdem ich es nun eingebaut habe, startet die Applikation komplett nichtmehr.
Ich poste unten den gesamten Quellcode der Programm-Datei.
Wenn ich einen Breakpoint auf das erste begin setze, dann hält er dort auch an. Will ich dann mit F8 einen Schritt vor gehen, dann schließt sich das Programm sofort und ich lande wieder in der IDE.
Die Funktionen im Hauptformular sind natürlich vorhanden.

Ich hoffe jemand hier kann mir helfen.

thx schonmal,
Steffen

Delphi-Quellcode:
program MusicPlayer;

uses
  Forms,
  Windows,
  Messages,
  AC_Main in 'AC_Main.pas{frmMain},
  AC_OptGen in 'AC_OptGen.pas{frmOptGen},
  AC_Const in 'AC_Const.pas',
  AC_Sound in 'AC_Sound.pas',
  AC_About in 'AC_About.pas{frmAbout},
  AC_Wake in 'AC_Wake.pas{frmWake},
  AC_Search in 'AC_Search.pas{frmSearch},
  AC_Shortcuts in 'AC_Shortcuts.pas{frmShortcuts};

{$R *.res}

const
  cMutexID = 'EW-MusicPlayer';

var
  Mutex : THandle;
  HAPPLICATION : HWND;
  HMAINFORM : HWND;
  StartParams : String;
  CountParams : Integer;
  AtomSend : Integer;
begin
  Mutex := CreateMutex(nil, True, cMutexID);
  if (Mutex <> 0) and (GetLastError = 0) then
  begin
    Application.Initialize;
    Application.CreateForm(TfrmMain, frmMain);
    Application.CreateForm(TfrmOptGen, frmOptGen);
    Application.CreateForm(TfrmAbout, frmAbout);
    Application.CreateForm(TfrmWake, frmWake);
    Application.CreateForm(TfrmSearch, frmSearch);
    Application.CreateForm(TfrmShortcuts, frmShortcuts);
    Application.Run;
    if (Mutex <> 0) then CloseHandle(Mutex);
  end else
  begin
    HAPPLICATION := 0;
    HMAINFORM := 0;
    Application.Initialize;
    repeat
      HAPPLICATION := FindWindowEx(0,HAPPLICATION, 'TApplication', PChar('EW-MusicPlayer'));
    until HAPPLICATION <> Application.Handle;
    if HAPPLICATION <> 0 then
    begin
      Windows.ShowWindow(HAPPLICATION, SW_Normal);
      Windows.SetForegroundWindow(HAPPLICATION);
      HMAINFORM := FindWindowEx(0,0,'TfrmMain', nil);
      if (HMAINFORM <> 0) then
      begin
        StartParams := ';';
        for CountParams := 1 to ParamCount do
          StartParams := StartParams + ';' + ParamStr(CountParams);
        try
          AtomSend := GlobalAddAtom(PChar(StartParams));
          SendMessage(HMAINFORM,WM_ACTIVATEEWMP,Length(StartParams),AtomSend);
        finally
          GlobalDeleteAtom(AtomSend);
        end;
      end;
    end;
    Halt;
  end;
end.
  Mit Zitat antworten Zitat