是一个 Windows API 函数,它可以模拟用户的输入操作,包括键盘输入和鼠标点击等。但是,锁屏界面是一个特殊场景,系统会限制输入,因此
SendInput 可能无法在锁屏界面上输入密码。
SendInput
在锁屏界面上,只有系统自带的输入法才能正常输入密码。如果你想在锁屏界面上自动输入密码,可以考虑使用系统自带的虚拟键盘输入法,或者使用第三方输入法软件来实现。
另外,需要注意的是,在锁屏界面上自动输入密码是一种安全风险,因为它可能会泄露密码信息。如果你需要在锁屏界面上自动化操作,建议使用更安全的方式,比如使用 Windows API 来控制系统。
如果你需要在锁屏界面上执行自动化操作,可以尝试以下方法来处理输入密码的问题:
通过 Windows API 来控制系统,模拟用户输入密码。具体来说,可以使用 函数或
SendMessage() 函数发送键盘消息,模拟键盘输入密码。例如,可以使用以下代码来模拟输入密码:
PostMessage()
import win32gui
import win32con
def input_password(password):
# 获取锁屏界面的窗口句柄
hwnd = win32gui.FindWindow("LockAppHost", None)
# 模拟键盘输入密码
for c in password:
win32gui.SendMessage(hwnd, win32con.WM_CHAR, ord(c), 0)
# 模拟按下回车键
win32gui.SendMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
这个代码使用了 模块中的函数来获取锁屏界面的窗口句柄,然后使用
win32gui 函数发送键盘消息,模拟输入密码和按下回车键。
SendMessage()
同样的,我们可以将这段代码进行优化封装,以便在需要时直接调用。以下是一个封装示例:
import win32gui
import win32con
def input_password(password):
# 获取锁屏界面的窗口句柄
hwnd = get_lock_screen_window()
# 模拟键盘输入密码
for c in password:
send_key_to_window(hwnd, c)
# 模拟按下回车键
send_key_to_window(hwnd, '
')
def get_lock_screen_window():
return win32gui.FindWindow("LockAppHost", None)
def send_key_to_window(hwnd, key):
if type(key) is str:
key = ord(key)
win32gui.SendMessage(hwnd, win32con.WM_CHAR, key, 0)
这个封装示例将获取锁屏界面窗口句柄、发送键盘消息等操作都封装到了各自的函数中,使代码更加清晰易懂。此外,这个示例还添加了类型检查,以确保输入的键是一个字符或字符的 ASCII 码。
使用 Windows 自带的虚拟键盘输入法来输入密码。可以使用 命令来打开虚拟键盘,然后通过模拟鼠标点击来输入密码。例如,可以使用以下代码来模拟输入密码:
osk.exe
import os
import time
import win32api
import win32con
def input_password(password):
# 打开虚拟键盘
os.system("osk")
time.sleep(1)
# 模拟鼠标点击输入密码
for c in password:
vk_code = win32api.VkKeyScan(c)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
win32api.keybd_event(vk_code, 0, 0, 0)
win32api.keybd_event(vk_code, 0, win32con.KEYEVENTF_KEYUP, 0)
# 模拟按下回车键
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
这个代码使用了 模块来执行
os 命令,打开虚拟键盘。然后,使用
osk.exe 模块来模拟鼠标点击和键盘输入,输入密码和按下回车键。
win32api
需要注意的是,这两种方式都需要在管理员权限下运行程序,否则可能会无法模拟用户输入操作。
可以将这段代码进行优化封装,将打开虚拟键盘和模拟输入密码的逻辑封装到一个函数中,以便在需要时直接调用。以下是一个封装示例:
import os
import time
import win32api
import win32con
def input_password(password):
# 打开虚拟键盘
open_virtual_keyboard()
time.sleep(1)
# 模拟鼠标点击输入密码
for c in password:
vk_code = win32api.VkKeyScan(c)
mouse_click()
keybd_event(vk_code, 0, 0, 0)
keybd_event(vk_code, 0, win32con.KEYEVENTF_KEYUP, 0)
# 模拟按下回车键
mouse_click()
def open_virtual_keyboard():
os.system("osk")
def mouse_click():
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def keybd_event(vk_code, scan_code, flags, time):
win32api.keybd_event(vk_code, scan_code, flags, time)
这个封装示例将打开虚拟键盘、模拟鼠标点击和模拟键盘事件等操作都封装到了各自的函数中,使代码更加清晰易懂。此外,这个示例还将 函数的第二个参数
VkKeyScan() 设置为了默认值 0,省略了这个参数的传递,以便调用更加简洁。
scan_code















暂无评论内容