ctypes.windll.user32.mouse_event(3, 0, 0, 0,0)

Estoy jugando con el ratón posiciones y se tropezó con esta línea, que por lo que entiendo que emula un clic del ratón. ¿Alguien tiene documentación para líneas similares (tales como el derecho-haga clic y así sucesivamente)?

OriginalEl autor rectangletangle | 2010-11-24

2 Comentarios

  1. 10

    Tengo una pequeña clase que envuelve a la gestión del ratón.

    import win32gui, win32api, win32con, ctypes
    class Mouse:
    """It simulates the mouse"""
    MOUSEEVENTF_MOVE = 0x0001 # mouse move 
    MOUSEEVENTF_LEFTDOWN = 0x0002 # left button down 
    MOUSEEVENTF_LEFTUP = 0x0004 # left button up 
    MOUSEEVENTF_RIGHTDOWN = 0x0008 # right button down 
    MOUSEEVENTF_RIGHTUP = 0x0010 # right button up 
    MOUSEEVENTF_MIDDLEDOWN = 0x0020 # middle button down 
    MOUSEEVENTF_MIDDLEUP = 0x0040 # middle button up 
    MOUSEEVENTF_WHEEL = 0x0800 # wheel button rolled 
    MOUSEEVENTF_ABSOLUTE = 0x8000 # absolute move 
    SM_CXSCREEN = 0
    SM_CYSCREEN = 1
    def _do_event(self, flags, x_pos, y_pos, data, extra_info):
    """generate a mouse event"""
    x_calc = 65536L * x_pos / ctypes.windll.user32.GetSystemMetrics(self.SM_CXSCREEN) + 1
    y_calc = 65536L * y_pos / ctypes.windll.user32.GetSystemMetrics(self.SM_CYSCREEN) + 1
    return ctypes.windll.user32.mouse_event(flags, x_calc, y_calc, data, extra_info)
    def _get_button_value(self, button_name, button_up=False):
    """convert the name of the button into the corresponding value"""
    buttons = 0
    if button_name.find("right") >= 0:
    buttons = self.MOUSEEVENTF_RIGHTDOWN
    if button_name.find("left") >= 0:
    buttons = buttons + self.MOUSEEVENTF_LEFTDOWN
    if button_name.find("middle") >= 0:
    buttons = buttons + self.MOUSEEVENTF_MIDDLEDOWN
    if button_up:
    buttons = buttons << 1
    return buttons
    def move_mouse(self, pos):
    """move the mouse to the specified coordinates"""
    (x, y) = pos
    old_pos = self.get_position()
    x =  x if (x != -1) else old_pos[0]
    y =  y if (y != -1) else old_pos[1]    
    self._do_event(self.MOUSEEVENTF_MOVE + self.MOUSEEVENTF_ABSOLUTE, x, y, 0, 0)
    def press_button(self, pos=(-1, -1), button_name="left", button_up=False):
    """push a button of the mouse"""
    self.move_mouse(pos)
    self._do_event(self.get_button_value(button_name, button_up), 0, 0, 0, 0)
    def click(self, pos=(-1, -1), button_name= "left"):
    """Click at the specified placed"""
    self.move_mouse(pos)
    self._do_event(self._get_button_value(button_name, False)+self._get_button_value(button_name, True), 0, 0, 0, 0)
    def double_click (self, pos=(-1, -1), button_name="left"):
    """Double click at the specifed placed"""
    for i in xrange(2): 
    self.click(pos, button_name)
    def get_position(self):
    """get mouse position"""
    return win32api.GetCursorPos()

    He aquí un pequeño ejemplo:

    import time
    mouse = Mouse()
    mouse.click((20, 10), "left")
    time.sleep(2.0)
    mouse.click((100, 100), "right")

    Espero te sirva de ayuda

    Si sólo está utilizando win32api para la consulta de la posición del ratón, usted puede hacer que en ctypes.
    La parte de _do_event no funciona, con 65536L de devolver un error.
    Probablemente sea demasiado tarde para ayudar, pero tuve que deshacerme de el L y luego emitir x_calc y y_calc a enteros. Luego funcionó 😀

    OriginalEl autor luc

  2. 4

    Esto es de http://blog.lazynice.net/?p=63.

    El script detecta el windows la inactividad cada minuto. Si la inactividad es superior a 5 minutos, simplemente envía un evento de ratón que mover el ratón un poco, por lo que el protector de pantalla puede pensar que se trata de la entrada de usuario, a continuación, reiniciar el temporizador. Acaba de establecer la inactividad duración menor que el protector de pantalla de tiempo de espera, a continuación, ejecútelo!

    from ctypes import Structure, windll, c_uint, sizeof, byref
    import time
    class LASTINPUTINFO(Structure):
    _fields_ = [('cbSize', c_uint), ('dwTime', c_uint)]
    def get_idle_duration():
    lastInputInfo = LASTINPUTINFO()
    lastInputInfo.cbSize = sizeof(lastInputInfo)
    windll.user32.GetLastInputInfo(byref(lastInputInfo)) 
    millis = windll.kernel32.GetTickCount()  lastInputInfo.dwTime
    return millis / 1000.0
    while True:
    d = get_idle_duration()
    if d > 60 * 5:
    windll.user32.mouse_event(1, 1, 1, 0, 0)
    time.sleep(60)
    … o deshabilitar el protector de pantalla…
    esto es mucho mejor que deshabilitar el protector de pantalla lol

    OriginalEl autor techseq

Dejar respuesta

Please enter your comment!
Please enter your name here