Py
,-.----.
\ / \ ___ ,---,
| : \ ,--.'|_ ,--.' |
| | .\ : | | :,' | | : ,---. ,---,
. : |: | : : ' : : : : ' ,'\ ,-+-. / |
| | \ : .--,.;__,' / : | |,--. / / | ,--.'|' |
| : . / /_ ./|| | | | : ' |. ; ,. :| | ,"' |
; | |`-', ' , ' ::__,'| : | | /' :' | |: :| | / | |
| | ; /___/ \: | ' : |__ ' : | | |' | .; :| | | | |
: ' | . \ ' | | | '.'|| | ' | :| : || | | |/
: : : \ ; : ; : ;| : :_:,' \ \ / | | |--'
| | : \ \ ; | , / | | ,' `----' | |/
`---'.| : \ \ ---`-' `--'' '---'
`---` \ ' ;
`--`
Downloads[edit]
https://www.python.org/downloads/
- Note on windows a system update may first be required to prevent installation errors.
Docs[edit]
Projects[edit]
Socket to Keys[edit]
Original code from Sergio http://sergiosprojects.blogspot.com/2012/01/python-server-keyboard-emulation.html
Modified and tested code on Windows 7 with Python 3.5.0
- Volume Mute (toggle)
- Volume Up
- Volume Down
#!/usr/bin/env python
import os
import sys
import socket
import ctypes
# Used to listen for connections
LISTEN_ADDRESS = ''
LISTEN_PORT = 12345
BUFFER_SIZE = 512
# Used for emulating key presses.
user32 = ctypes.windll.user32
# Virtual keys
VK_VOLUME_MUTE = 0xAD
VK_VOLUME_DOWN = 0xAE
VK_VOLUME_UP = 0xAF
# Mapping expected input to actions
bytes_to_keys = {}
bytes_to_keys["M"] = VK_VOLUME_MUTE
bytes_to_keys["D"] = VK_VOLUME_DOWN
bytes_to_keys["U"] = VK_VOLUME_UP
def run_command(cmd):
os.system(cmd)
def do_action(char):
'''Takes a 1-character code and executes the action assoliated with it'''
if char in bytes_to_keys:
key_code = bytes_to_keys[char]
user32.keybd_event(key_code, 0, 0, 0) # press
user32.keybd_event(key_code, 0, 2, 0) # release
else:
print("unknown instruction:", char)
##########################################
################## Main ##################
##########################################
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((LISTEN_ADDRESS, LISTEN_PORT))
print("Starting server on port", LISTEN_PORT)
s.listen(1)
while True:
conn, addr = s.accept()
print('Connection address:', addr)
try:
while True:
data = conn.recv(BUFFER_SIZE)
if not data: break
str_data = bytes.decode(data) # data is non-unicode, but all python strings need to be
print("received data: \"{0}\"".format(str_data))
cmdIndex = str_data.find("?cmd=") + 5
cmdString = str_data[cmdIndex:cmdIndex+1]
print("Command String:", cmdString);
do_action(cmdString)
break
print("Client disconnected")
except socket.error as e:
print("Socket error:", e)
except socket.timeout:
print("Connection timed-out")
except Exception as e:
print("Exception:", e)
finally:
conn.close()
print("Exit")