LoginSignup
2
1

More than 3 years have passed since last update.

VBからWindowsキー+Shift+Sを送信し、範囲指定スクリーンショットを行う

Last updated at Posted at 2019-04-27

今回の環境
Windows10(2017年4月以降のアップデートが適用済)
Microsoft Visujal Studio Community 2017

VB SendKeys Windowsキーなどで検索すると
VBからWindowsキーを操作する方法としてSendKyesを使用する方法が紹介されていますが

SendKeys.Send("^{ENTER}")   'Ctrl + Escキー

これはWindowsキーが一般的なキーボードに搭載されてい無かった時代にWindowsキーの代替する方法としてCtrl+EscでWindowsキーと同じ動作が割り当てている名残であり、実際のWindowsキーが押されている状態と同じではありません。

その為、昨今のWindowsキー+「何かのキー」(Windowsキー+E でエクスプローラ起動)といったショートカットには対応していません。

Windows10の2017年4月以降のアップデートで新たに搭載された「Windows+Shift+S」をエミュレートしてみたいと思います。
(「Windows+Shift+S」は画面のスクリーンショットを範囲指定で取得する機能です。)

よく同様の機能を実装する為にWin32APIを使用する方法で ByVal dwFlags As Long, ByVal dwExtraInfo As Long と宣言されている例がありますが、
2019年4月現在では正常に動作せずLongで宣言している部分をIntegerで宣言する必要があります。
ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer

また、キーを押す操作の後にキーをあげる操作を忘れるとフォームを終了するまでキーが押されたままの状態になりWindows自体の動作がおかしくなりますので必ずキーをあげる操作を忘れないでください。

Public Class Form1
    Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click   '今回はボタンクリックイベントですが他のイベントでも可能です。

        Call keybd_event(&H5B, 0, 0, 0) 'Windowsキーを押す
        Call keybd_event(&H10, 0, 0, 0) 'Shiftキーを押す
        Call keybd_event(83, 0, 0, 0) 'sキーを押す

        Call keybd_event(&H5B, 0, 2, 0) 'Windowsキーをあげる  『キーをあげる操作を忘れないようにしてください』
        Call keybd_event(&H10, 0, 2, 0) 'Shiftキーをあげる    『忘れるとプログラムを終了するまでWindowsの動作がおかしくなります』
        Call keybd_event(83, 0, 2, 0) 'sキーをあげる

    End Sub
End Class

Windowsキーと組み合わせるキーとしてShiftキーやSキーの代わりに別のキーにすることにより、別のショートカットキーを実現することもできます(Windowsキー+Rで「ファイル名を指定して実行」を起動するなど)

参考にしたサイト
https://www.petitmonte.com/visualbasic/vbapi_keybdevents.html

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1