我通过重写
keyPressEvent()
函数来捕获远程桌面应用程序的键盘事件,如下所示:
def keyPressEvent(self, event): key = event.key() self.io_soc.send(f'key {key}'.encode())
我想在另一台计算机上模拟键盘事件,但问题是我需要将 event.key() 给出的按键代码转换为字符串,因为 pyautogui.press() 将字符串作为参数。
我没有找到任何方法来获取字符串形式的密钥或将其转换。请给我提供一种进行此转换的方法,或者解决此问题的方法
要将按键代码转换为 PyQt 中的字符串,请使用 QKeySequence 类,它允许您将按键代码转换为人类可读的文本。这是包含转换的 keyPressEvent 函数的更新版本:
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QKeySequence
class RemoteDesktopWidget(QWidget):
# ... other methods ...
def keyPressEvent(self, event):
key_sequence = QKeySequence(event.key())
key_text = key_sequence.toString()
# This is to ensure that we only send printable characters
if len(key_text) == 1 or key_text.startswith("Shift+") or key_text.startswith("Ctrl+") or key_text.startswith("Alt+"):
self.io_soc.send(f'key {key_text}'.encode())
请记住,QKeySequence.toString() 函数可能会生成包含“Ctrl+”、“Alt+”或“Shift+”等修饰符的字符串表示形式。由于 pyautogui.press() 需要单个字符或不带修饰符的键字符串,因此您可能需要独立处理这些场景。 对于不是字符键的键(例如功能键或箭头键),您必须将 Qt.Key 值映射到其 pyautogui 等效键。 PyAutoGUI 要求非字母数字键使用某些字符串(例如“enter”、“f1”、“left”、“right”等)。 这是您可以使用的示例映射函数:
from PyQt5.QtCore import Qt
def convert_key_to_string(key_code):
key_mappings = {
Qt.Key_Enter: 'enter',
Qt.Key_Return: 'enter',
Qt.Key_Left: 'left',
Qt.Key_Up: 'up',
Qt.Key_Right: 'right',
Qt.Key_Down: 'down',
# Add other necessary key mappings here
}
return key_mappings.get(key_code, None)
# Use it in your keyPressEvent like this:
def keyPressEvent(self, event):
key_string = convert_key_to_string(event.key())
if key_string:
self.io_soc.send(f'key {key_string}'.encode())
else:
# Handle regular character keys as shown earlier
此方法,您的 keyPressEvent 函数会将按下的键的字符串表示形式传达给远程系统,然后可以与 pyautogui.press() 一起使用。