python - 是否有一个功能可以检查我是否在 Python 的任何屏幕上按下了某些东西?
问题描述
我为一个名为 Transformice 的游戏创建了一个代码。我想使用一个函数来检查我是否在游戏中按下了某些东西(例如“esc”)并完成了程序。
我读到的所有功能都需要我按下控制台上的字母,但我想在玩游戏时按下它,而我的程序检测到了这一点。这可能(如何?)?
from pyautogui import typewrite, locateOnScreen
from time import sleep
while(True):
img_controle = locateOnScreen('Screenshot_1.PNG', confidence = 0.7)
if img_controle:
typewrite(['enter', 'up', 'up', 'enter'], interval = 0.05)
typewrite(['enter', 'up', 'up', 'enter'], interval = 0.05)
img_controle = None
sleep(5)
解决方案
您可以使用不同的键代替“esc”,例如“q”来退出。然后可以使用以下代码:
import win32api as wapi
keyList = ["\b"]
for char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ 123456789,.'£$/\\":
keyList.append(char)
def key_check():
keys = []
for key in keyList:
if wapi.GetAsyncKeyState(ord(key)):
keys.append(key)
return keys
key_check() 将返回在函数执行时被按下的所有键的列表。
只需定期调用此函数(例如在每个游戏循环中)并检查:
if 'q' in key_check():
# whatever action I want to do
源代码取自:https ://github.com/Sentdex/pygta5/blob/master/getkeys.py
推荐阅读
- java - 在 BigTable 数据库中存储 Lucene 索引
- regex - 将检查一列单元格并说出他是否找到确切单词的公式
- sql - 如何取一组最小的日期?
- pandas - 如何在课堂上使用 Pandas UDF
- machine-learning - 如何使用机器学习来检测一个简单的对象
- list - Retrieving data from Firebase (Realtime Database) into a list (Kotlin)
- ios - SwiftUI:导航栏显示第一个列表项的标题,否则显示“返回”
- ansible - 如何对列表进行循环并使用“何时”条件
- .net-core - 在也使用 netstandard2.1 的项目中升级到 .NET Core 3 并未在 Rider 中构建
- excel - 用于 Power Query 的 Excel 保护数据源