试图通过发送消息到一个button控件来模拟鼠标点击,遇到了点小麻烦,一直没有成功。该控件如图:
一开始,我是按照之前点击button控件的情况来处理,先是用FindWindowEx()查找到该控件的句柄,通过句柄和GetDlgCtrlID()函数来获取此button控件的ID,得到句柄和I控件D后,就可以对此控件发送消息了,代码如下:
hBtn = ::FindWindowEx(hWnd, NULL, NULL, _T("无边距打印")); //通过控件的标题来查找句柄
IDn = ::GetDlgCtrlID(hBtn);
::SendNotifyMessage(hWnd, WM_COMMAND, MAKELONG(IDn, BN_CLICKED), (long)hBtn);
这段代码没有生效,但是当我把上面代码替换成该窗口中的其他Button控件,如OK按钮,却是可以成功点击到的。
难道”无边距打印“那个控件不是Button类型?但显然不对,因为在spy++中明显能看到这个控件是一个Button。我又试了PostMessage(),SendMessage()等各种消息发送函数,也试了MK_LBUTTON等鼠标点击消息,但都以失败告终。不过我想,这种前面有个打勾的框框和一般的button外观看起来就差异很大,也许Button会有不同的类型。于是我在VS的toolbox里面找了一下,找到了这种前面有个小框框的控件,原来它的名字叫做CheckBox。在MSDN搜索了一下,看到了这个:
-
BS_3STATE Same as a check box, except that the box can be dimmed as well as checked. The dimmed state typically is used to show that a check box has been disabled.
-
BS_AUTO3STATE Same as a three-state check box, except that the box changes its state when the user selects it.
-
BS_AUTOCHECKBOX Same as a check box, except that a check mark appears in the check bo