向另一个进程发送WM_CHAR消息,它怎么收不到?

strawer 2008-11-20 07:39:45
void CTestDlg::OnButton1()
{
HWND hook_hwnd=::GetNextWindow(m_hWnd,GW_HWNDNEXT);
::SendMessage(hook_hwnd,WM_CHAR,0x48,0);
}
我想点击button后,向下面的记事本发送一个WM_CHAR消息,为什么收不到?
HWND hook_hwnd=::GetNextWindow(m_hWnd,GW_HWNDNEXT);
DWORD id;
::GetWindowThreadProcessId(hook_hwnd,&id);
::PostThreadMessage(id,WM_CHAR,0x48,1);
这样发送也收不到。谁能解决这个问题
...全文
268 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
strawer 2008-11-21
  • 打赏
  • 举报
回复
我测试了,2楼是对的。我再总结一下我的测试情况:
1用FindWindow获得记事本的句柄,用GetWindow不行。
2用FindWindowEx获得编辑区域的句柄,这里用child=::GetWindow(hook_hwnd,GW_CHILD)也是可行的。
3用PostMessage发送消息,这里用SendMessage不行。
谢谢各位,结贴了!!
wltg2001 2008-11-20
  • 打赏
  • 举报
回复
HWND hook_hwnd=::GetNextWindow(m_hWnd,GW_HWNDNEXT);
==================
楼主没有弄清楚这个API的作用,它并不是用来找子窗口的,它是用来找在同一个Z order下的下一个窗口的,应该用FindWindow来找记事本的句柄,然后还是用这个API来找子窗口,然后再能发送。
paerxiushi 2008-11-20
  • 打赏
  • 举报
回复
::PostThreadMessage(id,WM_CHAR,0x48,1);
这个函数发送的消息不与窗体相关联,因此记事本程序无法在窗体过程中接收到这个消息。推荐使用SendMessage来发送消息
lsldd 2008-11-20
  • 打赏
  • 举报
回复
你这样确定找到了记事本窗口吗?
先发送WM_CLOSE消息,看能不能关闭记事本,能说明句柄正确,消息发送成功
然后再测试char消息
ilovedrv 2008-11-20
  • 打赏
  • 举报
回复

HWND child;
HWND p=::FindWindow(NULL,"1.txt - 记事本");//找到父窗口
if(p!=NULL) //如果找到的话在找子窗口,子窗口也就是记事本中对应的客户区 ////就是编辑文本的区域
{
child=::FindWindowEx(p,NULL,"Edit",NULL);
if(child!=NULL)
{
::PostMessage(child,WM_CHAR,0x41,0);
}
}

etz2008 2008-11-20
  • 打赏
  • 举报
回复
你可以用这个FindWindow()
HWND FindWindow(
LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);

HWND hook_hwnd=::FindWindow("Notepad",NULL);
::SendMessage(hook_hwnd,WM_CHAR,0x48,0);

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧