首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过hwnd使用SendMessage传递WM_COMMAND?

如何通过hwnd使用SendMessage传递WM_COMMAND?
EN

Stack Overflow用户
提问于 2021-08-11 08:16:12
回答 1查看 212关注 0票数 0

我在Spy++的一个按钮事件中得到了一个WM_COMMAND,看起来是这样的:

代码语言:javascript
运行
复制
<000116> 001B0A02 S WM_NOTIFY idCtrl:133978 pnmh:0019F9A0
<000117> 001B0A02 R WM_NOTIFY
<000118> 001B0A02 S WM_COMMAND wNotifyCode:0000 wID:2 hwndCtl:00020B5A
<000119> 001B0A02 R WM_COMMAND
<000120> 001B0A02 S WM_NOTIFY idCtrl:133978 pnmh:0019F9BC
<000121> 001B0A02 R WM_NOTIFY

然后我尝试用SendMessage重做WM_COMMAND

什么都没发生。我使用了AHK脚本来确认,结果是一样的。

当我使用SendMessage()时,Spy++得到了这样的结果:

代码语言:javascript
运行
复制
<000423> 001B0A02 S WM_COMMAND wNotifyCode:0000 wID:2 hwndCtl:00000014
<000424> 001B0A02 R WM_COMMAND

我也让lParam = 0,然后它工作,但不像我预期的那样,另一个菜单项打开。

代码语言:javascript
运行
复制
<000001> 001B0A02 S WM_COMMAND wNotifyCode:0 (sent from a menu) wID:2

那么我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 08:40:38

要模拟按钮单击的WM_COMMAND,需要将按钮的ID和BN_CLICKED通知代码(组合)作为wParam参数发送给SendMessage(),并将按钮的句柄(HWND)作为lParam发送。

如果hDlg是对话框窗口的句柄,IDC_MYBUTTON是按钮的资源ID,则调用将如下所示:

代码语言:javascript
运行
复制
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_MYBUTTON, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, IDC_MYBUTTON));

碰巧的是,BN_CLICKED通知代码的值为0,因此Windows值将只是控件ID;在您的示例中,该值似乎是wParam --Windows值用于“取消”按钮。在您的代码中,问题似乎是lParam参数的无效窗口句柄。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68738343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档