2017-11-21 51 views
6

मैं की तरहctypes में कार्य

नीचे

ctypes.windll.user32.keybd_event ('0x24' विशिष्ट घटना कोड नंबर के साथ कुंजीपटल घटना के लिए अपने अनुकूलित घटना बाध्य करने के लिए अजगर का उपयोग करने के प्रयास कर रहे हैं का उपयोग कर अजगर में महत्वपूर्ण घटना बाध्यकारी , 0,2,0)

लेकिन आप पहले से ही पता

windll

के रूप में

लाइब्रेरी केवल विंडोज ओएस पर काम किया। मैं लिनक्स मशीनों में ऐसा कुछ कैसे कर सकता हूं? मैंने पढ़ा है के बारे में

CDLL ('libc.so.6')

लेकिन मैं इसे समझ नहीं सकता बाहर अगर यह पुस्तकालय उपयोगी है या नहीं?

वर्चुअल कुंजी कोड का उपयोग कर पायथन के साथ ओएस स्तर में कीप्रेस श्रोता सेट करने का एक और तरीका है?

+0

आप इस तरह हासिल करने की क्या कोशिश कर रहे हैं? –

+0

मैं केवल अपना कुंजी ईवेंट नंबर का उपयोग करके अपना खुद का ईवेंट श्रोता सेट करने का प्रयास करता हूं। कुछ चीजें नीचे दी गई हैं: कीबोर्ड_लिस्टनर ('0x24', custom_event_listener()) – Rome

+0

एक मौजूदा समाधान pykeylogger है। – georgexsh

उत्तर

4

लिनक्स इनपुट उपप्रणाली तीन भागों से बना है: चालक परत, इनपुट उपप्रणाली कोर परत और घटना प्रसंस्करण परत। और कीबोर्ड या अन्य इनपुट इवेंट सभी का वर्णन input_event है।

कोड और प्रकार नीचे

उपयोग अपने टर्मिनल में python filename.py | grep "keyboard"

#!/usr/bin/env python 
#coding: utf-8 
import os 

deviceFilePath = '/sys/class/input/' 

def showDevice(): 
    os.chdir(deviceFilePath) 
    for i in os.listdir(os.getcwd()): 
     namePath = deviceFilePath + i + '/device/name' 
     if os.path.isfile(namePath): 
      print "Name: %s Device: %s" % (i, file(namePath).read()) 

if __name__ == '__main__': 
    showDevice() 

आप Name: event1 Device: AT Translated Set 2 keyboard मिलना चाहिए। तो का उपयोग

#!/usr/bin/env python 
#coding: utf-8 
from evdev import InputDevice 
from select import select 

def detectInputKey(): 
    dev = InputDevice('/dev/input/event1') 

    while True: 
     select([dev], [], []) 
     for event in dev.read(): 
      print "code:%s value:%s" % (event.code, event.value) 


if __name__ == '__main__': 
    detectInputKey() 

evdev एक पैकेज लिनक्स में सामान्य इनपुट घटना इंटरफ़ेस के लिए बाइंडिंग प्रदान करता है। Evdev इंटरफ़ेस कर्नेल में जेनरेट की गई घटनाओं को सीधे पारदर्शी उपकरणों के माध्यम से उपयोगकर्ता स्तर पर पास करने के उद्देश्य से कार्य करता है जो आम तौर पर /dev/input/.and select में स्थित हैं select है।

+0

बहुत बहुत धन्यवाद। यह कोड मुझे पता लगाने में मदद करता है कि मेरे डिवाइस का चालक सही ढंग से स्थापित करने में विफल रहा है और अब एक आकर्षण की तरह काम करता है। बहुत बहुत धन्यवाद – Rome