转自:(直接负责的源码,可能格式混乱,只是用来防丢失)
https://blog.csdn.net/liu_kan/article/details/83077355
https://blog.csdn.net/nanfeibuyi/article/details/85119726
模拟键盘我们用Keybd_event这个api函数,模拟鼠标按键用mouse_event函数。大家不用担心,在delphi里调用api函数是很方便的事。
先介绍一下Keybd_event函数。Keybd_event能触发一个按键事件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。Keybd_event共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。第二个参数为扫描码,一般不用设置,用0代替就行。第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数一般也是置0即可。用如下代码即可实现模拟按下i键,其中的$49表示i键的虚拟键值:
keybd_event(VK_F11,0,0,0); keybd_event(VK_F11,0,KEYEVENTF_KEYUP,0); …
mouse_event最好配合setcursorpos(x,y)函数一起使用,与Keybd_event类似,mouse_event有五个参数,第一个为选项标志,为MOUSEEVENTF_LEFTDOWN时表示左键按下,为MOUSEEVENTF_LEFTUP表示左键松开,向系统发送相应消息。第二三个参数分别表示x,y相对位置,一般可设为0,0,第四五个参数并不重要,一般也可设为0,0。若要得到Keybd_event和mouse_event函数的更详细的用法,可以查阅msdn或delphi帮助。
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 | 指定要执行的操作(谓词) |
打开指定网页:
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 | 控制鼠标运动和按钮点击的各个方面(鼠标动作类型) |
-
//例子中屏幕分辨率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 | 控制功能操作的各个方面 |
模拟按下数字按键"9": (‘9’的和0x39都表示数字按键9)
-
keybd_event(
'9',
0,
0,
0);
//按下按键 ‘9’
-
keybd_event(
'9',
0,
2,
0);
//抬起按键 ‘9’
-
-
或
0x39
-
-
keybd_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 |