就像Ctl,Alt +删除一样
我想编写一个程序,该程序在python中使用带有3个或更多参数的全局热键。仅当我按下键盘上的所有三个键时,分配的功能才应执行。例如alt,windows和F3。
win32con.VK_F3, win32con.MOD_WIN, win32con.VK_F5
这是我要运行的当前程序,但是其输出是:
Traceback (most recent call last):
File "C:\Python32\Syntax\hot keys\hotkeys2.py", line 41, in <module>
for id, (vk, modifiers) in HOTKEYS.items ():
ValueError: too many values to unpack (expected 2)
该程序:
import os
import sys
import ctypes
from ctypes import wintypes
import win32con
byref = ctypes.byref
user32 = ctypes.windll.user32
HOTKEYS = {
1 : (win32con.VK_F3, win32con.MOD_WIN, win32con.VK_F5),
2 : (win32con.VK_F4, win32con.MOD_WIN),
3 : (win32con.VK_F2, win32con.MOD_WIN)
}
def handle_win_f3 ():
#os.startfile (os.environ['TEMP'])
print ("Hello WOrld! F3")
def handle_win_f4 ():
#user32.PostQuitMessage (0)
print ("Hello WOrld! F4")
def handle_win_f1_escape ():
print("exit")
sys.exit()
HOTKEY_ACTIONS = {
1 : handle_win_f3,
2 : handle_win_f4,
3 : handle_win_f1_escape
}
for id, (vk, modifiers) in HOTKEYS.items ():
print ("Registering id", id, "for key", vk)
if not user32.RegisterHotKey (None, id, modifiers, vk):
print ("Unable to register id", id)
try:
msg = wintypes.MSG ()
while user32.GetMessageA (byref (msg), None, 0, 0) != 0:
if msg.message == win32con.WM_HOTKEY:
action_to_take = HOTKEY_ACTIONS.get (msg.wParam)
#print(" msg.message == win32con.WM_HOTKEY:")
if action_to_take:
action_to_take ()
user32.TranslateMessage (byref (msg))
user32.DispatchMessageA (byref (msg))
finally:
for id in HOTKEYS.keys ():
user32.UnregisterHotKey (None, id)
print("user32.UnregisterHotKey (None, id)")
正在注册3个热键?可能? 说明如何使用一种方法,分配一个需要按下的键,然后分配是否需要按下两个键。但是我不会说该功能仅在同时按下所有功能时才执行。我拿了
对于初学者,如果您需要alt,windows和F3,是否不需要使用win32con.VK_F3, win32con.MOD_ALT, win32con.MOD_WIN
该HOTKEYS
条目?
但是,F3
用Win
and F5
键的修饰符来表示按下并没有什么意义。
错误就行了:
for id, (vk, modifiers) in HOTKEYS.items ():
这是因为每个字典条目的值都是可变长度tuple
。这是一种处理所有修饰符值也进行按位 或运算
的方法,以准备将它们作为单个参数传递给RegisterHotKey()
。
from functools import reduce
for id, values in HOTKEYS.items ():
vk, modifiers = values[0], reduce (lambda x, y: x | y, values[1:])
print ("Registering id", id, "for key", vk)
if not user32.RegisterHotKey (None, id, modifiers, vk):
print ("Unable to register id", id)
如果您的代码正确缩进并遵循PEP
8-Python代码样式指南的
建议,解决问题会更容易。请考虑在将来这样做。
我需要全局热键支持我的Java应用程序。 我想出了一些代码(大部分是复制的),但它不起作用。 HotkeyManager.java: 用户32。爪哇: msg. java: 它确实注册了热键(当程序运行时,按系统中的“F”键不会产生任何结果),但我从未得到任何到控制台的输出。发生了什么?我也知道jintellitype和jnativehook。我不能使用first,至于second,它总是监听所有
我正在尝试设置JavaFX环境,因此我引用了相应的jar。为了运行代码,我需要在launch.json中使用一些VM参数(“vmArgs”:--module path/Users/adrif/Downloads/javafx-sdk-14.0.2.1/lib--add modules javafx.controls,javafx.fxml”)。我在一个多项目文件夹中工作,因此每次创建一个新项目时,
问题内容: 我正在尝试在文件中创建如下。 问题是我发现了问题 类型“配置”没有成员“窗口” 请让我知道如何解决该问题。 问题答案: 表示该类中有一个对象,事实并非如此。 您将需要与with 一起使用,但这无济于事,因为此窗口实际上并不代表任何现有的窗口,而且它也不是视图控制器。 因此,我建议您将要使用的实际视图控制器传递给该方法: 然后从可使用UIViewController对象的类中调用它。
问题内容: 我有一个全局变量,需要在我的ViewController之间共享。 在Objective-C中,我可以定义静态变量,但是找不到在Swift中定义全局变量的方法。 您知道这样做的方法吗? 问题答案: 来自官方的Swift编程指南: 全局变量是在任何函数,方法,闭包或类型上下文之外定义的变量。全局常数和变量总是延迟计算的。 您可以在任何文件中定义它,也可以在任何位置访问它。因此,您可以在任
问题内容: 如何创建一个Java类实例,以确保整个JVM进程只能使用一次?然后,在该JVM上运行的每个应用程序都应该能够使用该单例实例。 问题答案: 实际上,您可以实现这种单例。在注释中向您描述的问题是可能有多个s 加载类。然后,每个都可以定义一个相同名称的类,该类将错误地假定为唯一。 但是,您可以通过实现单例的访问器来避免这种情况,该访问器显式依赖于检查特定名称的类,该类又包含您的单例。这样,您
问题内容: 在我的android应用程序中,我需要放置可变成员id的位置。问题是,它是从在线API获取的,我需要找到一种存储/检索它的方法 我尝试将其放在自定义类中,但是问题是,如果我取消活动,它将丢失,我还知道有一种方法可以扩展应用程序。 所以我想知道存储全局变量的最佳方法是什么? 我必须实现: 将变量保存在onSaveState上 将其保存在sharepref 手动保存 手动检索 谢谢 更新: