Python pywin32 - VK_SLEEP 按键不工作
Python pywin32 - VK_SLEEP press not working
我找到了这个按下虚拟键的解决方案:
但是,问题是 VK_SLEEP 对我不起作用。我尝试了所有其他 VK_ 键(如 VK_VOLUME_UP、VK_MEDIA_NEXT_TRACK...)并且它有效,只有 VK_SLEEP 无效。
这是我的代码:
VK_SLEEP = 0x5F
hwcode = win32api.MapVirtualKey(VK_SLEEP, 0)
win32api.keybd_event(VK_SLEEP, hwcode)
当我执行该代码时,没有任何反应。当我将虚拟键更改为 ie 时。 VK_VOLUME_UP:很有魅力!所以,代码没问题,但由于某些原因,脚本不会让 PC 使用 VK_SLEEP 进入睡眠状态。
这是我使用的 VK_ 代码的来源:https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes
需要说明的是:我的键盘没有专用的睡眠按钮。但是,也没有 "volume up",并且 0xAF (vlume_up) 有效。所以,我不认为问题出在键盘上(它是 CM MK750)。
模拟 VK_SLEEP
不会有任何效果,可能是出于安全原因。
更改系统的电源状态需要 SE_SHUTDOWN_NAME
权限。如果权限更改成功,您可以使用SetSuspendState
让计算机进入休眠状态。
import win32api
import win32security
import ctypes
def sleep_mode():
access = (win32security.TOKEN_ADJUST_PRIVILEGES | win32security.TOKEN_QUERY)
htoken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), access)
if htoken:
priv_id = win32security.LookupPrivilegeValue(None, win32security.SE_SHUTDOWN_NAME)
win32security.AdjustTokenPrivileges(htoken, 0,
[(priv_id, win32security.SE_PRIVILEGE_ENABLED)])
ctypes.windll.powrprof.SetSuspendState(False, True, True)
win32api.CloseHandle(htoken)
sleep_mode()
旁注,
keybd_event
按下键。确保键被推回。示例:
import win32api
import win32con
win32api.keybd_event(win32con.VK_VOLUME_UP, 0)
win32api.keybd_event(win32con.VK_VOLUME_UP, 0, win32con.KEYEVENTF_KEYUP)
我找到了这个按下虚拟键的解决方案: 但是,问题是 VK_SLEEP 对我不起作用。我尝试了所有其他 VK_ 键(如 VK_VOLUME_UP、VK_MEDIA_NEXT_TRACK...)并且它有效,只有 VK_SLEEP 无效。 这是我的代码:
VK_SLEEP = 0x5F
hwcode = win32api.MapVirtualKey(VK_SLEEP, 0)
win32api.keybd_event(VK_SLEEP, hwcode)
当我执行该代码时,没有任何反应。当我将虚拟键更改为 ie 时。 VK_VOLUME_UP:很有魅力!所以,代码没问题,但由于某些原因,脚本不会让 PC 使用 VK_SLEEP 进入睡眠状态。 这是我使用的 VK_ 代码的来源:https://docs.microsoft.com/en-us/windows/desktop/inputdev/virtual-key-codes
需要说明的是:我的键盘没有专用的睡眠按钮。但是,也没有 "volume up",并且 0xAF (vlume_up) 有效。所以,我不认为问题出在键盘上(它是 CM MK750)。
模拟 VK_SLEEP
不会有任何效果,可能是出于安全原因。
更改系统的电源状态需要 SE_SHUTDOWN_NAME
权限。如果权限更改成功,您可以使用SetSuspendState
让计算机进入休眠状态。
import win32api
import win32security
import ctypes
def sleep_mode():
access = (win32security.TOKEN_ADJUST_PRIVILEGES | win32security.TOKEN_QUERY)
htoken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), access)
if htoken:
priv_id = win32security.LookupPrivilegeValue(None, win32security.SE_SHUTDOWN_NAME)
win32security.AdjustTokenPrivileges(htoken, 0,
[(priv_id, win32security.SE_PRIVILEGE_ENABLED)])
ctypes.windll.powrprof.SetSuspendState(False, True, True)
win32api.CloseHandle(htoken)
sleep_mode()
旁注,
keybd_event
按下键。确保键被推回。示例:
import win32api
import win32con
win32api.keybd_event(win32con.VK_VOLUME_UP, 0)
win32api.keybd_event(win32con.VK_VOLUME_UP, 0, win32con.KEYEVENTF_KEYUP)