我在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
复制相似问题