VBScript でクリップボードを読み書きする方法

Windows のネイティブ・スクリプトのはずなのに、なんと VBScript にはクリップボードを操作するコマンドがありません。
そこで、ちょっとした工夫が必要になるわけですが、今のところ64ビットパソコンのWindows 10でも動作する方法を。

VBScriptでコピー:クリップボードに文字列を送る

Windows のコマンドの中に clip.exe という、標準入力をクリップボードに送ることに特化したものがあります。
これを VBScript から操作してみることにしましょう。

以下のスクリプトを SetClip.vbs など .vbs の拡張子で保存して実行してください。
(アイコンが水色に変わったら、拡張子がきちんと変更されています。)

'クリップボードに文字列を送る
With CreateObject("Wscript.Shell").Exec("clip")
  .StdIn.Write "あいうえお"
End With

もちろん、あいうえおのところはコピーしたい文字列に変更してください。

2点注意点があります。
・一瞬黒いウィンドウが現れますが、このウィンドウは消せないです。
・コピーする際に微妙に時間がかかります。上記でコピーしたあと、すぐに次の処理に以降するとコピーが完了していない可能性もあるので、そのときは WScript.Sleep 100 (0.1秒ストップ)などを入れてください。

VBScriptでペースト:クリップボードの文字列を取得する

ペーストという言葉の使い方がこの場合正しいかどうかは気にしないでもらうこととして、HTMLファイルを操作するために Windows の中に密かに組み込まれているものを使いましょう。

以下のスクリプトを GetClip.vbs など .vbs の拡張子で保存して実行してください。

'クリップボードの文字列を取得する
With CreateObject("htmlfile")
  ClipData = .ParentWindow.ClipboardData.GetData("text")
End With
MsgBox ClipData

これでクリップボードの中の文字列がメッセージボックスで表示されます。

なお、このやり方で GetData の代わりに SetData を使うと黒いウィンドウを出さずにコピー処理ができるのではと考えたのですが、処理は成功するのにクリップボードの中身が変わりません。
このあたりは私などには伺いの知れない深遠なる事情がありそうです。

タイトルとURLをコピーしました