SendInput锁屏界面无法使用,没法输入锁屏密码?


SendInput
是一个 Windows API 函数,它可以模拟用户的输入操作,包括键盘输入和鼠标点击等。但是,锁屏界面是一个特殊场景,系统会限制输入,因此
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()
函数的第二个参数
scan_code
设置为了默认值 0,省略了这个参数的传递,以便调用更加简洁。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
路过的评论萝卜头的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容