1、簡述html
記--使用C語言 打開指定網頁,並模擬鼠標點擊、鍵盤輸入。實現半自動填寫帳號密碼,並登陸網站(固然如今的大部分網站都有驗證碼,或有檢測"非人爲"操做,以防止惡意註冊、登陸)。web
例子打包:連接: https://pan.baidu.com/s/1eStV0lAcmr8kmEA0n3LRcg 提取碼: 7kvj chrome
2、效果 (程序填寫帳號密碼,實現半自動登陸)shell
3、工程結構windows
4、源文件api
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、總結編輯器
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’ 或 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
出處:https://blog.csdn.net/nanfeibuyi/article/details/85119726