もう、正式なドキュメントを見つけるのは困難ですが、以下のように、mshta.exe を使って、引数に URL の変わりに認識される vbscript: によって、VBScript を実行してクリップボードにアクセスしています。 コマンドプロンプト上の & はそのままではコマンドプロンプトの特殊記号なので ^ でエスケープしていますが、cmd.exe /c 以降で使う場合は、 /c 以降の内容を "(ダブルクォート) で囲う必要があるので注意して下さい。 str と "" を連結しているのは、str が null 等のエラーとなる可能性の値を無条件に文字列と変換する為です。( %temp% はテンポラリフォルダという認識で使用しています )
mshta.exe "vbscript:Execute("str=window.clipboardData.getData(""text""):CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write(str^&""""):close")" > %temp%\clip.txt
Windows7 では、クリップボードへの書き込みは clip.exe で容易に可能ですが、読込みは他のアプリケーションの力を借りないと実現しません。例えば、VBScript 内で実行するのであれば、InternetExplorer.Application を使った以下のような方法も存在します。 ※ clipboardData オブジェクトには、getData と setData メソッドがあります これは、Hey, Scripting Guy! でも紹介されている結構確実な方法で、これ以前より IE を利用したアプリケーションを作成しているプログラマにとっては常識のような内容でした。ただ、昔は IE の性能や PC の性能も悪かったので必ず成功していたかどうかはちょっと疑問が残ります( たぶん今は大丈夫だと思います ) ※ Busy プロパティを使用した記述 ただ、セキュリティ上の理由により、デフォルトのインターネット設定では以下のようなダイアログが出てしまうのでそのままではバッチ処理には使えませんので注意が必要です。![]()
Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate("about:blank") strText = objIE.document.parentWindow.clipboardData.GetData( "Text" ) & "" objIE.Quit Wscript.Echo strText
さらに、正式なドキュメントを見つける事はできませんでしたが、レジストリ情報からすると、どうやら Office 関連の COM らしい htmlfile というものが存在します。( 一応知識として知っておくといいと思います。/ セキュリティの問題はありません )
' Get clipboard text Set objHTML = CreateObject("htmlfile") text = objHTML.ParentWindow.ClipboardData.GetData("text")
VBScript を中心に考えると、最初のコマンドラインを実行した後に、パイプで cscript.exe をつなげて、VBScript 内で標準入力を読み込むという方法もあります。
mshta.exe "vbscript:Execute("str=clipboardData.getData(""text""):CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write(str^&""""):close")"|cscript //nologo g.vbs
g.vbs
Dim Input:Input="" Do While Not WScript.StdIn.AtEndOfStream Input=Input&WScript.StdIn.ReadAll Loop WScript.Echo Input
Visual Studio が使える場合は、以下のリンク先の手順で自作 COM を作成して利用可能です VB.net(VS2010) で COM へ公開して、WSH(VBScript) で利用する( C# でも同様 ) ▼ C# によるテストコード
namespace ClassCom { public class Class1 { Microsoft.VisualBasic.Devices.Computer pc = new Microsoft.VisualBasic.Devices.Computer(); public string Clipboard { get { return pc.Clipboard.GetText(); } set { pc.Clipboard.SetText( value ); } } } }
▼ 実行Set obj = Wscript.CreateObject("ClassCom.Class1") Wscript.Echo obj.Clipboard
|
【コマンド : コマンドの最新記事】
- clip.exe ( クリップボードにコマンドラインからのコマンドの出力をリダイレクトします )
- XCOPY : ディレクトリごと新しいファイルのみをコピーする / Windows コンソールコマンド
- 他のアプリケーションを『管理者権限』で実行するコマンドライン
- コマンドプロンプトで XML整形
- VBS : バッチ処理でディレクトリ(ファイル)の権限を追加したり削除したりする方法
- 7zip のコマンドラインバージョン(7za.exe/920)の -r オプションはワイルドカードを指定した時だけのようです。
- コマンドプロンプト : WAV を mp3 に変換する
- PHP : HTTP コピーコマンド( ダウンロード )
- コマンドプロンプトのカラム数変更