VBAオジサンのらくがき帳

SendKeysの使い方

2021-08-09 00:00:00

SendKeysステートメントを使うと、キーボードを使ったように画面に対して入力することができます。あまり仕事では使わないかもしれませんが、アイディア次第でおもしろい機能がつくれるかもしれません。

文字以外のキーは下のように{}で囲んだ文字列を使います。( {PRTSC} はうまく機能しないようです。)

BACKSPACE: {BACKSPACE}, {BS}, or {BKSP}
BREAK: {BREAK}
CAPS LOCK: {CAPSLOCK}
DELETE: {DELETE} or {DEL}
END: {END}
ENTER: {ENTER} or ~
ESC: {ESC}
HELP: {HELP}
HOME: {HOME}
INSERT: {INSERT} or {INS}
NUM LOCK: {NUMLOCK}
PAGE DOWN: {PGDN}
PAGE UP: {PGUP}
PRINT SCREEN: {PRTSC}
SCROLL LOCK: {SCROLLLOCK}
TAB: {TAB}
↓: {DOWN}
↑: {UP}
←: {LEFT}
→: {RIGHT}
F1 から F16: {F1} から {F16}

キーを押しながらの入力には下の記号を使います。(+,^,%の入力には{+} ,{^},{%}を使います。)

この機能利用してクリップボードからペイントを使って画像ファイルを保存するコードを作りました。スクリーンショットを取得した後に実行すると、デスクトップにscreenshot_時刻.jpgという名前でファイルが作成されます。

Sub SaveImageFromClipboard()
    Dim taskid As Variant
    Dim cb As Variant

    'クリップボードの中身を確認
    cb = Application.ClipboardFormats
    If cb(1) = -1 Then
        Exit Sub
    End If
    If cb(1) <> xlClipboardFormatBitmap Then
        Exit Sub
    End If

    taskid = Shell("mspaint.exe", vbNormalFocus) 'ペイントを開く
    Application.Wait Now + TimeValue("00:00:01") '開くまで1秒まつ
    AppActivate taskid 'ペイントをアクティブにする

    SendKeys "^v" '貼り付け
    SendKeys "+^x" 'トリミング
    SendKeys "^s"
    SendKeys Environ("USERPROFILE") & "\Desktop\screenshot_" & Format(Now, "yymmddhhmmss") & ".jpg"
    SendKeys "{ENTER}"
    SendKeys "%{F4}" 'ペイントを閉じる
End Sub