自动切换用户的Python脚本
我在使用Windows XP。请问我怎样才能写一个简单的脚本,让它在我设置的某个触发点执行时,自动把我从当前账户登出,然后登录到这台电脑上的另一个账户呢?
请帮帮我。
3 个回答
0
我来冒个险,建议一下,可能没有直接能做到这个的Python库。相反,你需要从Python里调用一些C语言的win32函数。
我觉得你最好把这个问题拆分成两个独立的问题。
第一个问题是:“我怎么才能在Win32环境下,程序化地发起注销并以不同用户登录?”
希望这个问题能得到一些Windows专家的回答,即使他们对Python不太熟悉。
我对此了解不多,但听起来确实很有挑战性。触发注销可能可行,但要以不同用户登录(可能还需要停下来询问用户密码)就比较复杂了。
第二个问题是:“我怎么能在Python中调用这些win32函数?”
这个问题比较常见,StackOverflow上应该有很多人能提供帮助。
2
要注销,可以使用 ExitWindowsEx()
这个函数,并传入 EWX_LOGOFF
(值为0)。如果你想在注销后自动登录,就需要把 DefaultUserName
和 DefaultPassword
写入到 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
这个位置。你可能还需要把 AutoAdminLogon
设置为1。记得之后要把这些注册表项删掉,不然它会一直自动登录那个用户。
在Python中,你可以用ctypes来调用这个函数,用_winreg来写入注册表。
# setup login
from _winreg import *
key = OpenKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', 0, KEY_ALL_ACCESS)
SetValueEx(key, "DefaultUserName", 0, REG_SZ, "username")
SetValueEx(key, "DefaultPassword", 0, REG_SZ, "password")
SetValueEx(key, "AutoAdminLogon", 0, REG_DWORD, 1)
CloseKey(key)
# logoff
import ctypes
ctypes.windll.user32.ExitWindowsEx(0,0)
3
你想在另一个账户上做什么呢?如果你想在另一个账户上运行一些命令,可以使用os.system和runas这个工具来帮你。