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()函数 

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()函数 

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()函数

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 KEYBDINPUTSendInputWM_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语言 在程序中打开网页,模拟鼠标点击、键盘输入相关推荐

  1. python鼠标点击位置_python鼠标点击位置 Python3怎么模拟鼠标点击?

    Python3怎么模拟鼠标点击? Python3怎么模拟鼠标点击?最好简单一点的方法 import win32api,win32condef click(x,y): win32api.SetCurso ...

  2. 获取窗口句柄模拟鼠标点击

    一.任务要求. 需要我们编写一个程序能够自动的进行某些鼠标点击的操作.比如某个客户端,我们利用程序,可以自动点击操作. 二.需求分析. 为了实现这种要求,我们必须首先获得需要操作窗口的句柄.其次是点击 ...

  3. CTreeCtrl::SelectItem 光标 模拟鼠标点击

    CTreeCtrl::SelectItem 光标 模拟鼠标点击 (2010-12-02 17:37:14) 转载▼ 标签: selectitem 光标 模拟鼠标 分类: C /VC/WM/MFC 我想 ...

  4. 在WPF程序中打开网页:使用代理服务器并可进行JS交互

    本项目环境:使用VS2010(C#)编写的WPF程序,通过CefSharp在程序的窗体中打开网页.需要能够实现网页后台JS代码中调用的方法,从网页接收数据,并能返回数据给网页.运行程序的电脑不允许上网 ...

  5. Windows10系统Python语言利用Pywin32模块模拟鼠标点击

    Python模块pywin32包装了几乎所有的Windows API,可以方便地直接调用,非常方便. 几个步骤: 1. 检测小弹窗是否弹出: 2. 确定小弹窗中"确定"按钮的位置: ...

  6. php 模拟鼠标点击,Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例)...

    Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例) 环境 python3 依赖 PyAutoGUI 简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动 ...

  7. WINCE下模拟鼠标点击,移动

    最近进行一个车载项目, 碰到这样的需求: 通过串口接收鼠标的按下/弹起和坐标消息, 在WINCE下模拟鼠标消息.经过努力, 得出了两个方案: 1. 使用广播发送鼠标消息 2. 使用mouse_even ...

  8. Windows下C/C++模拟鼠标点击,PC端没有鼠标设备也能够获取鼠标坐标、移动鼠标坐标、模拟鼠标点击事件,方法一 亲测有效

    ------- [ 转载请保留 ] ------- 作者:西_瓜_瓜 博客:https://blog.csdn.net/xi_gua_gua/article/details/105773298 --- ...

  9. Qt实现Linux下模拟点击界面,如何利用QT实现模拟鼠标点击?

    QT入门,windows开发入门选手. 我想利用QT实现一个模拟鼠标点击的功能(Windows平台),具体来说是这样的:首先获取某个特定名称窗口的句柄,然后再模拟单击这个窗口的特定位置,并且要求窗口可 ...

最新文章

  1. SAP HANA要改变什么?
  2. zabbix php 5.6 安装配置,CentOS 5.6下Zabbix 1.8.5 服务端安装部署
  3. HTTP MIME Types
  4. 疯狂Java讲义(十一)---- 初始化块
  5. C++内存汇编逆向安全全集
  6. ssa/ass字幕格式全解析
  7. 易优超级字典生成器 v3.35 下载
  8. 金仕达程序化交易平台初步设计
  9. 聊聊跨端技术的本质与现状
  10. 【收集】巴厘岛自助游攻略
  11. emoji-mart或者emoji-picker-react实现一个类似于微信聊天的在线发送表情,再加一个带源码的纯js实现,emoji图片本地加载
  12. 【JAVA】 容纳对象 数组
  13. 【html+js+jquery简单表单验证和删查】
  14. how to learning english
  15. C# 语言的高级应用
  16. 安装Markdownpad2后出现的错误(This view has crashed)解决
  17. 电脑安装不了python3.50_Anaconda3 2.4和python 3.5安装错误(未找到过程项;Windows 10)...
  18. 03 汽车以太网如何影响ECU和传感器设计
  19. PythonML-Day02: k-近邻、朴素贝叶斯、决策树、随机森林、交叉验证、网格搜索
  20. netscaler添加普通账户

热门文章

  1. html好看的渐变效果,CSS3实现渐变/立体/扁平的漂亮按钮
  2. WordPress批量添加、修改、删除自定义字段的sql命令
  3. 关于HTML知识点的小总结
  4. 【请求第三方 url 异常】Illegal character in scheme name at index x (已解决)
  5. 电子邮件签名档 HTML 手写时的折腾(附 原创工具)
  6. 高等代数-三阶特征根、特征向量求解详细过程
  7. X264代码走读二(intra_refresh实现)
  8. CSDN高校俱乐部2012年秋季巡讲安排及讲师介绍
  9. 2021年制冷与空调设备安装修理复审考试及制冷与空调设备安装修理作业考试题库
  10. 网络购书挑战书业传统营销模式