Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit Parameter an eine laufende Instanz übergeben (https://www.delphipraxis.net/40202-problem-mit-parameter-eine-laufende-instanz-uebergeben.html)

MasterEvil 12. Feb 2005 11:48


Problem mit Parameter an eine laufende Instanz übergeben
 
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.

Assarbad 12. Feb 2005 17:40

Re: Problem mit Parameter an eine laufende Instanz übergeben
 
Dann dürfte es einen Fehler im "Initialization"-Code einer der Units geben. Der wird nämlich vor dem "begin" ausgeführt.

Ist da irgendwas mit Multithreading in dem Programm?

MasterEvil 13. Feb 2005 00:58

Re: Problem mit Parameter an eine laufende Instanz übergeben
 
hi,

danke für die Antwort.

Das Problem hat sich irgendwie von selbst gelöst.
Ich weiss nicht wie ichs gemacht hab.
Plötzlich ging es wieder.

hoffe das bleibt so

greetz,
Steffen


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:09 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