リモートデスクトップ接続時に、接続元のNumLock状態がリモートPCに反映されます。しかしリモートデスクトップの切断時は、変更されたNumLock状態は元に戻されません。
通常NumLockをOFFにしているノートPCと、NumLockをONにしているデスクトップPC間でリモートデスクトップを利用すると、利用後にリモートPCだった方は NumLockの状態がいつもと違うことになります。
PCへのログイン時に、NumLockを ONまたはOFFにセットするようにすれば、リモートデスクトップ接続で変更されていたとしても問題ありません。
次の手順で設定します。
次の内容の PowerShellスクリプトをファイル名 set_numlock.ps1 で用意します。
ここでは C:\set_numlock.ps1 に保存したとします。
param(
[Parameter(Mandatory = $true)]
[ValidateSet("on", "off")]
[string]$Mode
)
Start-Sleep -Seconds 1
Add-Type @"
using System.Runtime.InteropServices;
public class Keyboard {
[DllImport("user32.dll")]
public static extern short GetKeyState(int nVirtKey);
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
}
"@
$VK_NUMLOCK = 0x90
$KEYEVENTF_EXTENDEDKEY = 0x1
$KEYEVENTF_KEYUP = 0x2
$state = ([Keyboard]::GetKeyState($VK_NUMLOCK) -band 1) -ne 0
switch ($Mode) {
"on" {
if (-not $state) {
[Keyboard]::keybd_event($VK_NUMLOCK, 0x45, $KEYEVENTF_EXTENDEDKEY, 0)
[Keyboard]::keybd_event($VK_NUMLOCK, 0x45, $KEYEVENTF_EXTENDEDKEY -bor $KEYEVENTF_KEYUP, 0)
}
}
"off" {
if ($state) {
[Keyboard]::keybd_event($VK_NUMLOCK, 0x45, $KEYEVENTF_EXTENDEDKEY, 0)
[Keyboard]::keybd_event($VK_NUMLOCK, 0x45, $KEYEVENTF_EXTENDEDKEY -bor $KEYEVENTF_KEYUP, 0)
}
}
}スタートメニュー から Windows管理ツール より タスクスケジューラ を起動します。タスクスケジューラの画面左のツリーの [タスクスケジューラ ライブラリ] の上で右クリックし、[タスクの作成] を選択します。
全般タブで、「名前」を任意のものを記述します。
トリガータブで[新規]ボタンを押します。
現れたダイアログで、”タスクの開始” を [ユーザーセッションへの接続時] にします。
[ローカルコンピューターからの接続] を選択して、「OK」を押します。

操作タブで[新規]ボタンを押します。
現れたダイアログで、“プログラム/スクリプト” に、powershell.exe を指定します。
”引数の追加” で、NumLockをOFFにする場合は
-NoProfile -ExecutionPolicy Bypass -File “C:\set_numlock.ps1” off
と記述し、NumLockをONにする場合は
-NoProfile -ExecutionPolicy Bypass -File “C:\set_numlock.ps1” on
と記述して[OK]ボタンを押します。

条件タブで、「コンビューターをAC竜源で使用している場合のみタスクを問始する」のチェックを外し、[OK]ボタンを押します。

これで、リモートデスクトップを利用すると、利用後にリモートPCだった方で NumLockの状態がいつもと違うことはなくなります。
コメント