2012-04-04 6 views
5

मैं स्क्रीन पर कहीं भी माउस क्लिक का पता लगाने के लिए pyhooks का उपयोग करने की कोशिश कर रहा हूँ। समस्या यह है कि मैं इसे केवल PumpMessages() के साथ काम करने के लिए प्राप्त कर सकता हूं। मैं इसे एक थोड़ी देर के लूप के अंदर संचालित करना चाहता हूं जिसे मैंने बनाया है। क्या इसे पूरा करने का कोई तरीका है/इसे पंप मैसेज की आवश्यकता क्यों है?पंप मैसेज() के बजाय pyhook के साथ मैं अपने लूप का उपयोग कैसे करूं?

def onclick(event): 
    print 'Mouse click!' 
    return True 


hm = pyHook.HookManager() 

hm.MouseLeftDown = onclick 

hm.HookMouse() 
pythoncom.PumpMessages() 
hm.UnhookMouse() 

उपरोक्त एकमात्र तरीका है जिसे मैं इसे चलाने के लिए प्राप्त कर सकता हूं। मैं एक स्मार्ट आदमी नहीं हूँ:

मैं कुछ इस तरह पूरा करने के लिए कोशिश कर रहा हूँ:

sTime = time.time() 

def onclick(event): 
    global sTime 
    print 'Time between clicks equals: %i' % time.time() - stime 
    sTime = time.time() 
    return True 

hm.MouseLeftDown = OnClick 

while True: 

    hm.HookMouse() 

संपादित। परिदृश्य में थोड़ी देर के पाश की कोई आवश्यकता नहीं ..

साई ..

उत्तर

3

From the pyhook tutorial है:

कि वैश्विक इनपुट की सूचनाएं प्राप्त करने की इच्छा किसी भी आवेदन घटनाओं एक Windows संदेश पंप होना आवश्यक है ।

हालांकि, यह आपके कोड को काम करने से रोकना आवश्यक नहीं है। आप जो भी करने की कोशिश कर रहे हैं उसे पोस्ट क्यों नहीं करते हैं, और हम आपके कोड के संदर्भ में संदेश पंप का उपयोग करने का एक तरीका ढूंढ सकते हैं।

एक तरह से आप अपनी समस्या को हल करने के लिए सक्षम हो सकता है PostQuitMessages माध्यम से होता है (मूल समाधान here)

import ctypes 
ctypes.windll.user32.PostQuitMessage(0) 
13

बस भविष्य में संदर्भ के लिए, आप जबकि पाश अंदर pythoncom.PumpWaitingMessages() उपयोग कर सकते हैं, क्योंकि यह निष्पादन को लॉक नहीं करता । कुछ इस तरह:

while True: 
    # your code here 
    pythoncom.PumpWaitingMessages() 
+3

सही उत्तर है, और कुछ भी नहीं – Muppet

+3

मपेट के साथ सहमत हैं। यह सही जवाब होना चाहिए। इस के लिए धन्यवाद, मैंने इस सरल समाधान को खोजने से पहले थोड़ी देर की खोज की, – SeanDav

+0

लेकिन क्या यह सीपीयू को छेड़छाड़ नहीं कर रहा है क्योंकि यह गैर-अवरुद्ध है? –

संबंधित मुद्दे

 संबंधित मुद्दे