我有一个在 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,它就不会解锁任何远程桌面会话。有谁知道解决这个问题的方法?