你可以用WM_COPYDATA消息捎带数据啊,如下:
COPYDATASTRUCT cds;
char msg[100]="Test Message";
cds.cbData =100;
cds.lpData = (LPBYTE)msg;
SendMessage(hDestWnd, WM_COPYDATA, (WPARAM)hSourceWnd, (LPARAM)&cds);绝对OK。
COPYDATASTRUCT cds;
char msg[100]="Test Message";
cds.cbData =100;
cds.lpData = (LPBYTE)msg;
SendMessage(hDestWnd, WM_COPYDATA, (WPARAM)hSourceWnd, (LPARAM)&cds);绝对OK。
UINT uMyStringMsg = RegisterWindowMessage(TEXT(TransportString));在进程内你要传送字符串的地方调用
SendMessage(HWND_BROADCAST, uMyStringMsg, 0, "需传递的字符串");在另一个进程的消息处理函数中
switch (message)
{
.......
case WM_COMMAND:
switch (wParam)
{
default :
if (message == uMyStringMsg)
str = CString(*lParam);
}
}先自定义一个消息,将要传送的字符串放在lParam参数中,以广播的方式或直接送给目标进程,在目标进程中对此自定义消息做处理,取出传来的字符串即可.
如果非要使用SendMessage的话,使用WM_COPYDATA几乎是最简单而可行的方法。如果你不使用WM_COPYDATA的话,请使用共享内存映射文件,否则会执行非法操作。 另外,如果是改变窗口的标题之类的标准文本操作的话(通常使用WM_SETTEXT等),因为Windows会自动在进程之间进行内存拷贝(因为可以使用strlen来得到字符串的大小),所以可以直接使用,就像是在同一个进程内。