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 Benutzerdefinierte Nachricht mit Charpointer als wParam (https://www.delphipraxis.net/141759-benutzerdefinierte-nachricht-mit-charpointer-als-wparam.html)

implementation 15. Okt 2009 14:57


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:
// Anwendung 2
NM_NRDE_MESSAGE: begin
  s := string(pchar(wparam));
  writeln(s);
end;
Ausgabe:
Zitat:

dunaryvarop
Was könnte das Problem sein?

turboPASCAL 15. Okt 2009 15:07

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
 
Versuch mal bitte:
Delphi-Quellcode:
// Anwendung 1
var x: string;
...
w2 := FindWindow('TNWLForm','XYZ');
x := 'ABC';
SendMessage(w2,NM_NRDE_MESSAGE, INTEGER(PCHAR(x)),0);
Wenn du x als PChar nutzen möchtes musst du erst speicher reservieren.

implementation 15. Okt 2009 15:10

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
 
Läuft auch noch nicht.
Ausgabe:
Zitat:

****&

Dax 15. Okt 2009 15:31

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.

implementation 15. Okt 2009 15:35

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
 
Und wie benutze ich WM_COPYDATA?
PSDK hilft mir auch nicht besonders viel weiter...

DeddyH 15. Okt 2009 15:37

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
 
Das nächste Mal bitte selber suchen: WM_COPYDATA

implementation 15. Okt 2009 15:48

Re: Benutzerdefinierte Nachricht mit Charpointer als wParam
 
... dann bringt mich WM_COPYDATA nicht weiter, da ich den Datenverkehr eben speziell seperieren will.

Medium 15. Okt 2009 15:57

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.)

implementation 15. Okt 2009 16:49

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:
// 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;
Umständlich, aber es läuft...


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