C#模拟鼠标、键盘操作
C语言 在程序中打开网页,模拟鼠标点击、键盘输入
一、简述
记--使用C语言 打开指定网页,并模拟鼠标点击、键盘输入。实现半自动填写账号密码,并登录网站(当然现在的大部分网站都有验证码,或有检测"非人为"操作,以防止恶意注册、登录)。
例子打包:链接: https://pan.baidu.com/s/1eStV0lAcmr8kmEA0n3LRcg 提取码: 7kvj
二、效果 (程序填写账号密码,实现半自动登录)
三、工程结构
四、源文件
main.c文件
#include <stdio.h> #include <stdlib.h> #include <Windows.h> //ShellExecuteA()//打开某个网址:website (使用默认浏览器) void open_web(char *website) {ShellExecuteA(0,"open", website,0,0,1); }//模拟鼠标点击 (x,y)是要点击的位置 void click(int x, int y) {//将鼠标光标移动到 指定的位置 例子中屏幕分辨率1600x900 在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE, x*65535/1600, y*65535/900, 0, 0);Sleep(50);//稍微延时50ms mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//鼠标左键按下 mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//鼠标左键抬起}//模拟键盘输入 keybd_event(要按下的字符,0,动作,0);动作为0是按下,动作为2是抬起 void input() {char user[]="1234567890123";//账号 char pwd[]="1234567890";//密码 click(823,392); //点击"用户名输入框"的位置 int i;//输入账号 for(i=0;i<sizeof(user);i++){keybd_event(user[i],0,0,0);keybd_event(user[i],0,2,0);Sleep(30); }//tab键 对应的编号是0x09 让密码输入框 获取焦点 keybd_event(0x09,0,0,0);//按下 keybd_event(0x09,0,2,0); //松开 Sleep(30); //输入密码 for(i=0;i<sizeof(pwd);i++){keybd_event(pwd[i],0,0,0);keybd_event(pwd[i],0,2,0);Sleep(30);}//模拟按下tab键 让登录按钮获取焦点 click(824,530);//点击"登录按钮" Sleep(30); }//将chrome.exe进程杀掉,在例子中尚未使用 void close() {system("taskkill /f /im chrome.exe"); }int main(int argc,char *argv[]) {open_web("https://www.baidu.com/");//打开某个网址 Sleep(4000);//延时4秒,等待网页打开完毕,再进行其它操作。根据实际情况(浏览器打开速度,网速) click(1454, 126);//点击"登录"(1454,126) Sleep(150);click(712,658);//点击"用户名登录"Sleep(150);input();//模拟鼠标动作,键盘输入 return 0; }
五、总结
5.1 ShellExecute()函数
功能 | 对指定的文件执行操作。(可以实现调用第三方程序) | |
头文件 | Windows.h | |
原型 | HINSTANCE ShellExecuteA( HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd ); | |
参数 | hwnd | 父窗口的句柄。如果操作与窗口不关联,则此值可以为空 |
lpOperation |
指定要执行的操作(谓词) edit:启动编辑器并打开文档进行编辑。要打开的文档文件由lpFile指定 explore:浏览由参数lpFile指定的文件夹 find:搜索由参数lpDirectory指定的目录 open:打开lpFile参数指定的项。可以是文件或文件夹,或者是网页。 print:打印由lpFile指定的文件。 NULL:默认操作。如果没有,则使用“open”动词。如果“open”不可用,系统将使用注册表中列出的第一个谓词。 |
|
lpFile | 操作对象(文件等。。。) | |
lpParameters | 如果lpFile指定可执行文件,则此参数是指向以-结束的字符串的指针,该字符串指定要传递给应用程序的参数。此字符串的格式由要调用的谓词决定。如果lpFile指定文档文件,则lpParameters应为空。 | |
lpDirectory | 指定操作的默认(工作)目录。如果此值为NULL,则使用当前工作目录。 | |
nShowCmd |
指定打开应用程序时如何显示的标志。如果lpFile指定文档文件,则只需将标志传递给关联的应用程序。应该由应用程序来决定如何处理它。这些值是定义的。 SW_HIDE:隐藏 SW_MAXIMIZE :最大化 SW_MINIMIZE :最小化 。。。 |
|
返回值 | 如果函数成功,则返回大于32的值。如果函数失败,它将返回一个错误值 | |
备注 |
更多详见:https://docs.microsoft.com/en-us/windows/desktop/api/Shellapi/nf-shellapi-shellexecutea |
打开指定网页:
ShellExecute(0, "open", "https://www.baidu.com/",0, 0, 1);//最后的参数是控制最大化、最小化,隐藏
打开某个可执行文件:
#include <stdio.h> #include <windows.h> //ShellExecute() int main(int argc, char *argv[]) {ShellExecute(0, "open", "C:\\Users\\newuser\\Desktop\\串口助手.exe",0, 0, 1);//最后的参数是控制最大化、最小化printf("Hello World!\n");return 0; }
5.2 mouse_event()函数
功能 | 合成鼠标运动和按钮单击。(模拟鼠标动作) | ||
头文件 | Windows.h | ||
原型 |
void mouse_event( DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, ULONG_PTR dwExtraInfo ); |
||
参数 | dwFlags |
控制鼠标运动和按钮点击的各个方面(鼠标动作类型) MOUSEEVENTF_LEFTDOWN:鼠标左键按下 MOUSEEVENTF_LEFTUP:鼠标左键抬起 MOUSEEVENTF_RIGHTDOWN:鼠标右键按下 MOUSEEVENTF_RIGHTUP:鼠标右键抬起 MOUSEEVENTF_WHEEL:鼠标滚轮,数值由参数dwData指定 MOUSEEVENTF_ABSOLUTE:鼠标光标位置,由参数dx,dy指定。 |
|
dx | x坐标 | ||
dy | y坐标 | ||
dwData | 滚轮滚动值 | ||
dwExtraInfo | 与鼠标事件关联的附加值。调用GetMessageExtraInfo()以获取此额外信息 | ||
返回值 | 无返回值 | ||
备注 |
详见:https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-mouse_event |
示例一:将鼠标移动到指定(绝对)位置(x,y)
//例子中屏幕分辨率1600x900 在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元 mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE, x*65535/1600, y*65535/900, 0, 0);
示例二:按下鼠标左键,然后抬起
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//鼠标左键按下 mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//鼠标左键抬起
5.3 keybd_event()函数
功能 | 合成击键。(模拟键盘输入) | ||
头文件 | Windows.h | ||
原型 | void keybd_event( BYTE bVk, BYTE bScan, DWORD dwFlags, ULONG_PTR dwExtraInfo ); | ||
参数 | bVk | 虚拟按键代码编号 | |
bScan | 按键的的硬件扫描代码 | ||
dwFlags |
控制功能操作的各个方面 KEYEVENTF_EXTENDEDKEY:如果指定,扫描代码前面有一个前缀字节,其值为0xE0 KEYEVENTF_KEYUP:如果指定,则抬起按键。 |
||
dwExtraInfo | 按键动作的附加信息 | ||
返回值 | 无返回值 | ||
备注 |
详见:https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-keybd_event |
示例三:模拟按下数字按键"9": (‘9’的和0x39都表示数字按键9)
keybd_event('9',0,0,0);//按下按键 ‘9’ keybd_event('9',0,2,0);//抬起按键 ‘9’或 0x39keybd_event(0x39,0,0,0);//按下按键 ‘9’ keybd_event(0x39,0,2,0);//抬起按键 ‘9’
虚拟按键 代码列表:https://docs.microsoft.com/zh-cn/windows/desktop/inputdev/virtual-key-codes
出处:https://blog.csdn.net/nanfeibuyi/article/details/85119726
C#模拟鼠标、键盘操作相关推荐
- C# 模拟 鼠标 键盘操作
C# 模拟 鼠标 键盘操作 转载于:https://www.cnblogs.com/macT/p/10208222.html
- python截图工具和模拟鼠标键盘_python PyAutoGUI 模拟鼠标键盘操作和截屏功能
简介 一款跨平台/无依赖的自动化测试工具,目测只能控制鼠标/键盘/获取屏幕尺寸/弹出消息框/截屏. 安装 pip install pyautogui 鼠标键盘控制 >>> impor ...
- 模拟鼠标键盘操作,含硬件模拟技术。[转]
模拟鼠标键盘操作,含硬件模拟技术. 键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作.但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就 ...
- PyMouse模拟鼠标键盘操作
PyMouse模拟鼠标键盘操作 使用PyMouse实现模拟鼠标键盘操作 -----解决方案1 1)安装[pyMouse]( https://pypi.org/project/PyMouse/) 2)安 ...
- 效率提升:使用AppleScript模拟鼠标键盘操作制作自动化工具
文章目录 前言 AppleScript的实践应用 实践:还原修饰键默认设置 AppleScript基础知识 1.基本模块 语法 变量和属性 类型转换 运算符 List(数组) Record(键值对) ...
- selenium webdriver模拟鼠标键盘操作
在测试使用Selenium webdriver测试WEB系统的时候,用到了模拟鼠标.键盘的一些输入操作. 1.鼠标的左键点击.双击.拖拽.右键点击等: 2.键盘的回车.回退.空格.ctrl.alt.s ...
- python模拟按键包_今天玩点啥:利用python之PyUserInput实现模拟鼠标键盘操作,抢红包?聊天?自动下载?...
一.PyUserInput安装 python3.5的PyMouse和PyKeyboard模块都集成到了PyUserInput模块中.在python3.5中,直接安装PyUserInput模块即可 Py ...
- 模拟鼠标键盘操作,含硬件模拟技术。
键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作.但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样 ...
- 模拟鼠标键盘操作,含硬件模拟技术
键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作.但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样 ...
- python模拟鼠标键盘操作_人生苦短我用Python——模拟鼠标点击和键盘输入的操作...
通过Python可以模拟鼠标点击和键盘输入的操作,进而可以实现一些比较有趣的功能,例如游戏挂机.自动发消息等. 本文以自动发消息为例,实现该功能,通过该代码可以自动往QQ.微信发送任意内容.首先考虑想 ...
最新文章
- 利用三层交换机实现VLAN的通信实验报告
- 网络和计算机管理制度,网络和计算机使用管理制度
- 机器学习之决策树与随机森林
- Bootstrap3 滚动监听插件的选项
- 什么是数据的表分区(文章附上Server 2005分区实施方案)
- java获取web项目的绝对路径的方法总结
- Linux上查到目前透过FTP进来的使用者
- 07- HTTP协议详解及Fiddler抓包
- 《Adobe Illustrator CC经典教程》—第0课0.2节使用Adobe Creative Cloud进行同步设置
- 基于JAVA教师教学质量评估系统计算机毕业设计源码+数据库+lw文档+系统+部署
- 双目视觉的CALIB_CHECK_COND报错到底是个啥?
- 用java制作扑克牌_java实现简单扑克牌游戏
- 增强For循环以及集合遍历语法糖
- 关于word页眉页码不连续,页脚页码连续的办法
- 【C++】(十五)自定义数据类型——共用体类型、枚举类型
- 蓝牙电话通话机制原理
- 内是不是半包围结构_半包围结构(软笔)
- 用python画佩奇_用python画小猪票佩奇
- ecshop linux,Linux中Ecshop搭建
- (医用耗材管理系统)Spd系统模式概述-盘谷医疗一种医疗精细化管理模式
热门文章
- 互联网业务实战(二)--大数据在头条的应用(离线和实时数据处理)
- Python图形界面开发——PyQt5环境的搭建(史上最详细,保证都能搭建好)
- 流媒体视频网站Go语言实现
- java实现数字金额转换中文大写金额
- 所有计算机病毒只在可执行文件中传染,下列叙述中,正确的是______。A.所有计算机病毒只在可执行文件中传染B.计算机病毒主要通过读写移动...
- 施迈赛安全开关101153919 SE-100 C
- “十四五”城市交通基础设施发展方向及重点分析
- 有7克,2克砝码各一个,天平一只,如何只用这些物品三次将140克的盐分成50、90克各一份?
- 腾讯算法实习岗一面--面试90分钟感觉身体被掏空
- 朴素贝叶斯情感分析评分python_比朴素贝叶斯更优秀的情感分析方法?答案在这里...