![]() |
SendMessageTimeout: Nachrichten zwischen 2 Programmen
Hallo zusammen,
ich möchte beim starten von Programm A prüfen ob Programm B nicht läuft oder Programm B sein "ok" für das starten von Programm A gibt. Mein Ansatz ist die Funktion SendMessageTimeout. Das Timeout habe ich gewählt da Programm B zeitweise mit komplexen "SQL-Statements" beschäftigt ist und eventuell erst nach längerer Zeit reagiert. In dem Fall soll sicherheitshalber Programm A nicht gestartet werden. Der Plan sieht so aus: 1) mit FindWindow prüfen ob Programm B da ist 2) mit RegisterWindowMessage eine MessageId holen 3) an Programm B eine Nachricht schicken ob A starten darf Meine Problem ist wie ich die Antwort von B setze. Der letzte Parameter von SendMessageTimeout scheint ja ein Ergebnis zurückzugeben.
Delphi-Quellcode:
PSDK: lpdwResult: Receives the result of the message processing. This value depends on the message sent.
LRESULT SendMessageTimeout(
HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, UINT fuFlags, UINT uTimeout, PDWORD_PTR lpdwResult ); Nun ist aber die Frage wie ich in Programm B diesen Parameter setzen kann. Oder habt ihr einen anderen/besseren Ansatz? Alternativ könnte ja Programm B wieder eine Message an Programm A senden. Falls das aber mit dem Result aus MessageSendTimeout funktioniert würde mir das ehe zusagen :zwinker: Vielen Dank! |
Re: SendMessageTimeout: Nachrichten zwischen 2 Programmen
Hallo.
In Programm B wirst du die Message über einen message handler verarbeiten. Im message cracker setzt du dann das Feld Result auf den Wert, den du in deinem Protokoll festgelegt hast. Grüße vom marabu |
Re: SendMessageTimeout: Nachrichten zwischen 2 Programmen
Zitat:
Delphi-Quellcode:
Alternativ würde mir noch die ApplicationEvents-Komponente einfallen. Dort weiß ich aber auch nicht wie ich das Result setze. Die Methode sieht ja folgendermaßen aus:
procedure TMyControl.WndProc(var Message: TMessage);
Delphi-Quellcode:
Ein Codeschnipsel wäre hilfreich. :wink:
ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean)
Danke! |
Re: SendMessageTimeout: Nachrichten zwischen 2 Programmen
Hallo Daniel,
mit einem message cracker meine ich einen Record, der die für deine Nachricht typische Verwendung der einzelnen Felder in einem message record redefiniert um einen komfortableren Zugriff zu ermöglichen oder einfach sprechende Namen für die Parameter einzuführen. Beispiele für solche message cracker sind in der Unit Messages reichlich zu finden (z.B. TWMKey). Beim Studieren dieser records wird dir auffallen, dass eine message einen Standardaufbau hat. Es sind immer 4 Doppelworte. Das erste DWORD ist der message code, den du als Diskriminator in deiner Fensterprozedur verwendest. Das letzte DWORD nimmt deinen Rückgabewert auf. Die beiden in der Mitte übermitteln zusätzliche Werte für den message handler. Ich weiß jetzt nicht, was ich dir an Code anbieten könnte, aber vielleicht sind deine Unklarheiten ja jetzt schon beseitigt? Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:23 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