「VBA SendKeys Windowsキー」といったキーワード検索でのアクセスがありました。
たしかに「SendKeys “{WIN}”」や「SendKeys “{LWIN}”」といったコードを実行してもエラーになるだけなので、Windowsキーを送信したいときはどうすれば良いのか悩んでしまうかもしれませんが、Wikipediaにも書かれているように、「Ctrl + Esc」キーを押すことでもWindowsキーを押したときと同様にスタートメニューを表示させることができます。
Public Sub Sample() SendKeys "^{ESC}" 'Ctrl + Escキー End Sub
しかし、Windowsキーを組み合わせたショートカットキー、たとえば「Windows + M」キーを押したい場合、「SendKeys “^{ESC}M”」を実行しても上手くいきません。
そういった場合は下記のようにkeybd_event関数を使うことで処理を実行することができます(下記コードは32ビット環境向けです)。
Private Declare Sub keybd_event Lib "user32.dll" ( _ ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Private Const KEYEVENTF_KEYUP = &H2 Private Const VK_LWIN = &H5B Public Sub Sample2() keybd_event VK_LWIN, 0, 0, 0 keybd_event vbKeyM, 0, 0, 0 keybd_event VK_LWIN, 0, KEYEVENTF_KEYUP, 0 keybd_event vbKeyM, 0, KEYEVENTF_KEYUP, 0 End Sub
ただ、ウィンドウの最小化をしたいだけなら、ShellオブジェクトのMinimizeAllを使った方が簡単で確実です。
Public Sub Sample3() CreateObject("Shell.Application").MinimizeAll End Sub
SendKeysでWindowsキーを送信して何かを実行したいときは、まずは上記のような別の方法を探してみることをお薦めします。
2017/1/8 追記:
Windows 10でスケッチパッドを起動する場合は、下記記事をご参照ください。
(VBScript – 「Windowsボタン + W」をSendkeyしたい。)
この記事へのコメントはありません。