我想发送一条记录,现在只有一个字符串,但我会添加更多的变量。这是我第一次使用记录,所以这可能是一个愚蠢的问题。但是,为什么这个工程:SendMessage(WM_COPYDATA)+ Record + String
type
TDataPipe = record
WindowTitle: String[255];
end;
var
Data: TDataPipe;
copyDataStruct : TCopyDataStruct;
begin
Data.WindowTitle:= String(PChar(HookedMessage.lParam));
copyDataStruct.dwData := 0;
copyDataStruct.cbData := SizeOf(Data);
copyDataStruct.lpData := @Data;
SendMessage(FindWindow('TForm1', nil), WM_COPYDATA, Integer(hInstance), Integer(@copyDataStruct));
end;
接收方:
type
TDataPipe = record
WindowTitle: String[255];
end;
procedure TForm1.WMCopyData(var Msg: TWMCopyData);
var
sampleRecord : TDataPipe;
begin
sampleRecord.WindowTitle:= TDataPipe(Msg.CopyDataStruct.lpData^).WindowTitle;
Memo1.Lines.Add(sampleRecord.WindowTitle);
end;
为什么如果在记录,我用:
WindowTitle: String; //removed the fixed size
,并在发送方使用:
Data.WindowTitle:= PChar(HookedMessage.lParam); //removed String()
它根本不去?
我得到的访问冲突/应用程序冻结...
的情况是:在发送端是使用SetWindowsHookEx函数迷上一个DLL,接收端一个简单的EXE,它加载/被叫和SetWindowsHookEx ...
很好的答案!再次感谢您,始终提供完整而翔实的答案。 – LessStress