2024年2月1日木曜日

VBA の Keybd_Event のパラメタの件

画面のハードコピー(スクリーンキャプチャ)を撮って、自動で印刷したくて、(画面ハードコピーツール)エクセルのマクロを作ったときにちょっとはまった。

多くの参考Web上では、第2パラメタを「使用しないので、常に0を指定。」としていることが多いのですが、私が参考にしたのはちょっと違いました。

多い解説

Sub 全画面()
    keybd_event &H2C, 0, 0, 0        'Print screen押す
    keybd_event &H2C, 0, 2, 0        'Print screen上げる
End Sub 

Sub アクティブウインドウのみ()
    keybd_event &H12, 0, 0, 0        'ALT押す
    keybd_event &H2C, 0, 0, 0        'Print screen押す
    keybd_event &H2C, 0, 2, 0        'Print screen上げる
    keybd_event &H12C, 0, 2, 0        'Print screen上げる
End Sub 

この第2パラメタを「1」にすれば、「ALT」を押しながら「PrintScreen」=アクティブウインドウのみになります。

Sub アクティブウインドウのみ()
    keybd_event &H2C, 1, 0, 0        'Print screen押す
    keybd_event &H2C, 1, 2, 0        'Print screen上げる
End Sub 

'MSの解説の意訳
keybd_event  bVk, bScan, dwFlags, dwExtraInfo
bVk=仮想キーコード(16進のキーコード)
bScan=キーのハードウェア スキャン コード(意味は不明だが、PrintScreenの時はとりあえず使える。)
dwFlags=関数操作のさまざまな側面を制御します。 このパラメーターには、次の 1 つ以上の値を指定できます(意味は不明だが、「0」を指定すれば、キーを押し下げ、「1」を指定すれば、押している(指定した)キーを放します。)
dwExtraInfo=意味不明かつ使い道不明