要使用 WM_COPYDATA 跨进程传递窗口句柄, 可以按照以下步骤进行:
- 在发送方进程中创建一个
COPYDATASTRUCT结构体,并将要发送的窗口句柄存储在其中。代码如下:
C++
// hwnd: 要发送的窗口句柄
COPYDATASTRUCT cds;
cds.dwData = 0; // 消息id,可以自定义
cds.cbData = sizeof(HWND);
cds.lpData = &hwnd;
- 使用
SendMessage()函数将COPYDATASTRUCT结构体发送到接收方进程。接收方进程需要安装一个消息处理函数来从消息队列中读取并处理此消息。代码如下:
C++
// hwndTarget: 接收方窗口句柄
UINT msg = WM_COPYDATA;
WPARAM wParam = (WPARAM) hwndTarget;
LPARAM lParam = (LPARAM) &cds;
SendMessage(hwndTarget, msg, wParam, lParam);
- 在接收方进程中,通过重载窗口过程函数来获取
WM_COPYDATA消息并提取传输的数据。代码如下:
C++
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COPYDATA:
PCOPYDATASTRUCT pcds = (PCOPYDATASTRUCT) lParam;
if (pcds->cbData == sizeof(HWND))
{
HWND hwndSender = *(HWND*) pcds->lpData;
// 处理传递的窗口句柄
}
break;
// 其他消息处理
}
}
在以上代码中,我们首先检查传递的数据大小是否为窗口句柄的大小,以确保正确提取数据。然后我们可以使用传递的窗口句柄来执行任何需要与该窗口交互的操作。
通过创建COPYDATASTRUCT结构体存储窗口句柄,并利用SendMessage函数发送到目标进程,接收方进程通过重载WndProc函数处理WM_COPYDATA消息,从而实现窗口句柄的跨进程传递。
1344

被折叠的 条评论
为什么被折叠?



