WSHでMSHTML.HTMLDocumentを扱えた2007年10月14日 05時41分08秒

久々のWSHネタ

via: Windows Script Programming: コマンドラインでHTMLファイルをテキストファイルにする。

うは、こりゃすごい。昔2chのWSHスレで「InternetExplorer.ApplicationをcreateしなくてもMSHTML扱える」っていうようなレスを見たことあったんだけど、具体的にどうやるのか知らなかったが、リンク先の記事にばっちり書いてあった。

こんな方法で取得できるとは...

この記事では、

var htmlfile = new ActiveXObject("htmlfile");
ってな方法でオブジェクトを作成していて、これでMSHTMLのHTMLDocument(=documentオブジェクト)が取得できる。

んで、これのparentWindowを参照するとHTMLWindow2(=windowオブジェクト)があっさり取得できる(ちなみにこのwindowのlocation.hrefはabout:blankだった)。

ちなみにこの操作を行ってもIEのプロセスは起動していなかった。インプロセスでIE相当のオブジェクトを取得できたわけだ。

クリップボード使い放題

WSHでクリップボードを扱う場合はIE経由が定番だったのだが、IEはアウトプロセスサーバのため、インスタンスの生成コストがべらぼーに高く、あんまり手軽に扱えなかった。

が、今回の方法は前述のとおりインプロセス動作のようなので、さくっとwindowオブジェクトにアクセスでき(IE経由の場合と違い、わざわざabout:blankにnavigateしなくてもいいし)、

var ClipUtil = {
	get : function() {
		return new ActiveXObject("htmlfile").parentWindow
			.clipboardData.getData("text");
	},
	set : function(text) {
		new ActiveXObject("htmlfile").parentWindow
			.clipboardData.setData("text", text);
	}
};
なんてユーティリティ作って、さくさくとクリップボードデータが操作できたりする。また、インプロセスだから終わった後にプロセス落とさなくてもいいってのもうれしい。