2011-01-03 13 views
9

मैं चारों ओर देख रहा है, लेकिन मैं जबकि यह कैसे एक के लिए प्रतिक्रिया करने के उदाहरण के लिए आसान है कैसे pyhook उपयोग करने के लिए संयोजन ऐसे के रूप में Ctrl +सी प्रमुख के लिए प्रतिक्रिया करने का एक उदाहरण नहीं मिल सकता है Ctrl या सी अलग-अलग कुंजीपटल।कुंजी संयोजन का जवाब देने के लिए pyhook का उपयोग करना (केवल एक कीस्ट्रोक नहीं)?

बीटीडब्ल्यू, मैं विंडोज एक्सपी पर पायथन 2.6 के बारे में बात कर रहा हूं।

किसी भी मदद की सराहना की।

उत्तर

7

क्या आपने हुकमेनगर से GetKeyState विधि का उपयोग करने का प्रयास किया है? मैं कोड का परीक्षण नहीं किया है, लेकिन यह कुछ इस तरह होना चाहिए:

from pyHook import HookManager 
from pyHook.HookManager import HookConstants 

def OnKeyboardEvent(event): 
    ctrl_pressed = HookManager.GetKeyState(HookConstants.VKeyToID('VK_CONTROL') >> 15) 
    if ctrl_pressed and HookConstant.IDToName(event.keyId) == 'c': 
     # process ctrl-c 

यहाँ further documentation on GetKeyState

+0

यह मुझे पायथन 2.5 में एक वाक्यविन्यास त्रुटि दे रहा है ... – Muhd

+0

आप पांचवीं पंक्ति पर '' 'गायब हैं। – Muhd

+3

और GetKeyState मौजूद प्रतीत नहीं होता है। – Muhd

6

आप को देखने के लिए pyHook क्या रिटर्न निम्नलिखित कोड का उपयोग कर सकते हैं:

import pyHook 
import pygame 

def OnKeyboardEvent(event): 
    print 'MessageName:',event.MessageName 
    print 'Ascii:', repr(event.Ascii), repr(chr(event.Ascii)) 
    print 'Key:', repr(event.Key) 
    print 'KeyID:', repr(event.KeyID) 
    print 'ScanCode:', repr(event.ScanCode) 
    print '---' 

hm = pyHook.HookManager() 
hm.KeyDown = OnKeyboardEvent 
hm.HookKeyboard() 

# initialize pygame and start the game loop 
pygame.init() 
while True: 
    pygame.event.pump() 

इस का उपयोग करते हुए, ऐसा लगता है कि pyHook रिटर्न

c:  Ascii 99, KeyID 67, ScanCode 46 
ctrl: Ascii 0, KeyID 162, ScanCode 29 
ctrl+c: Ascii 3, KeyID 67, ScanCode 46 

(पायथन 2.7.1, विंडोज 7, pyHook 1.5। 1)

+1

हाँ, मैं वास्तव में इस कोड से पहले की कोशिश की है, लेकिन यह भले ही आप उन्हें एक ही समय में नीचे पकड़े हुए हैं प्रत्येक कीस्ट्रोक अलग प्रसंस्करण किया जा रहा है। मुझे नहीं लगता कि कीस्ट्रोक के संयोजन के लिए एक कुंजीकोड है। – reckoner

7

असल Ctrl + C अपने आप Ascii कोड है (जो 3 है)। कुछ इस तरह मेरे लिए काम करता है:

import pyHook,pythoncom 

def OnKeyboardEvent(event): 
    if event.Ascii == 3: 
     print "Hello, you've just pressed ctrl+c!" 
+1

के बिना काम करता है, जबकि यह उत्तर उपयोगी है, मैं इसे ऊपर नहीं उठाऊंगा। यह इस विशेष स्थिति को हल करता है, लेकिन अगर मैं ** शिफ्ट + प्रिंटस्क्रीन ** कैप्चर करना चाहता हूं तो क्या होगा? –

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

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