从python或命令行控制Alt-Delete

时间:2013-08-13 16:26:17

标签: python command-line wxpython

我做过一些研究,但我希望能够从python中调用control-alt-delete。如果这是不可能的,可以从命令行调用它,因为那时我可以在python中使用该命令,因为我可以在python中调用命令行。如果有人能指出我正确的方向,这将是伟大的。这是用wxPython编写的任务管理器。 编辑: 即时通讯尝试启动Windows安全性,并从用户回答我尝试

import win32com.client

shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys("{CONTROL}{ALT}{DELETE}")

我收到此错误

Traceback (most recent call last):
    File "C:/Python27/tescontrol.py", line 4, in <module>
      shell.SendKeys("{CONTROL}{ALT}{DELETE}")
    File "<COMObject WScript.Shell>", line 2, in SendKeys
com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147024809), None)

7 个答案:

答案 0 :(得分:1)

您的意思是激活Windows安全窗口。在这种情况下:

import win32com.client

shell = win32com.client.Dispatch("WScript.Shell")
shell.SendKeys("^(%{DELETE})")

更新

由于其他帖子中描述的原因,上述代码似乎无效。在这种情况下,另一种方法是创建一个类似的窗口,并从Python调用真正的Windows安全窗口调用的不同程序/函数。

在阅读OP对原始问题的评论时,OP的最终需求是更改用户的密码。这可以通过以下方式完成:

from win32com import adsi
ads_obj = adsi.ADsGetObject("WinNT://localhost/%s,user" % username)
ads_obj.SetPassword(password)

我刚刚在我的电脑上对此进行了测试,最终信息也是如此(虽然不一定正确;这取决于OP :-))。

更新2:将后面的内容复制为单独的答案,因为评论似乎表明所有答案都不起作用。这对SendKeys命题是正确的,这不起作用。

答案 1 :(得分:0)

如果您要做的是关闭或重启系统,Windows有一个'shutdown'命令,linux通常有'shutdown'和'reboot'命令。

答案 2 :(得分:0)

查看以下主题:

根据它,VNC使用这样的东西:

PostMessage HWND_BROADCAST, WM_HOTKEY, 0, MakeLong(MOD_ALT Or MOD_CONTROL, VK_DELETE)

我怀疑你需要使用ctypes或PyWin32做这样的事情。我可能会使用ctypes,因为它是跨平台的,但是,即使使用ctypes,你可能需要为你支持的每个操作系统编写一个特殊的方法。

答案 3 :(得分:0)

据我所知,出于安全原因,Ctrl-Alt-Delete受到保护,因此程序无法使用它。 (至少在Windows 7及之前。)

答案 4 :(得分:0)

在阅读OP的评论时,他/她的原始需求是更改用户的密码。事实上,这可以通过以下方式完成:

from win32com import adsi
ads_obj = adsi.ADsGetObject("WinNT://localhost/%s,user" % username)
ads_obj.SetPassword(password)

答案 5 :(得分:0)

您可以使用vncdotool库 于:

  

lib

使用vncdotool:

os.system("vncdotool key ctrl-alt-del")

答案 6 :(得分:0)

这是您至少可以尝试的一种方法: (它可能只适用于 Windows 7)

import sys
import localize
import os
value_from = 0
Integer = _clear_type_cache(get_object[win\%sys(vnc_value*cache)* value_from])

def Interclass(event): 
    try:
      [<'ctrl'><'alt'><'del'>{%user_value(*object)*value_form}] % cache
    except: 
     {%TOPMOST%'TEMP'_%VALUE_REGISTRY}*
    else: 
    print("No value")