deep-wine-runner/key/key-get.py
2022-10-24 22:11:03 +08:00

105 lines
2.8 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
#########################
# 版本1.0.0
# Python
#########################
import os
import sys
import time
import json
import threading
import traceback
import pynput.keyboard as keyboard
keyList = []
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
keyChangeMap = [
["ctrl", keyboard.Key.ctrl],
["alt", keyboard.Key.alt],
["esc", keyboard.Key.esc],
["enter", keyboard.Key.enter]
]
keyMap = []
for i in os.listdir(f"{programPath}/list"):
print(i)
try:
file = open(f"{programPath}/list/{i}", "r")
keyMapTemp = json.loads(file.read())
except:
print(f"{programPath}/list/{i} 读取失败!")
continue
for i in keyMapTemp:
keyMap.append(i)
for i in range(len(keyMap)):
for k in range(len(keyMap[i])):
for j in keyChangeMap:
if keyMap[i][k] == j[0]:
keyMap[i][k] = j[1]
continue
try:
keyMap[i][k] = keyMap[i][k].replace("{programPath}", programPath)
except:
pass
print(keyList)
def on_press(key):
try:
if key.char in keyList:
# 重复的值就不认了,摊牌了
return
keyList.append(key.char)
print(f'alphanumeric key {key.char} pressed')
except AttributeError:
keyList.append(key)
print(f'special key {key} pressed')
def on_release(key):
print(f'{key} released')
try:
del keyList[keyList.index(key.char)]
except AttributeError:
del keyList[keyList.index(key)]
except:
traceback.print_exc()
def ReadKey():
next = False
for i in keyMap:
for k in range(0, len(i) - 1):
k = i[k]
if not k in keyList:
next = True
break
if not next:
# 执行命令
os.system(i[-1])
# 必须等待按键全部松开才行
while len(keyList) != 0:
time.sleep(0.01)
def Read():
while True:
ReadKey()
if os.path.exists("/tmp/deepin-wine-runner-keyboard-exit"):
# 移除文件
try:
os.remove("/tmp/deepin-wine-runner-keyboard-exit")
except:
traceback.print_exc()
listener.stop()
break
time.sleep(0.01)
# Lock 锁防止多次调用
#if os.path.exists("/tmp/deepin-wine-runner-keyboard-lock"):
# print("不可多次调用")
# print("锁 /tmp/deepin-wine-runner-keyboard-lock 已存在")
# sys.exit(1)
#os.mknod("/tmp/deepin-wine-runner-keyboard-lock")
threading.Thread(target=Read).start()
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
os.remove("/tmp/deepin-wine-runner-keyboard-lock")