SendKeys を実行するとNumLock キーがオフになる現象を回避

2 つ以上の SendKeys ステートメントが連続して実行されると、NumLock キーがオフになる。
この問題は、CapsLock キーと ScrollLock キーにも影響することがあるらしい。
と、Microsoftのサポートにはあるが、1つのステートメントでもオフになる現象が起こっている。
http://support.microsoft.com/kb/179987/ja

<原因-抜粋>
この問題は、1 つ目の SendKeys ステートメントの実行中に 2 つ目の SendKeys ステートメントの実行が開始されるために発生します。1 つ目の SendKeys ステートメントは、キーボードの状態を保存したうえで、NumLock、CapsLock、ScrollLock をすべてオフにします。2 つ目の SendKeys ステートメントが実行されるのは、1 つ目の SendKeys ステートメントによるキー ストロークの送信とキーボードの状態の復元が行われる前です。2 つ目の SendKeys ステートメントの実行時にもキーボードの状態が保存されますが、このとき保存されるのは、それらのキーがすべてオフになっている状態です。最終的に、キーボードの状態は後から保存された状態 (それらのキーがすべてオフになっている状態) で復元されます。

<回避策>WSHをSendKeysの後に実行する

'======================================================
'   SendkeysでNumlockがOFFになるバグを回避する
'   WSH(Windows Scripting Host)
'======================================================

Sub numlock_onoff()
    Dim WshShell
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.SendKeys "{NUMLOCK}"
    Set WshShell = Nothing
End Sub

‘入力リストを展開する
SendKeys “%{down}”
Call numlock_onoff

7 comments
  1. 三角猫
    三角猫
    2016年3月19日 at 12:34 PM

    VBAのSendKeysが勝手にNumLockを切り替えてしまう不具合の解決策を探し求めて、こちらに辿り着きました。記事のおかげで解決しました。ありがとうございました。

    VBAのSendKeysを全てWshShell.SendKeysに置き換えれば、NumLockをいじる必要がないですね。

    Reply
    • Santa Network
      Santa Network
      2016年3月22日 at 2:21 PM

      コメント、ありがとうございます。
      お役に立ててよかったです。(*^^)v

      Reply
  2. キェルケゴール
    キェルケゴール
    2017年7月1日 at 1:34 PM

    <回避策>WSHをSendkyesの後に実行する  ← kyes 綴り間違い一つ目
    SendkyesでNumlockがOFFになるバグを回避する ← kyes 綴り間違い二つ目
    綴り間違いは直してください。
    1897年8月12日 11:00 PM

    Reply
  3. santane
    santane • Post Author •
    2017年7月30日 at 5:14 PM

    キェルケゴールさん
    綴り間違いのご指摘、ありがとうございました。
    修正しました。(^_^;)

    Reply
  4. saimo
    saimo
    2020年9月26日 at 3:38 PM

    記事にして頂きありがとうございます。
    助かりました。

    Reply
    • santane
      santane • Post Author •
      2020年9月29日 at 7:09 AM

      お役に立ててよかったです。

      Reply

三角猫 にコメントする コメントをキャンセル

%d人のブロガーが「いいね」をつけました。