SendMessage作为IPC?

use*_*807 0 c++ winapi

以下代码将一些文本设置为打开的记事本窗口.我的问题是它如何安全地工作?

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机制?

Jon*_*ter 6

对于某些消息,系统会自动将数据从一个进程封送到另一个进程 - 这WM_SETTEXT是获得此特殊处理的消息之一.

如果你真的想要,你当然可以将它用作双向数据传输的IPC机制(发送使用WM_SETTEXT和接收WM_GETTEXT),但我怀疑它是否有效.并且已经有专门为IPC设计的消息 - WM_COPYDATA.