次のように、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 セッションにリモートする場合でも機能します。2 番目の XP セッションのロックを正常に解除できます。
ただし、XP マシンから別の XP マシンにリモートで接続すると、このスクリプトを実行した後、リモート デスクトップ セッションのロックが解除されません。CTRL + ALT + DEL が機能しません。ハード再起動してマシンに戻るか、他のユーザーにログインしてロックされたセッションをオフにする必要があります。
リモート処理を開始するローカル マシンが XP の場合は常に、リモート デスクトップ セッションのロックが解除されないようです。これを修正する方法を知っている人はいますか?