2017-11-21 53 views
6

Tôi đã cố gắng sử dụng python để ràng buộc sự kiện tùy chỉnh của tôi để sự kiện bàn phím với mã số sự kiện cụ thể như dưới đâyràng buộc sự kiện quan trọng trong python sử dụng ctypes hoạt

ctypes.windll.user32.keybd_event ('0x24' , 0,2,0)

nhưng như bạn đã biết

windll

thư viện chỉ hoạt động trên Windows OS. Tôi có thể làm điều gì đó như thế này trong các máy Linux? Tôi đọc về

CDLL ('libc.so.6')

nhưng tôi không thể hình dung nó ra nếu thư viện này là hữu ích hay không?

có cách nào khác để đặt trình nghe nhấn phím ở cấp hệ điều hành với python bằng mã khóa ảo không?

+0

bạn đang cố gắng đạt được điều gì? –

+0

Tôi đang cố gắng đặt trình xử lý sự kiện của riêng mình chỉ sử dụng số mã khóa .some như sau: keyboard_listener ('0x24', custom_event_listener()) – Rome

+0

có một giải pháp pykeylogger hiện có. – georgexsh

Trả lời

4

Hệ thống con đầu vào Linux bao gồm ba phần: lớp trình điều khiển, lớp lõi hệ thống con đầu vào và lớp xử lý sự kiện. và bàn phím hoặc sự kiện đầu vào khác được mô tả bởi input_event.

sử dụng dưới mã và gõ vào Terminal 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() 

bạn sẽ nhận được Name: event1 Device: AT Translated Set 2 keyboard. sau đó sử dụng

#!/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 là một gói phần mềm cung cấp bindings vào giao diện sự kiện đầu vào chung trong Linux. Giao diện evdev phục vụ mục đích truyền các sự kiện được tạo ra trong hạt nhân trực tiếp tới không gian người dùng thông qua các thiết bị ký tự thường nằm trong /dev/input/.and selectselect.

+0

cảm ơn rất nhiều. mã này giúp tôi tìm ra trình điều khiển thiết bị của tôi không thể cài đặt chính xác và bây giờ hoạt động như một sự quyến rũ. cảm ơn rất nhiều – Rome

Các vấn đề liên quan