2017-07-25 45 views
3

我在Pyautogui遊戲上做了一些測試。 但在那些改變你的光標和全屏遊戲的遊戲中,沒有任何方法可行。Pyautogui不能在遊戲窗口中工作

我現在正在嘗試Ragnarok Online。

我想:

pyautogui.click() 
pyautogui.moveTo(x, y, time) 
pyautogui.moveRel(x, y) 

他們沒有工作在遊戲窗口內時。他們在室外工作良好。

有沒有辦法讓它工作?或者我可以使用另一個庫?

順便說一下,win32api.SetCursorPos((x,y))也不起作用。

謝謝。

回答

3

Pyautogui

def _sendMouseEvent(ev, x, y, dwData=0): 
    assert x != None and y != None, 'x and y cannot be set to None' 
    width, height = _size() 
    convertedX = 65536 * x // width + 1 
    convertedY = 65536 * y // height + 1 
    ctypes.windll.user32.mouse_event(ev, ctypes.c_long(convertedX), ctypes.c_long(convertedY), dwData, 0) 

的源代碼,這是一個其中的Win32API稱爲SendInput內部。

SendInput功能將插入輸入事件到同一隊列爲硬件設備,但這些事件被標記與可由鉤來檢測一個LLMHF_INJECTED標誌。爲了避免這個標誌,你可能必須寫一個自定義驅動程序。

有很多答案,以及如何在DirectX遊戲模擬鍵盤的問題,其中一些可能說有些人說可能not.and,你可以嘗試這個an answer which say could

但在我看來,遊戲必須使用DirectX接口與硬件的速度通信,那麼SendInput只能插入事件到消息queue.and要使用SendInputMouse_Event。所以俗話說,

沒有什麼問題不能得到解決另一級o f間接

讓我們爲遊戲添加一個消息隊列。

怎麼樣?VMware.It完成了。