1

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

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;

}

指针“pString”存在于当前进程空间的虚拟内存中,这在notepad.exe的上下文中可能不是有效的内存地址。但奇怪的是它确实正确设置了文本,这意味着不仅指针在notepad.exe 上下文,但它也指向正确的字符串。这是怎么回事?

这是否意味着我们可以有效地使用 SendMessage 作为 IPC 机制?

4

2 回答 2

7

对于某些消息,系统会自动将数据从一个进程编组到另一个进程——WM_SETTEXT这是获得这种特殊处理的消息之一。

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

于 2013-04-02T10:07:04.503 回答
0

我们可以使用 SendMessage

是的!

有效地

窗口的设置文本由操作系统处理。在这种情况下,Windows 会自动封送数据。

于 2013-04-02T10:09:16.277 回答