![]() |
Parameterübergabe mit SendMessage
Hi
ich habe eine Anwendung die nur einmal gestartet werden darf. Wenn jetzt aber eine 2. Instanz mit Parameter gestartet wird, dann sollten die Parameter zuerst an die 1. Instanz geschickt werden und danach erst die Anwendung beendet werden. Also hab ich gesucht und auch folgenden Code gefunden:
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var MutexFensterHandle : THandle; S : String; begin MutexFensterHandle := FindWindow('TForm1', 'TestAnwendung'); if MutexFensterHandle <> 0 then begin S := 'Test'; SendMessage(MutexFensterHandle, WM_ParamterSend, 0, DWORD(PChar(S))); SetForegroundWindow(MutexFensterHandle); end else Showmessage('Es ist ein Fehler beim finden des Fensterhandels aufgetreten'); end;
Delphi-Quellcode:
In meiner Testanwendung funktioniert der Code perfekt (Sendet die Nachricht an sich selber)
const
WM_ParamterSend = WM_USER + 5; [..] procedure ParamterReceive(var msg: TMessage); message WM_ParamterSend; [..] procedure TForm1.ParamterReceive(var msg: TMessage); begin msg.Result := 1; ShowMessage(PChar(msg.lParam)); end; In meinem eigentlichen Programm bekomme ich aber nur eine paar kryptische Zeichen ausgegeben (2. Instanz sendet an 1. Instanz) Meine Vermutung ist das nur der Pointer geschickt wird und dieser bei der 1. Instanz dann auf einen zufälligen Wert zeigt. Stimmt das? Wie kann ich das am besten Lösen? Nur so zur Info das ist meine erste Verwendung von SendMessage also nicht böse sein wenn dies ganz einfach zu lösen ist :angel2: |
Re: Parameterübergabe mit SendMessage
Du versendest nur einen Pointer. Innerhalb der Anwendung funktioniert das weil der Pointer eben auf das richtige zeigt. Sendest du es jedoch an eine andere Anwendung steht dort natürlich an entsprechender Stelle im Speicher etwas anderes.
|
Re: Parameterübergabe mit SendMessage
Such mal im Forum nach WM_COPYDATA. Über diese Windows-Message können mehr Infos ausgetauscht werden.
|
Re: Parameterübergabe mit SendMessage
Zitat:
Zitat:
|
Re: Parameterübergabe mit SendMessage
Danke ich hab jetzt folgendes gefunden:
![]() Mit dem konnte ich es bei mir zum laufen bekommen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz