1

我有一个在 C# 中调用 Win32 BlockInput 函数的脚本,如下所示:

public partial class NativeMethods
    {

        /// Return Type: BOOL->int
        ///fBlockIt: BOOL->int
        [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint =     "BlockInput")]
        [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
        public static extern bool BlockInput([System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)] bool fBlockIt);

    }

    public static void toggleMouseAndKeyboard(bool flag)
    {
        try
        {
            NativeMethods.BlockInput(flag);
        }
        catch(Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }

每当我在本地运行脚本时,无论是 Windows 7 还是 Windows XP,这都能正常工作。我也可以通过按 CTRL + ALT + DEL 来解锁机器。

当我从 Windows 7 机器远程到 Windows XP 或 Windows 7 到 Windows 7 时,这也将起作用。如果我突出显示远程桌面窗口,然后按 CTRL + ALT + DEL,它将解锁远程桌面会话。

当我先从 Windows 7 机器远程到 XP 机器,然后从 XP 远程会话远程到另一个 XP 会话时,它甚至可以工作。我可以很好地解锁第二个 XP 会话。

但是,当我从一台 XP 机器远程到另一台 XP 机器时,远程桌面会话在运行此脚本后不会解锁。CTRL + ALT + DEL 不起作用。我们必须进行硬重启才能重新进入机器,或者让其他人登录以关闭锁定的会话。

似乎只要您开始远程处理的本地计算机是 XP,它就不会解锁任何远程桌面会话。有谁知道解决这个问题的方法?

4

0 回答 0