C#模擬鼠標、鍵盤操做

C語言 在程序中打開網頁,模擬鼠標點擊、鍵盤輸入

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

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’
 
或  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

相關文章
相關標籤/搜索