程序模拟键盘鼠标操作
用代码模拟键盘鼠标操作,主要用到keybd_event/mouse_event或者SendInput API函数.使用示例如下(附注释):
/*
* 模拟键盘输入,以按窗口键(WIN键)为例
*/
//keybd_event模拟键盘输入示例
::keybd_event( VK_LWIN, 0, 0 , 0 ); //按下WIN键
::keybd_event( VK_LWIN, 0, KEYEVENTF_KEYUP, 0 ); //弹起WIN键
//SendInput模拟键盘输入示例
INPUT keyInput[2];
memset( keyInput, 0, sizeof( keyInput ) );
keyInput[0].type = keyInput[1].type = INPUT_KEYBOARD; //设置为键盘输入
keyInput[0].ki.wVk = keyInput[1].ki.wVk = VK_LWIN; //操作WIN键
keyInput[1].ki.dwFlags = KEYEVENTF_KEYUP; //弹起
::SendInput( _countof( keyInput ), keyInput, sizeof( INPUT ) );
/*
* 模拟鼠标输入,以单击开始菜单为例
* 由于我的机器分辨率为1440*900,因而鼠标位置(0,880)刚好位于开始菜单的位置
*/
//mouse_event模拟鼠标输入示例
::SetCursorPos( 0, 880 ); //将当前鼠标位置设置到开始菜单位置
::mouse_event( MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL ); //模拟左键按下
::mouse_event( MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL ); //模拟左键弹起
//SendInput模拟鼠标输入示例
::SetCursorPos( 0, 880 ); //将当前鼠标位置设置到开始菜单位置
INPUT mouseInput[2];
memset( mouseInput, 0, sizeof( mouseInput ) );
mouseInput[0].type = mouseInput[1].type = INPUT_MOUSE; //设置为鼠标输入
mouseInput[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN; //左键按下
mouseInput[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP; //左键弹起
::SendInput( _countof( mouseInput ), mouseInput, sizeof( INPUT ) );
* 模拟键盘输入,以按窗口键(WIN键)为例
*/
//keybd_event模拟键盘输入示例
::keybd_event( VK_LWIN, 0, 0 , 0 ); //按下WIN键
::keybd_event( VK_LWIN, 0, KEYEVENTF_KEYUP, 0 ); //弹起WIN键
//SendInput模拟键盘输入示例
INPUT keyInput[2];
memset( keyInput, 0, sizeof( keyInput ) );
keyInput[0].type = keyInput[1].type = INPUT_KEYBOARD; //设置为键盘输入
keyInput[0].ki.wVk = keyInput[1].ki.wVk = VK_LWIN; //操作WIN键
keyInput[1].ki.dwFlags = KEYEVENTF_KEYUP; //弹起
::SendInput( _countof( keyInput ), keyInput, sizeof( INPUT ) );
/*
* 模拟鼠标输入,以单击开始菜单为例
* 由于我的机器分辨率为1440*900,因而鼠标位置(0,880)刚好位于开始菜单的位置
*/
//mouse_event模拟鼠标输入示例
::SetCursorPos( 0, 880 ); //将当前鼠标位置设置到开始菜单位置
::mouse_event( MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL ); //模拟左键按下
::mouse_event( MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL ); //模拟左键弹起
//SendInput模拟鼠标输入示例
::SetCursorPos( 0, 880 ); //将当前鼠标位置设置到开始菜单位置
INPUT mouseInput[2];
memset( mouseInput, 0, sizeof( mouseInput ) );
mouseInput[0].type = mouseInput[1].type = INPUT_MOUSE; //设置为鼠标输入
mouseInput[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN; //左键按下
mouseInput[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP; //左键弹起
::SendInput( _countof( mouseInput ), mouseInput, sizeof( INPUT ) );
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现