SendMessage로 다른 프로그램에 문자열을 보내기 위해
지금까지 WMCopyData메세지를 가지고 잘 써왓습니다
그런데 어떤 필요에 의해 WM_USER을 써서 문자열을 보내려고 합니다
Wparam과 lparam에 어떠한 형변환을 해서 보내고
받는 쪽에서도 어떻게 CopyMemory를 해야하는지 잘 모르겟습니다
고수님의 도움 부탁드립니다
<!--CodeS-->
****보내는 쪽
pData:string;
PData:='Now SendString';
wnn:=FindWindow(nil,'TESTFORM');
SendMessage(wnn, WM_USER+20, Longint(PChar(pData)),0);
****받는쪽
procedure WMUserString(var Message: TMessage); message WM_USER_+20;
procedure TForm1.WMUserString(var Message: TMessage);
var
DataStr:string;
MyData:Pointer;
begin
MyData := @Message.WParam;
DataStr:= string(MyData);
Memo1.Lines.Add('1->'+PChar(MyData));
Memo1.Lines.Add('2->'+DataStr);
end;
<!--CodeE-->
받는쪽에서는 이상한 깨진 문자가 나오는데요
어디가 잘못되었슨지요
그냥 DataStr:= PChar(Message.WParam); 또는 DataStr:= string(Message.WParam); 받으세요
그리고 PChar가 호환도 좋아요
그래서 보낼때도 깨지지 않게 #0를 붙여 준다든지, 구조체로해서 문자열 길이도 보내서 띄어쓰든 엔터를 치든 특수기호가 들어가든
그대로 전송하도록 하는게 좋습니다(구조체 예로 TCopyDataStruct)
var
pData:string;
sandData : PChar;
begin
PData:='Now SendString' + #0;
sandData := pChar(AData);
......
end;