Имитация 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)