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
虚拟按键代码 | Description |
---|---|
VK_LBUTTON 0x01 |
Left mouse button (鼠标左键) |
VK_RBUTTON 0x02 |
Right mouse button (鼠标右键) |
VK_CANCEL 0x03 |
Control-break processing |
VK_MBUTTON 0x04 |
Middle mouse button (three-button mouse) |
VK_XBUTTON1 0x05 |
X1 mouse button |
VK_XBUTTON2 0x06 |
X2 mouse button |
- 0x07 |
Undefined |
VK_BACK 0x08 |
BACKSPACE key(退格键) |
VK_TAB 0x09 |
TAB key (Tab键) |
- 0x0A-0B |
Reserved |
VK_CLEAR 0x0C |
CLEAR key |
VK_RETURN 0x0D |
ENTER key(回车键) |
- 0x0E-0F |
Undefined |
VK_SHIFT 0x10 |
SHIFT key |
VK_CONTROL 0x11 |
CTRL key |
VK_MENU 0x12 |
ALT key |
VK_PAUSE 0x13 |
PAUSE key |
VK_CAPITAL 0x14 |
CAPS LOCK key |
VK_KANA 0x15 |
IME Kana mode |
VK_HANGUEL 0x15 |
IME Hanguel mode (maintained for compatibility; use VK_HANGUL) |
VK_HANGUL 0x15 |
IME Hangul mode |
- 0x16 |
Undefined |
VK_JUNJA 0x17 |
IME Junja mode |
VK_FINAL 0x18 |
IME final mode |
VK_HANJA 0x19 |
IME Hanja mode |
VK_KANJI 0x19 |
IME Kanji mode |
- 0x1A |
Undefined |
VK_ESCAPE 0x1B |
ESC key |
VK_CONVERT 0x1C |
IME convert |
VK_NONCONVERT 0x1D |
IME nonconvert |
VK_ACCEPT 0x1E |
IME accept |
VK_MODECHANGE 0x1F |
IME mode change request |
VK_SPACE 0x20 |
SPACEBAR |
VK_PRIOR 0x21 |
PAGE UP key |
VK_NEXT 0x22 |
PAGE DOWN key |
VK_END 0x23 |
END key |
VK_HOME 0x24 |
HOME key |
VK_LEFT 0x25 |
LEFT ARROW key |
VK_UP 0x26 |
UP ARROW key |
VK_RIGHT 0x27 |
RIGHT ARROW key |
VK_DOWN 0x28 |
DOWN ARROW key |
VK_SELECT 0x29 |
SELECT key |
VK_PRINT 0x2A |
PRINT key |
VK_EXECUTE 0x2B |
EXECUTE key |
VK_SNAPSHOT 0x2C |
PRINT SCREEN key |
VK_INSERT 0x2D |
INS key |
VK_DELETE 0x2E |
DEL key |
VK_HELP 0x2F |
HELP key |
0x30 |
0 key (数字1) |
0x31 |
1 key |
0x32 |
2 key |
0x33 |
3 key |
0x34 |
4 key |
0x35 |
5 key |
0x36 |
6 key |
0x37 |
7 key |
0x38 |
8 key |
0x39 |
9 key |
- 0x3A-40 |
Undefined |
0x41 |
A key |
0x42 |
B key |
0x43 |
C key |
0x44 |
D key |
0x45 |
E key |
0x46 |
F key |
0x47 |
G key |
0x48 |
H key |
0x49 |
I key |
0x4A |
J key |
0x4B |
K key |
0x4C |
L key |
0x4D |
M key |
0x4E |
N key |
0x4F |
O key |
0x50 |
P key |
0x51 |
Q key |
0x52 |
R key |
0x53 |
S key |
0x54 |
T key |
0x55 |
U key |
0x56 |
V key |
0x57 |
W key |
0x58 |
X key |
0x59 |
Y key |
0x5A |
Z key |
VK_LWIN 0x5B |
Left Windows key (Natural keyboard) |
VK_RWIN 0x5C |
Right Windows key (Natural keyboard) |
VK_APPS 0x5D |
Applications key (Natural keyboard) |
- 0x5E |
Reserved |
VK_SLEEP 0x5F |
Computer Sleep key |
VK_NUMPAD0 0x60 |
Numeric keypad 0 key |
VK_NUMPAD1 0x61 |
Numeric keypad 1 key |
VK_NUMPAD2 0x62 |
Numeric keypad 2 key |
VK_NUMPAD3 0x63 |
Numeric keypad 3 key |
VK_NUMPAD4 0x64 |
Numeric keypad 4 key |
VK_NUMPAD5 0x65 |
Numeric keypad 5 key |
VK_NUMPAD6 0x66 |
Numeric keypad 6 key |
VK_NUMPAD7 0x67 |
Numeric keypad 7 key |
VK_NUMPAD8 0x68 |
Numeric keypad 8 key |
VK_NUMPAD9 0x69 |
Numeric keypad 9 key |
VK_MULTIPLY 0x6A |
Multiply key |
VK_ADD 0x6B |
Add key |
VK_SEPARATOR 0x6C |
Separator key |
VK_SUBTRACT 0x6D |
Subtract key |
VK_DECIMAL 0x6E |
Decimal key |
VK_DIVIDE 0x6F |
Divide key |
VK_F1 0x70 |
F1 key |
VK_F2 0x71 |
F2 key |
VK_F3 0x72 |
F3 key |
VK_F4 0x73 |
F4 key |
VK_F5 0x74 |
F5 key |
VK_F6 0x75 |
F6 key |
VK_F7 0x76 |
F7 key |
VK_F8 0x77 |
F8 key |
VK_F9 0x78 |
F9 key |
VK_F10 0x79 |
F10 key |
VK_F11 0x7A |
F11 key |
VK_F12 0x7B |
F12 key |
VK_F13 0x7C |
F13 key |
VK_F14 0x7D |
F14 key |
VK_F15 0x7E |
F15 key |
VK_F16 0x7F |
F16 key |
VK_F17 0x80 |
F17 key |
VK_F18 0x81 |
F18 key |
VK_F19 0x82 |
F19 key |
VK_F20 0x83 |
F20 key |
VK_F21 0x84 |
F21 key |
VK_F22 0x85 |
F22 key |
VK_F23 0x86 |
F23 key |
VK_F24 0x87 |
F24 key |
- 0x88-8F |
Unassigned |
VK_NUMLOCK 0x90 |
NUM LOCK key |
VK_SCROLL 0x91 |
SCROLL LOCK key |
0x92-96 |
OEM specific |
- 0x97-9F |
Unassigned |
VK_LSHIFT 0xA0 |
Left SHIFT key |
VK_RSHIFT 0xA1 |
Right SHIFT key |
VK_LCONTROL 0xA2 |
Left CONTROL key |
VK_RCONTROL 0xA3 |
Right CONTROL key |
VK_LMENU 0xA4 |
Left MENU key |
VK_RMENU 0xA5 |
Right MENU key |
VK_BROWSER_BACK 0xA6 |
Browser Back key |
VK_BROWSER_FORWARD 0xA7 |
Browser Forward key |
VK_BROWSER_REFRESH 0xA8 |
Browser Refresh key |
VK_BROWSER_STOP 0xA9 |
Browser Stop key |
VK_BROWSER_SEARCH 0xAA |
Browser Search key |
VK_BROWSER_FAVORITES 0xAB |
Browser Favorites key |
VK_BROWSER_HOME 0xAC |
Browser Start and Home key |
VK_VOLUME_MUTE 0xAD |
Volume Mute key |
VK_VOLUME_DOWN 0xAE |
Volume Down key |
VK_VOLUME_UP 0xAF |
Volume Up key |
VK_MEDIA_NEXT_TRACK 0xB0 |
Next Track key |
VK_MEDIA_PREV_TRACK 0xB1 |
Previous Track key |
VK_MEDIA_STOP 0xB2 |
Stop Media key |
VK_MEDIA_PLAY_PAUSE 0xB3 |
Play/Pause Media key |
VK_LAUNCH_MAIL 0xB4 |
Start Mail key |
VK_LAUNCH_MEDIA_SELECT 0xB5 |
Select Media key |
VK_LAUNCH_APP1 0xB6 |
Start Application 1 key |
VK_LAUNCH_APP2 0xB7 |
Start Application 2 key |
- 0xB8-B9 |
Reserved |
VK_OEM_1 0xBA |
Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ';:' key |
VK_OEM_PLUS 0xBB |
For any country/region, the '+' key |
VK_OEM_COMMA 0xBC |
For any country/region, the ',' key |
VK_OEM_MINUS 0xBD |
For any country/region, the '-' key |
VK_OEM_PERIOD 0xBE |
For any country/region, the '.' key |
VK_OEM_2 0xBF |
Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '/?' key |
VK_OEM_3 0xC0 |
Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '`~' key |
- 0xC1-D7 |
Reserved |
- 0xD8-DA |
Unassigned |
VK_OEM_4 0xDB |
Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '[{' key |
VK_OEM_5 0xDC |
Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the '\|' key |
VK_OEM_6 0xDD |
Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the ']}' key |
VK_OEM_7 0xDE |
Used for miscellaneous characters; it can vary by keyboard. For the US standard keyboard, the 'single-quote/double-quote' key |
VK_OEM_8 0xDF |
Used for miscellaneous characters; it can vary by keyboard. |
- 0xE0 |
Reserved |
0xE1 |
OEM specific |
VK_OEM_102 0xE2 |
Either the angle bracket key or the backslash key on the RT 102-key keyboard |
0xE3-E4 |
OEM specific |
VK_PROCESSKEY 0xE5 |
IME PROCESS key |
0xE6 |
OEM specific |
VK_PACKET 0xE7 |
Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP |
- 0xE8 |
Unassigned |
0xE9-F5 |
OEM specific |
VK_ATTN 0xF6 |
Attn key |
VK_CRSEL 0xF7 |
CrSel key |
VK_EXSEL 0xF8 |
ExSel key |
VK_EREOF 0xF9 |
Erase EOF key |
VK_PLAY 0xFA |
Play key |
VK_ZOOM 0xFB |
Zoom key |
VK_NONAME 0xFC |
Reserved |
VK_PA1 0xFD |
PA1 key |
VK_OEM_CLEAR 0xFE |
Clear key |
C语言 在程序中打开网页,模拟鼠标点击、键盘输入相关推荐
- python鼠标点击位置_python鼠标点击位置 Python3怎么模拟鼠标点击?
Python3怎么模拟鼠标点击? Python3怎么模拟鼠标点击?最好简单一点的方法 import win32api,win32condef click(x,y): win32api.SetCurso ...
- 获取窗口句柄模拟鼠标点击
一.任务要求. 需要我们编写一个程序能够自动的进行某些鼠标点击的操作.比如某个客户端,我们利用程序,可以自动点击操作. 二.需求分析. 为了实现这种要求,我们必须首先获得需要操作窗口的句柄.其次是点击 ...
- CTreeCtrl::SelectItem 光标 模拟鼠标点击
CTreeCtrl::SelectItem 光标 模拟鼠标点击 (2010-12-02 17:37:14) 转载▼ 标签: selectitem 光标 模拟鼠标 分类: C /VC/WM/MFC 我想 ...
- 在WPF程序中打开网页:使用代理服务器并可进行JS交互
本项目环境:使用VS2010(C#)编写的WPF程序,通过CefSharp在程序的窗体中打开网页.需要能够实现网页后台JS代码中调用的方法,从网页接收数据,并能返回数据给网页.运行程序的电脑不允许上网 ...
- Windows10系统Python语言利用Pywin32模块模拟鼠标点击
Python模块pywin32包装了几乎所有的Windows API,可以方便地直接调用,非常方便. 几个步骤: 1. 检测小弹窗是否弹出: 2. 确定小弹窗中"确定"按钮的位置: ...
- php 模拟鼠标点击,Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例)...
Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例) 环境 python3 依赖 PyAutoGUI 简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动 ...
- WINCE下模拟鼠标点击,移动
最近进行一个车载项目, 碰到这样的需求: 通过串口接收鼠标的按下/弹起和坐标消息, 在WINCE下模拟鼠标消息.经过努力, 得出了两个方案: 1. 使用广播发送鼠标消息 2. 使用mouse_even ...
- Windows下C/C++模拟鼠标点击,PC端没有鼠标设备也能够获取鼠标坐标、移动鼠标坐标、模拟鼠标点击事件,方法一 亲测有效
------- [ 转载请保留 ] ------- 作者:西_瓜_瓜 博客:https://blog.csdn.net/xi_gua_gua/article/details/105773298 --- ...
- Qt实现Linux下模拟点击界面,如何利用QT实现模拟鼠标点击?
QT入门,windows开发入门选手. 我想利用QT实现一个模拟鼠标点击的功能(Windows平台),具体来说是这样的:首先获取某个特定名称窗口的句柄,然后再模拟单击这个窗口的特定位置,并且要求窗口可 ...
最新文章
- SAP HANA要改变什么?
- zabbix php 5.6 安装配置,CentOS 5.6下Zabbix 1.8.5 服务端安装部署
- HTTP MIME Types
- 疯狂Java讲义(十一)---- 初始化块
- C++内存汇编逆向安全全集
- ssa/ass字幕格式全解析
- 易优超级字典生成器 v3.35 下载
- 金仕达程序化交易平台初步设计
- 聊聊跨端技术的本质与现状
- 【收集】巴厘岛自助游攻略
- emoji-mart或者emoji-picker-react实现一个类似于微信聊天的在线发送表情,再加一个带源码的纯js实现,emoji图片本地加载
- 【JAVA】 容纳对象 数组
- 【html+js+jquery简单表单验证和删查】
- how to learning english
- C# 语言的高级应用
- 安装Markdownpad2后出现的错误(This view has crashed)解决
- 电脑安装不了python3.50_Anaconda3 2.4和python 3.5安装错误(未找到过程项;Windows 10)...
- 03 汽车以太网如何影响ECU和传感器设计
- PythonML-Day02: k-近邻、朴素贝叶斯、决策树、随机森林、交叉验证、网格搜索
- netscaler添加普通账户
热门文章
- html好看的渐变效果,CSS3实现渐变/立体/扁平的漂亮按钮
- WordPress批量添加、修改、删除自定义字段的sql命令
- 关于HTML知识点的小总结
- 【请求第三方 url 异常】Illegal character in scheme name at index x (已解决)
- 电子邮件签名档 HTML 手写时的折腾(附 原创工具)
- 高等代数-三阶特征根、特征向量求解详细过程
- X264代码走读二(intra_refresh实现)
- CSDN高校俱乐部2012年秋季巡讲安排及讲师介绍
- 2021年制冷与空调设备安装修理复审考试及制冷与空调设备安装修理作业考试题库
- 网络购书挑战书业传统营销模式