古詩詞大全網 - 四字成語 - C++,怎麽讓程序模擬用戶輸入指令,並自行回車以執行該指令(不是寫個輸出函數只做樣子)?

C++,怎麽讓程序模擬用戶輸入指令,並自行回車以執行該指令(不是寫個輸出函數只做樣子)?

可以用WinApi實現,需要包含windows.h。

需要兩個模塊,壹個是檢測回車鍵的模塊,壹個是模擬輸入指令的模塊。

檢測回車鍵,有兩個函數可以用: GetKeyState和GetAsyncKeyState,兩個函數的參數都是虛擬鍵碼,虛擬鍵碼可以在網站上查詢:虛擬鍵碼 | Microsoft Learn

兩個函數的返回值相同:返回壹個short型的數,short型是16位有符號的數據類型,如果要查詢的鍵被按下,返回值最高位被置1,則這個數表示負數,所以可以用<0或>0來判斷。

兩個函數的區別在於,GetKeyState返回的不是鍵盤真實狀態,而是程序獲得的鍵盤消息。簡單地說,如果程序沒有獲得焦點,則無法獲得按鍵信息,返回的是沒有按鍵的狀態。而GetAsyncKeyState返回的是按鍵的真實狀態。

將GetAsyncKeyState放入循環,每次循環檢測有沒有按下回車鍵,如果按下則模擬輸入指令;每次循環後Sleep壹段時間,節約系統資源。

模擬輸入指令同樣有兩種方法:向指定窗口發送按鍵信息sendMessage和模擬按鍵

由於我測試的軟件無法用第壹個方法,我只介紹第二個方法。

模擬按鍵就像真實按鍵壹樣,只有目標窗口獲得焦點時,按鍵信息才會被目標窗口接收到。因此,壹方面,程序不能獲得焦點,只能用GetAsyncKeyState函數;另壹方面,我們需要讓目標窗口獲得焦點。

讓目標窗口獲得焦點。最簡單的方法是手動操作,點擊壹下。當然也可以用FindWindow函數,或者由程序啟動目標程序並獲得句柄,然後調用winapi使其獲得焦點。由於需求是按回車鍵開始模擬按鍵,手動操作即可,這裏不多贅述。

模擬按鍵壹般使用函數Keybd_event。函數有4個參數,壹般情況下,第2、4個參數置0即可,第1個參數是按鍵的虛擬鍵碼,第3個參數是按鍵狀態,0是按下,KEYEVENTF_KEYUP是擡起。註意按下和擡起之間建議Sleep幾毫秒,否則目標窗口可能無法獲取到按鍵信息。

模擬鼠標點擊壹般使用mouse_event,壹般與SetCursorPos(x,y)函數壹起使用。與Keybd_event類似,mouse_event有5個參數。第1個為dwFlags,如下圖。第2、3個參數分別表示鼠標的相對位置,壹般置0。第4個參數是dwData,滾輪移動數量,正值向前,負值向後。第5個參數壹般置0。

使用方法與Keybd_event函數相似。用SetCursorPos(x,y)函數將鼠標光標移到指定位置(距離屏幕左邊x,距離屏幕上邊y),用mouse_event模擬鼠標點擊。也可以先用mouse_event鼠標按下後,再用SetCursorPos(x,y)模擬鼠標拖動。最好中間也Sleep幾毫秒。

請點擊輸入圖片描述

GetKeyState_百度百科

GetAsyncKeyState_百度百科