本节将向读者介绍如何使用键盘鼠标操控模拟技术,键盘鼠标操控模拟技术是一种非常实用的技术,可以自动化执行一些重复性的任务,提高工作效率,在Windows系统下,通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的操作。
键盘鼠标的模拟是实现自动化的必备流程,通常我们可以使用keybd_event()
实现对键盘的击键模拟,使用SetCursorPos()
实现对鼠标的模拟,使用两者的配合读者可以很容易的实现对键盘鼠标的控制,本节将依次封装实现,模拟键盘鼠标控制功能,读者可根据自己的实际需求选用不同的函数片段。
12.2.1 模拟键盘按键
模拟按键的核心功能是通过调用keybd_event()
函数实现的,如下是这段代码的完整实现,首先MySetKeyBig()
函数该函数用于设置键盘状态是否为大小写,用户可以传入一个状态值来设置当前输入法大小写模式,MyAnalogKey()
函数用于实现模拟键盘按键,该函数接收一个英文字符串,并自动实现击键操作,代码实现并不复杂,读者可自行测试功能。
#include
#include
using namespace std;
// 设置键盘大小写状态 为TRUE则切换大写状态,否则切换小写状态
VOID MySetKeyBig(BOOL big = FALSE)
{
// 判断键盘CapsLock键是否开启状态,开启状态则为大写,否则为小写
if (GetKeyState(VK_CAPITAL))
{
// 如果当前键盘状态为大写,要求改小写,则模拟按键CapsLock切换状态
if (!big)
{
keybd_event(VK_CAPITAL, NULL, KEYEVENTF_EXTENDEDKEY | 0, NULL);
服务器托管网 keybd_e服务器托管网vent(VK_CAPITAL, NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
}
std::cout 抬起
keybd_event(VK_SPACE, NULL, KEYEVENTF_EXTENDEDKEY | 0, NULL);
keybd_event(VK_SPACE, NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
}
else if (tmp[i] == ',')
{
keybd_event(VK_OEM_COMMA, NULL, KEYEVENTF_EXTENDEDKEY | 0, NULL);
keybd_event(VK_OEM_COMMA, NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
}
else if (tmp[i] >= 'a' && tmp[i] = 'A' && tmp[i] = '0' && tmp[i]
读者可自行编译并运行上述代码片段,将光标移动到记事本中,等待五秒钟,则会依次敲击如下所示的键盘按键;
12.2.2 设置窗体最大化
如下代码实现了设置一个窗体置顶并将该窗体最大化显示的效果,该代码实现原理是通过使用EnumWindows
函数传递一个回调函数,实现对特定窗体的枚举,当找到对应窗体句柄后则将该窗体句柄传递给global_hwnd
全局句柄中,当获取到Google
浏览器句柄之后则通过GetSystemMetrics
函数得到当前全屏窗体的像素比,通过调用SetWindowPos
可将一个窗体设置为置顶显示,最后可调用SendMessage
函数向特定窗体句柄发送最大化消息,使其填充满整个屏幕,代码如下所示;
#include
#include
using namespace std;
HWND global_hwnd = 0;
// 将字符串逆序
char * Reverse(char str[])
{
int n = strlen(str);
int i;
char temp;
for (i = 0; i 线程ID: %-6d --> 进程ID: %-6d --> 名称: %s n", hwnd, ThreadId, ProcessId, WindowName);
// 首先逆序输出字符串,然后比较前13个字符
if (strncmp(Reverse(WindowName), "emorhC elgooG", 13) == 0)
{
global_hwnd = hwnd;
}
return TRUE;
}
int main(int argc, char* argv[])
{
// 枚举Google浏览器句柄
EnumWindows(lpEnumFunc, 0);
std::cout
读者可自行编译并运行上述程序,此时会将谷歌浏览器全屏并置顶显示,输出信息如下图所示;
12.2.3 读取与设置剪辑板
读取与设置剪辑版可用于对数据的拷贝与设置,调用setClipbar
函数并传入一段字符串可实现将传入字符串拷贝到剪辑版的功能,使用getClipBoardValue
则可实现读取剪辑版中的内容到程序内。
#include
#include
#include
// 将字符串写入到剪切板
BOOL setClipbar(const char* data)
{
int contentSize = strlen(data) + 1;
HGLOBAL hMemory; LPTSTR lpMemory;
// 打开剪切板
if (!OpenClipboard(NULL))
{
return FALSE;
}
// 清空剪切板
if (!EmptyClipboard())
{
return FALSE;
}
// 对剪切板分配内存
if (!(hMemory = GlobalAlloc(GMEM_MOVEABLE, contentSize)))
{
return FALSE;
}
// 锁定内存区域
if (!(lpMemory = (LPTSTR)GlobalLock(hMemory)))
{
return FALSE;
}
// 复制数据到内存区域,解除内存锁定
memcpy_s(lpMemory, contentSize, data, contentSize);
GlobalUnlock(hMemory);
// 设置剪切板数据
if (!SetClipboardData(CF_TEXT, hMemory))
{
return FALSE;
}
// std::cout %d", i);
// 设置到剪辑版
BOOL set_flag = setClipbar(MyData);
if (set_flag == TRUE)
{
// std::cout
运行上述程序,依次实现填充字符串并设置到剪辑版,最后再通过getClipBoardValue
函数从剪辑版内读出数据,如下图所示;
本文作者: 王瑞
本文链接: https://www.lyshark.com/post/95b1ad6c.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 国内某头部理财服务提供商基于白鲸调度系统建立统一调度和监控运维
导读:国内某头部理财服务提供商成立于 2019 年服务器托管网,是股份制银行中首批获准筹建、首家获准开业、首家成立的银行理财子公司。自 2004 年推出国内首支人民币理财产品以来,通过投资模式的不断创新和投资管理能力的持续提升,引领国内银行业理财市场。该企业每…