求 SendMessage 对 ComboBox 控件操作时。 ComboBox 响应 Click事件的方法。

2024-11-27 20:57:40
推荐回答(4个)
回答1:

ComboBox 响应 Click事件的方法如下,同样适用于第三方的程序,且为后台操作:
SendMessage Hwd, CB_SHOWDROPDOWN, 1, 0 '展开ComboBox列表框
SendMessage Hwd, CB_SETCURSEL, Index, 0 '指向指定记录号
SendMessage Hwd, WM_SETFOCUS, 0&, 0& '选中按钮
Sleep 100
SendMessage Hwd, WM_KEYDOWN, vbKeyReturn, 0& '模拟按下指定键
Sleep 100
SendMessage Hwd, WM_KEYUP, vbKeyReturn, 0&
注:有关声明及变量取值略,请自行完善。

回答2:

CB_SETCURSEL可以改变选择项,但不能触发事件
应发送CBN_SELCHANGE消息以触发Onchange事件(一般是在OnChange处理,不是指文字change,是当前选中项change,跟能不能输入没啥关系)
SendMessage(hwnd, WM_COMMAND, CBN_SELCHANGE * 65536 + Combo.hwnd, Combo.hwnd)
hwnd:combox所在窗体句柄
Combo.hwnd:combobox句柄

另:VB调用SendMessage会有各种奇怪问题,经常不成功,试试别的语言吧。

回答3:

我发现按键也会触发click事件,一下代码对于vb的combobox是能触发click事件的,你试试你那个第三方控件吧:
Private Sub Command1_Click()
SendMessage Combo1.hwnd, CB_SETCURSEL, 2, 0
Combo1.SetFocus
SendKeys "{UP}"
SendKeys "{DOWN}", True
End Sub

回答4:

路过看看。
你不贴详细代码,我们也只能猜测是怎么回事儿。combobox控件是你的第三方程序的子窗口的一个控件。很难直接获取的这个控件的句柄。是不是获取的句柄不对?对的话应该可以向这个控件发送指令的。
我以前做过类似的,用自己做的程序自动操作飞信客户端,通过飞信发免费短信。原理是这样的,或许对你有帮助。先用findwindow函数获取第三方程序的主窗口,再用Spy++工具,侦测他的子窗口和控件的句柄。获取的控件句柄后,我的所有发送SendMessage 都是可行的。就是方法麻烦点。
HWND FindWindow   (   LPCSTR lpClassName,   LPCSTR lpWindowName   );