您的位置 首页 > 娱乐休闲

VC|获取句柄并模拟键盘或鼠标事件

模拟键盘鼠标事件有两种方法:

SendMessage or PostMessage

keybd_event,mouse_event

前者更强大,指定hwnd后可以后台发送,而后者只能够发送前台信息,也就是必须窗口最前。

对于keybd_event,mouse_event,可以用一个简单的实例说明一下:

SetCursorPos(x,y);

mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);

mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

keybd_event(k,0,0,0);

keybd_event(k,0,KEYEVENTF_KEYUP,0);

模拟按钮单击事件

如有以下对话框:

编辑框关连了一个CString变量m-var。按钮定义了一个单击事件:

void CMyDlg::OnButton1()

{

UpdateData(1);

m_var = "simulation of Mouse single-click event!";

UpdateData(0);

}

在对话框类函数的OnInitDialog事件加入如下代码:

BOOL CMyDlg::OnInitDialog()

{

CDialog::OnInitDialog();

HWND hWnddlg = AfxGetMainWnd()->m_hWnd; //主窗口句柄

HWND hwnd2=::GetDlgItem(hWnddlg,IDC_BUTTON1);//子窗口(或控件)句柄

::SendMessage(hwnd2,WM_LBUTTONDOWN,0,0);

::SendMessage(hwnd2,WM_LBUTTONUP,0,0);

……

}

对话框运行后,即可在编辑框中输入以下文字:simulation of Mouse single-click event!

自动向打开的记事本文件中输入一个字母

//需要先打开记事本

int main()

{

HWND hWnd = ::FindWindowW(L"Notepad",NULL); //搜索记事本程序主窗口句柄

HWND hWndc = ::GetWindow(hWnd,GW_CHILD); //获得记事本客户区句柄(该窗口是记事本主窗口的子窗口,即那个白色的可编辑区域) 。

if(hWndc) //如果获得了该句柄

::SendMessage(hWndc,WM_CHAR,'keyboard input!',NULL);//发送按键消息

system("pause");

return 0;

}

上面控制台程序运行后,即可在打开的词本中添加"keyboard input!"文本。

-End-

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何在对话框中捕获键盘组合按键消息”边界阅读