2017-11-21 138 views
6

I zostały próbuje użyć Pythona związać moją customize zdarzenia do zdarzenia klawiatury z konkretnym numerem kodowym wydarzenie jak poniżejwiążące kluczową wydarzenie w Pythonie przy użyciu ctypes funkcjonować

ctypes.windll.user32.keybd_event („0x24” , 0,2,0)

ale jak już wiesz

windll

biblioteka działała tylko w systemie Windows. jak mogę zrobić coś takiego na komputerach z systemem Linux? Czytałem o

CDLL ('libc.so.6')

ale nie mogę zrozumieć to, czy ta biblioteka jest przydatne czy nie?

jest inny sposób ustawiania detektora klawiszy na poziomie systemu operacyjnego z pythonem za pomocą kodu klucza wirtualnego?

+0

co próbujesz osiągnąć jako takie? –

+0

Próbuję ustawić własny detektor zdarzeń za pomocą tylko kodu klucza. Niektóre rzeczy jak poniżej: keyboard_listener ('0x24', custom_event_listener()) – Rome

+0

istnieje istniejące rozwiązanie pykeylogger. – georgexsh

Odpowiedz

4

Podsystem wejściowy Linux składa się z trzech części: warstwy sterownika, warstwy rdzenia podsystemu wejściowego i warstwy przetwarzania zdarzenia. i klawiatura lub inne zdarzenie wejściowe są opisane przez input_event.

użycie poniżej kod i wpisać w terminalu 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() 

powinieneś dostać Name: event1 Device: AT Translated Set 2 keyboard. następnie użyć

#!/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 to pakiet zapewnia powiązania do rodzajowego interfejsu zdarzeń wejścia w Linuksie. Interfejs evdev służy do przekazywania zdarzeń generowanych w jądrze bezpośrednio do przestrzeni użytkownika za pośrednictwem urządzeń znakowych, które zazwyczaj znajdują się w /dev/input/. I select jest select.

+0

wielkie dzięki. ten kod pomoże mi zorientować się, że sterownik mojego urządzenia nie został poprawnie zainstalowany i działa jak urok. wielkie dzięki – Rome