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