![]() |
Benutzerdefinierte Nachricht mit Charpointer als wParam
Ich möchte an ein anderes Fenster in einer anderen Anwendung eine Nachricht verschicken (NM_NRDE_MESSAGE = WM_USER+2).
Als wParam soll dabei ein PChar übergeben werden:
Delphi-Quellcode:
// Anwendung 1
var x: pchar; ... w2 := FindWindow('TNWLForm','XYZ'); x := 'ABC'; SendMessage(w2,NM_NRDE_MESSAGE,wparam(x),0);
Delphi-Quellcode:
Ausgabe:
// Anwendung 2
NM_NRDE_MESSAGE: begin s := string(pchar(wparam)); writeln(s); end; Zitat:
|
Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
Versuch mal bitte:
Delphi-Quellcode:
Wenn du x als PChar nutzen möchtes musst du erst speicher reservieren.
// Anwendung 1
var x: string; ... w2 := FindWindow('TNWLForm','XYZ'); x := 'ABC'; SendMessage(w2,NM_NRDE_MESSAGE, INTEGER(PCHAR(x)),0); |
Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
Läuft auch noch nicht.
Ausgabe: Zitat:
|
Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
Solche Nachrichten kannst du nur innerhalb eines einzelnen Programms verschicken. Zwischen Programmen läufst du in das Problem nicht geteilter Adressräume, aber dafür gibt es WM_COPYDATA.
|
Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
Und wie benutze ich WM_COPYDATA?
PSDK hilft mir auch nicht besonders viel weiter... |
Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
Das nächste Mal bitte selber suchen:
![]() |
Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
... dann bringt mich WM_COPYDATA nicht weiter, da ich den Datenverkehr eben speziell seperieren will.
|
Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
Neben WM_COPYDATA gibt es zur IPC mal so als Suchbegriffe noch: Memory-Mapped Files, Pipes, Mailslots, und man kann auch den localhost mit ein paar Sockets "missbrauchen". (Diese Liste erhebt keinen Anspruch auf Vollständigkeit.)
|
Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
Ich hab's jetzt so gelöst:
Delphi-Quellcode:
w2 := FindWindow('TNWLForm','XYZ');
Sendmessage(w2,NM_NRDE_MESSAGE_BEGIN,20*$10000,65+(66*$100)+(67*$10000)+(68*$1000000)); Sendmessage(w2,NM_NRDE_MESSAGE_DATA,69+(70*$100)+(71*$10000)+(72*$1000000),73+(74*$100)+(75*$10000)+(76*$1000000)); Sendmessage(w2,NM_NRDE_MESSAGE_END,77+(78*$100)+(79*$10000)+(80*$1000000),81+(82*$100)+(83*$10000)+(84*$1000000)); Sendmessage(w2,NM_NRDE_MESSAGE_BEGIN,20*$10000,65+(66*$100)+(67*$10000)+(68*$1000000)); Sendmessage(w2,NM_NRDE_MESSAGE_DATA,69+(70*$100)+(71*$10000)+(72*$1000000),73+(74*$100)+(75*$10000)+(76*$1000000)); Sendmessage(w2,NM_NRDE_MESSAGE_END,77+(78*$100)+(79*$10000)+(80*$1000000),81+(82*$100)+(83*$10000)+(84*$1000000));
Delphi-Quellcode:
Umständlich, aber es läuft...
// Anwendung 2
NM_NRDE_MESSAGE_BEGIN: begin nrdeOpen := true; nrdeType := Lobyte(Loword(wParam)); nrdeLen := Hiword(wParam); nrdeBufAsc := ''; if (nrdeType=NRDE_ASCII) or (nrdeType=NRDE_CONTROL) then begin if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Loword(lParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Loword(lParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Hiword(lParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Hiword(lParam))); Dec(nrdeLen); end; end; WriteLn('NRDE ',nrdeBufAsc); end; NM_NRDE_MESSAGE_DATA: if nrdeOpen then begin if (nrdeType=NRDE_ASCII) or (nrdeType=NRDE_CONTROL) then begin if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Loword(wParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Loword(wParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Hiword(wParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Hiword(wParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Loword(lParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Loword(lParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Hiword(lParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Hiword(lParam))); Dec(nrdeLen); end; end; WriteLn('NRDE ',nrdeBufAsc); end; NM_NRDE_MESSAGE_END: if nrdeOpen then begin if (nrdeType=NRDE_ASCII) or (nrdeType=NRDE_CONTROL) then begin if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Loword(wParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Loword(wParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Hiword(wParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Hiword(wParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Loword(lParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Loword(lParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Lobyte(Hiword(lParam))); Dec(nrdeLen); end; if nrdeLen>0 then begin nrdeBufAsc += Chr(Hibyte(Hiword(lParam))); Dec(nrdeLen); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:01 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