WSHでクリップボードを扱う その1 2012-08-19 (Sun) 23:06

以前の記事 JavaScript整形・圧縮 で貼った JavaScriptを整形してくれるサイト Online JavaScript Beautifier について。

こちらのサイトのJavaScriptの整形処理自体はJscriptで書かれていて、そのソースも公開されている。
サイトで整形したソースは最終的にテキストエディタに貼り付けて扱うわけだから、エディタから直接このスクリプトを呼び出してオフラインで利用できるようにしてみる。

その際、エディタからスクリプトへのソースコードの受け渡しをクリップボードを介して行うことにする。
例えばこんな感じで。
setClipboard(setStr);
var getStr = getClipboard();

ところが、調べてみると残念なことにWSH自体にクリップボードを扱う機能はないらしく、ちょっとした工夫をしないといけないらしい。

で、とりあえずは手っ取り早そうなんで、IEのオブジェクトを使う方法を試してみる。
function setClipboard(str){
var OLECMDID_COPY = 12;
var OLECMDID_SELECTALL = 17;
var IE = new ActiveXObject("InternetExplorer.Application");

IE.navigate("about:blank");
while(IE.Busy) WScript.Sleep(10);
IE.document.body.innerHTML = str;
IE.execWB(OLECMDID_SELECTALL, 0);
IE.execWB(OLECMDID_COPY, 0);
IE.quit();
return;
}
function getClipboard(){
var pastearea, str;
var OLECMDID_PASTE = 13;
var IE = new ActiveXObject("InternetExplorer.Application");

IE.navigate("about:blank");
while(IE.Busy) WScript.Sleep(10);
IE.document.body.innerHTML = "<textarea id='pastearea'></textarea>";
pastearea = IE.document.getElementById('pastearea');
pastearea.focus();
IE.execWB(OLECMDID_PASTE, 0);
str = pastearea.innerHTML;
IE.quit();
return str;
}
setClipboard("Hello& World!!!");
WScript.Echo(getClipboard());

こんな感じでサンプルを書いてみた。


はははは… &が&amp; に、タブがスペースに置き換わってしまったりする。orz
IE.document.body.innerHTML = str;
どうやらここで自動的に変換されてしまうようだ。
まぁhtmlを扱うオブジェクトなんでしゃーないのか。
getClipboard()側で元に戻してやればいいのかも知れんが、変換の規則もよく分からんし却下。

ってなわけでこの方法はよろしくないようだ。(´・ω・`)y-~~~
関連記事

コメントの投稿

管理者にだけ表示を許可する

注意事項
基本的にこのブログはブログ主の備忘録です。

ブログの内容にはブログ主の主観や時には正確でない情報が含まれていることもあります。書いてある内容がすべての環境にあてはまることを保証するものでもありません。
また過去の記事の情報はそれが参照された時点では既に陳腐化していることもあります。

その辺をご理解の上で当ブログ内に書いてあることを試す場合は自己責任でお願いします。

万一何らかの損害が生じても責任は持てませんのであしからず!

記事内容の誤りの指摘、疑問点の回答などコメント頂けると助かります。
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
ブログ内検索
カラーコードチェッカ
カラーコードの確認
入力例) #ffffff | blue
カテゴリ
最新記事
最新コメント
最新トラックバック
リンク
ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文: