【问题标题】:CTRL+ALT+DEL not working in win32api and pythonCTRL+ALT+DEL 在 win32api 和 python 中不起作用
【发布时间】:2017-05-08 07:14:46
【问题描述】:

我正在使用 python 虚拟运行键盘,使用以下代码执行 Ctrl+Alt+Del 不起作用,但是, Ctrl+Shift+Tab 或其他组合键以这种方式工作。 我所指的十六进制代码列表来自here

import win32api
import win32con
import time

win32api.keybd_event(0xA2, 0,0,0)
time.sleep(.01)
win32api.keybd_event(0xA4, 0,0,0)
time.sleep(.01)
win32api.keybd_event(0x2E, 0,0,0)
time.sleep(.04)

win32api.keybd_event(0xA2,0 ,win32con.KEYEVENTF_KEYUP ,0)
time.sleep(.01)
win32api.keybd_event(0xA4,0 ,win32con.KEYEVENTF_KEYUP ,0)
time.sleep(.01)
win32api.keybd_event(0x2E,0 ,win32con.KEYEVENTF_KEYUP ,0)

任何人的帮助将不胜感激。为此目的使用 Windows 7。

【问题讨论】:

    标签: python windows winapi pywinauto


    【解决方案1】:

    secure attention sequence (SAS) 不能通过伪造输入产生。你需要调用SendSAS函数。

    请注意,SendSAS 的文档列出了一些相当严格的使用条件。您需要仔细遵守这些条件才能成功,而这对于 Python 程序来说可能非常困难。将对SendSAS 的调用封装在单独的可执行文件中会很方便。

    【讨论】:

    • 谢谢,我期待类似的东西,有没有一种方法可以通过 Pywinauto、Pyautogui 或其他库,或者调用一些核心 win api 函数来实现?
    • 如果您阅读了链接文档中的所需条件,正如我所提到的,我想您会同意在 Python 程序中很难满足这些条件。
    • Python 脚本可以通过以下两种方式之一执行此操作:(1) 使用 PyWin32 创建一个以 SYSTEM 身份运行的服务,或者 (2) 创建一个以 SYSTEM 身份运行的任务(通过 COM 或 schtasks.exe) SYSTEM 在服务会话中。如文档所述,您必须修改系统上的组策略以允许这样做。在任何一种情况下,脚本都可以在启动后立即通过 ctypes 调用 SendSAS(0)(即通过 sc.exe、net.exe 或 win32service 启动服务,或通过 COM 或 schtasks.exe 运行任务)。
    • @eryksun 你为什么不把它作为答案发布......这是一个有效的候选人。
    • 我的意图是暗示大卫所说的“棘手”是什么意思,即你不能简单地从任意脚本调用SendSAS。它必须在已配置为允许它的系统上的特定上下文中调用,无论是从作为 SYSTEM 运行的服务还是使用 Authenticode 签名的“uiAccess”清单的应用程序。
    【解决方案2】:

    Ctrl+Alt+Del 是 Windows 中的一个保留系统功能,据我所知。这意味着操作系统根本不会将命令传递给您的程序。

    如果我错了,请有人纠正我。

    【讨论】:

    猜你喜欢
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2012-07-11
    • 1970-01-01
    • 2011-02-17
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多