2017-07-25 7 views
3

Je fais des tests en utilisant Pyautogui sur les jeux. Mais dans les jeux qui modifient votre curseur et les jeux en plein écran, aucune des méthodes ne fonctionne.Pyautogui ne fonctionne pas dans la fenêtre du jeu

J'essaie maintenant sur Ragnarok Online.

J'ai essayé:

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

Aucun d'entre eux fonctionne quand dans la fenêtre de jeu. Ils fonctionnent bien dehors.

Existe-t-il un moyen de le faire fonctionner? Ou une autre bibliothèque que je pourrais utiliser? Par ailleurs, win32api.SetCursorPos((x,y)) ne fonctionne pas non plus.

Merci.

Répondre

3

Le code source de 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) 

et c'est un Win32API qui a appelé SendInput interne.

La fonction SendInput insère des événements d'entrée dans la même file d'attente en tant que dispositif matériel mais les événements sont marqués avec un drapeau LLMHF_INJECTED qui peut être détectée par des crochets. Pour éviter ce drapeau, vous devez probablement écrire un pilote personnalisé.

Il y a beaucoup de réponses et questions sur la façon de simuler le clavier dans le jeu DirectX dont certains disent qu'il pourrait et certains pourraient dire not.and vous pouvez essayer an answer which say could

mais à mon avis, doit utiliser jeu directx interface pour communiquer avec le matériel pour la vitesse, le SendInput n'insérer des événements dans le message queue.and que vous souhaitez utiliser SendInput ou Mouse_Event .Donc comme le dit,

Il n'y a aucun problème qui ne peut être résolu avec un autre niveau o f indirection

ajoutons une file d'attente de messages pour le jeu.

comment? VMware.Il est fait.