我在Spy++的一个按钮事件中得到了一个WM_COMMAND,看起来是这样的:
<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++得到了这样的结果:
<000423> 001B0A02 S WM_COMMAND wNotifyCode:0000 wID:2 hwndCtl:00000014
<000424> 001B0A02 R WM_COMMAND
我也让lParam = 0
,然后它工作,但不像我预期的那样,另一个菜单项打开。
<000001> 001B0A02 S WM_COMMAND wNotifyCode:0 (sent from a menu) wID:2
那么我该怎么做呢?
发布于 2021-08-11 08:40:38
要模拟按钮单击的WM_COMMAND
,需要将按钮的ID和BN_CLICKED
通知代码(组合)作为wParam
参数发送给SendMessage()
,并将按钮的句柄(HWND
)作为lParam
发送。
如果hDlg
是对话框窗口的句柄,IDC_MYBUTTON
是按钮的资源ID,则调用将如下所示:
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(IDC_MYBUTTON, BN_CLICKED), (LPARAM)GetDlgItem(hDlg, IDC_MYBUTTON));
碰巧的是,BN_CLICKED
通知代码的值为0
,因此Windows值将只是控件ID;在您的示例中,该值似乎是wParam
--Windows值用于“取消”按钮。在您的代码中,问题似乎是lParam
参数的无效窗口句柄。
https://stackoverflow.com/questions/68738343
复制相似问题