Étape 10 : Programmation (Python)
importation de série
importer des codecs
importer ctypes
moment de l’importation
de temps importer sommeil
SendInput = ctypes.windll.user32.SendInput
PUL = ctypes. POINTER(ctypes.c_ulong)
classe KeyBdInput(ctypes. Structure) :
_fields_ = [(« wVk », ctypes.c_ushort),
(« wScan », ctypes.c_ushort),
(« dwFlags », ctypes.c_ulong),
« le temps » (ctypes.c_ulong)
("dwExtraInfo", PUL)]
classe HardwareInput(ctypes. Structure) :
_fields_ = [(« uMsg », ctypes.c_ulong),
(« wParamL », ctypes.c_short),
("wParamH", ctypes.c_ushort)]
classe MouseInput(ctypes. Structure) :
_fields_ = [(« dx », ctypes.c_long),
(« dy », ctypes.c_long),
(« mouseData », ctypes.c_ulong),
(« dwFlags », ctypes.c_ulong),
(» time",ctypes.c_ulong),
("dwExtraInfo", PUL)]
classe Input_I(ctypes. Union) :
_fields_ = [("ki", KeyBdInput),
(« mi », MouseInput),
("Salut", HardwareInput)]
classe d’entrée (ctypes. Structure) :
_fields_ = ["type" (ctypes.c_ulong)
(« ii », Input_I)]
def PressKey(hexKeyCode) :
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.Ki = KeyBdInput (hexKeyCode, 0 x 48, 0, 0, ctypes.pointer(extra))
x = Input (ctypes.c_ulong(1), ii_)
ctypes.windll.user32.SendInput (1, ctypes.pointer(x), ctypes.sizeof(x))
def ReleaseKey(hexKeyCode) :
extra = ctypes.c_ulong(0)
ii_ = Input_I()
ii_.Ki = KeyBdInput (hexKeyCode, 0 x 48, 0 x 0002, 0, ctypes.pointer(extra))
x = Input (ctypes.c_ulong(1), ii_)
ctypes.windll.user32.SendInput (1, ctypes.pointer(x), ctypes.sizeof(x))
def PressW() :
PressKey(0x57) #W
def ReleaseW() :
ReleaseKey(0x57) #W
def PressA() :
PressKey(0x41) #A
def ReleaseA() :
ReleaseKey(0x41) #A
def PressS() :
PressKey(0x53) #S
def ReleaseS() :
ReleaseKey(0x53) #S
def PressD() :
PressKey(0x44) #D
def ReleaseD() :
ReleaseKey(0x44) #D
port = « COM6 »
SER = serial. Série (port, 9600, timeout = 0)
While True :
#data = ser.read(9999)
ligne = ser.readline()
Si ligne :
imprimer (' Got:', ligne)
Si ligne == b « 0\r\n » :
Print('W_UP')
PressW()
Elif ligne == b « 1\r\n » :
Print('W_DOWN')
ReleaseW()
Si ligne == b « 2\r\n » :
Print('S_UP')
PressS()
Elif ligne == b « 3\r\n » :
Print('S_DOWN')
ReleaseS()
Si ligne == b « 4\r\n » :
Print('A_UP')
PressA()
Elif ligne == b « 5\r\n » :
Print('A_DOWN')
ReleaseA()
Si ligne == b « 6\r\n » :
Print('D_UP')
PressD()
Elif ligne == b « 7\r\n » :
Print('D_DOWN')
ReleaseD()
Sleep(0.0125)
Print('0')
SER.Close()