以下代码将一些文本设置为打开的记事本窗口.我的问题是它如何安全地工作?
int _tmain(int argc, _TCHAR* argv[])
{
HWND hwnd = FindWindow(_T("Notepad"),_T("Untitled - Notepad"));
if(hwnd!=NULL)
{
wchar_t* pString = L"hi";
HWND hwndEdit = FindWindowEx(hwnd,NULL,_T("Edit"),NULL);
SendMessage(hwndEdit,WM_SETTEXT,0,(LPARAM)pString);
}
return 0;
Run Code Online (Sandbox Code Playgroud)
}
指针"pString"存在于当前进程空间的虚拟内存中,在notepad.exe的上下文中可能不是有效的内存地址.但奇怪的是它确实正确设置了文本,这意味着不仅指针在notepad.exe上下文但它也指向正确的字符串.这是怎么回事?
这是否意味着我们可以有效地使用SendMessage作为IPC机制?
对于某些消息,系统会自动将数据从一个进程封送到另一个进程 - 这WM_SETTEXT是获得此特殊处理的消息之一.
如果你真的想要,你当然可以将它用作双向数据传输的IPC机制(发送使用WM_SETTEXT和接收WM_GETTEXT),但我怀疑它是否有效.并且已经有专门为IPC设计的消息 - WM_COPYDATA.