Frage

Wie kann ich erkennen, unabhängig von den Fenstern Mausklicks die Maus in?

Perferabliy in Python, aber wenn jemand es in jedem Langauge erklären kann, könnte ich in der Lage sein, um es herauszufinden.

Ich fand diese auf Microsofts Website: http://msdn.microsoft.com/en-us/ Bibliothek / ms645533 (VS.85) aspx

Aber ich sehe nicht, wie ich erkennen kann, oder die Meldungen abholen aufgeführt.

Versuchte pygame der pygame.mouse.get_pos () Funktion wie folgt:

import pygame
pygame.init()
while True:
    print pygame.mouse.get_pos()

Das gibt nur 0,0. Ich bin nicht vertraut mit pygame, ist etwas fehlt?

In anycase würde ich eine Methode, ohne dass es vorziehen, ein 3rd-Party-Modul zu installieren. (Ausgenommen pywin32 http://sourceforge.net/projects/pywin32/ )

War es hilfreich?

Lösung

Die einzige Möglichkeit, Mausereignisse zu erfassen außerhalb Ihres Programm ist ein Windows-Haken mit SetWindowsHookEx . Die pyHook Modul kapselt die wesentlichen Details. Hier ist ein Beispiel, das die Position von jedem Mausklick gedruckt werden:

import pyHook
import pythoncom

def onclick(event):
    print event.Position
    return True

hm = pyHook.HookManager()
hm.SubscribeMouseAllButtonsDown(onclick)
hm.HookMouse()
pythoncom.PumpMessages()
hm.UnhookMouse()

Sie können das überprüfen example.py Skript, das mit dem Modul für weitere Informationen über das Ereignis Parameter.

installiert

pyHook könnte schwierig sein, in einem reinen Python-Skript zu verwenden, da sie eine aktive Meldung Pumpe erfordert. Aus dem Tutorial

  

Jede Anwendung, die erhalten möchte   Meldungen der globalen Eingabeereignisse   haben eine Windows-Meldung Pumpe muss. Das   einfachste Weg, eine von ihnen zu erhalten ist,   verwenden, um die Methode in der Pumpmessages   Win32-Erweiterungen Paket für Python.   [...] Wenn er gestartet wird, ist dieses Programm sitzt nur   Leerlauf und wartet auf Windows-Ereignisse. Wenn   Sie werden mit einem GUI-Toolkit (z   WxPython) Diese Schleife ist unnötig   da das Toolkit bietet seine eigenen.

Andere Tipps

Ich verwende win32api. Es funktioniert, wenn auf jedem Windows klicken.

# Code to check if left or right mouse buttons were pressed
import win32api
import time

state_left = win32api.GetKeyState(0x01)  # Left button down = 0 or 1. Button up = -127 or -128
state_right = win32api.GetKeyState(0x02)  # Right button down = 0 or 1. Button up = -127 or -128

while True:
    a = win32api.GetKeyState(0x01)
    b = win32api.GetKeyState(0x02)

    if a != state_left:  # Button state changed
        state_left = a
        print(a)
        if a < 0:
            print('Left Button Pressed')
        else:
            print('Left Button Released')

    if b != state_right:  # Button state changed
        state_right = b
        print(b)
        if b < 0:
            print('Right Button Pressed')
        else:
            print('Right Button Released')
    time.sleep(0.001)

Windows-MFC, einschließlich GUI-Programmierung ist, zugänglich mit Python mit dem Python für Erweiterungen von Windows durch Mark Hammond. Ein O'Reilly Buchauszug von Hammonds und Robinson Buch zeigt, wie Maus-Nachrichten an Haken, .eg:

self.HookMessage(self.OnMouseMove,win32con.WM_MOUSEMOVE)

Raw MFC ist nicht einfach oder offensichtlich, aber das Web für Python Suche Beispiele können einige verwendbare Beispiele ergeben.

Es ist schon eine heiße Minute, da diese Frage gestellt wurde, aber ich dachte, dass ich meine Lösung teilen würde: Ich habe nur das Einbaumodul ctypes. (Ich verwende Python 3.3 btw)

import ctypes
import time

def DetectClick(button, watchtime = 5):
    '''Waits watchtime seconds. Returns True on click, False otherwise'''
    if button in (1, '1', 'l', 'L', 'left', 'Left', 'LEFT'):
        bnum = 0x01
    elif button in (2, '2', 'r', 'R', 'right', 'Right', 'RIGHT'):
        bnum = 0x02

    start = time.time()
    while 1:
        if ctypes.windll.user32.GetKeyState(bnum) not in [0, 1]:
            # ^ this returns either 0 or 1 when button is not being held down
            return True
        elif time.time() - start >= watchtime:
            break
        time.sleep(0.001)
    return False

Die Fenster Art und Weise, es zu tun ist, um die WM_LBUTTONDBLCLK Nachricht zu verarbeiten.

Für diese gesendet werden, Ihre Fensterklasse muss mit dem CS_DBLCLKS Klasse Stil geschaffen werden.

Ich fürchte, ich weiß nicht, wie dies in Python bewerben, aber hoffentlich kann es Ihnen einige Hinweise geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top