拾ったTIPS3連発 ― 2007年06月01日 15時00分14秒
メルマガ解除のTIPS
/.Jの表題のネタより、楽■のメルマガ解除のTIPSが。へえ~。
コマンドラインから電源操作
こりゃ便利。コマンドラインから使えるってことはWSH/HTAからもできるわけだ。記事ではWinXP/Server 2003対応となっていたが、休止はWin2Kでもうまくいった。
WScriptオブジェクトをHTAなどから利用
Windows Script Programming: WindowsアプリからWScript.exeのWScriptオブジェクトを利用する。
これはすごい!なんのことかわからない人がいるとなんなので一応説明すると、
- WScriptオブジェクトはWSH環境固有のオブジェクト(というよりホストオブジェクト自体)なので、同じようにVBScript/JScriptエンジンを利用するHTAやIEから直接利用できない。
- WScriptオブジェクトにはSleepメソッドや標準入出力へのアクセス機能がある
ざっとコードと解説を眺めたところ、要点は
- WScriptオブジェクトの参照を、IE(InternetExplorer.Application)オブジェクトを仲介として共有する
- WScriptの参照をIEにセットするには、PutPropertyメソッドを利用する
- 仲介に使用するIEオブジェクトはhWnd(ウィンドウハンドル)を利用する
- IEオブジェクトの検出にShell.Application(Shellオートメーションオブジェクト)を使用する
記事中ではWinアプリからWScriptを利用しているが、これ、多分逆も可能で、コンソールスクリプト向けのダイアログHTAを作ったりできるんじゃなかろうか。
まだJSで試してないので後で試す予定。
今日のトラックバック - つくばエクスプレス ― 2007年06月01日 17時25分58秒
久々にスルーできませんでした。またもsbloです。
タイトル:つくばエクスプレス 内容:つくばエクスプレス開通によって選択肢が広がった つくば&アキバお勧めマンスリー
タイトルも内容も特に目を引くところはないのだが、どうしてシリコングリスすげぇにトラックバックするのか。(追記:考えてみたらアキバつながりだわな)
まあ、それはいいとしても、ホストが「tukubaekusu」とは。
それもいいとしても、エントリが3つとは。しかも最新エントリが2007/05/06で、出だしが
去る8月24日、つくばエクスプレスが開業しました。とは。
そこまではいいとしても、唯一のカテゴリ「つくばエクスプレスについて」の件数が0ってどうよ。どっかからのコピペ記事だとしてもさー、カテゴリくっつけるくらいやってもいいじゃん。もうすこしがんばろうよ。
とりあえずのリンク記事 ― 2007年06月01日 23時02分00秒
あー、また「雑記」カテゴリ増やすだけのエントリだよ。スクリプト書く時間が欲しい。
いいこといった!
いや、気持ちいい。
変な正規表現を使ったチェックは弊害しか生まない。とか、
俺は命に代えてもメアドの正しさを検証したい、ってことなら例えばメアドだけ先に入力させる→URL書いたメール送る→登録作業続きってすれば、ちゃんと裏も取れてるし、メアドの正しさだけはきちんと保証される(実例: mixiの招待)。とかね。
まあ別にバリデーションイラネとか思ってるわけじゃないが、一理あるかと。
めずらしくTechnobahnから
Technobahn ニュース : 人には見せられない世界最大規模の科学実験施設
宇宙人付とかでにわかに大人気のGoogle Mapsで、ものすごい勢いで”電磁波実験施設”を秘密にしてるの見っけた、てな記事。
へえ~、と感心するも、GIGAZINEで既に取り上げられてたり。
追記:スタートフォースがGoogle Gearsに関心あるみたい
いかん、これ抜かしてPOSTしちまった。
サービス本体もそうだけど、開発環境をGears対応とかにしたら開発者増えるんじゃね?どうかなぁ。
電源操作 ― 2007年06月02日 05時16分27秒
がさっと作ってみますた
昨日のエントリで拾ったコマンドラインから電源操作ネタでちょっとしたスクリプトを書いてみた。
なんのひねりもないクラス名だが、こんな感じ。
var PowerManager = function() { this.initialize.apply( this, arguments ); } PowerManager.prototype = { initialize : function() { this.shell = new ActiveXObject("WScript.Shell"); }, shutdown : function() { this.shell.Run( "shutdown -s -t 0" ); }, reboot : function() { this.shell.Run( "shutdown -r -t 0" ); }, suspend : function() { this.shell.Run( "rundll32 powrprof.dll,SetSuspendState" ); } }つか、そもそもクラスにする意味ないっちゃないし。気にしないで。
使い方
もう、見てのとおり。shutdown()でシステム終了、reboot()で再起動、suspend()で休止状態(またはサスペンド)。
WshShell#Runでさくっとコマンド呼び出ししてるだけなので、shutdownとrebootは一瞬コンソールが表示される。どうせシステム終了するので放っておいてるが、気になるなら
shutdown : function() { this.shell.Run( "shutdown -s -t 0", 0 ); }とかしておけば非表示実行できる。と思う。試してないけど。
応用例
というか、サンプルスクリプト。ショートカットを作って、渡すパラメータを変えて使うとかね。
var PowerManager = function() { this.initialize.apply( this, arguments ); } PowerManager.prototype = { initialize : function() { this.shell = new ActiveXObject("WScript.Shell"); }, shutdown : function() { this.shell.Run( "shutdown -s -t 0" ); }, reboot : function() { this.shell.Run( "shutdown -r -t 0" ); }, suspend : function() { this.shell.Run( "rundll32 powrprof.dll,SetSuspendState" ); } } // コマンドライン引数によって動作を決定 var p = WScript.Arguments.Unnamed.Length ? WScript.Arguments.Unnamed.Item(0) : "s"; var pm = new PowerManager(); var method = { s : "shutdown", r : "reboot", p : "suspend" }[ p ] || "shutdown"; pm[ method ]();
注意事項つか
手持ちのPCのみの現象かもしらんが、shutdown()を実行すると「電源を切ってもよい」状態になるだけで実際に電源が切れない。他所様の環境ではわからん。
COMWinLibってなんやねん ― 2007年06月03日 17時52分17秒
経緯
Google Gearsをインストールしたら、IE向けにはDLLが1個入るだけみたいだった。これ多分COMだろうな、と思ってVBAでオブジェクトブラウザを立ち上げてみたら、やっぱり「GearsTypelib」とやらができているので、COMでなんかできるっぽい。
で、ライブラリ探してるときに「Earth 1.0.Type Library」とかいろいろと興味深いものがちらほらと見つかったのだが、そのなかの1つに「COMWin 1.0.Type Library」てのがあった。
ライブラリの場所を見たところ、Microsoft Script Debuggerについてきてるやつみたいだ。(昔インストールしていた)
見てみよう
さっそくオブジェクトブラウザで開いてみると、「COMWindow」ってオブジェクトがあり、これが「CreateWindowEx」だの、「FindWindowEx」だの、ActiveXにあるまじき名前のメソッドが実装されてるっぽい。なんじゃこりゃーー。
newしてみる
ともかく、
var cw = new ActiveXObject("COMWinLib.COMWindow");としてみると、「オートメーション サーバーはオブジェクトを作成できません」。 はて、したらこれでどうだ。
var cw = new ActiveXObject("COMWindow");おお、エラーでないよ。これでいいんか。
ほんじゃまず引数取らないやつから試すか。
var w = cw.GetDesktopWindow();「オブジェクトでサポートされていないプロパティまたはメソッドです」だそうだ。はて?
VBS経由して型を調べてみたら、COMWindowではなくIWindowDispになっていた。ほんじゃそっちのメソッドを試してみよう。
cw.IsWindow(); // → false cw.IsWindowEnabled(); // → false cw.IsWindowVisible(); // → falseぜんぜんだめじゃん。お、「GetParent()」なんてのがある。
var p = cw.GetParent(); // → pもIWindowDisp p.IsWindow(); // → false p.IsWindowEnabled(); // → false p.IsWindowVisible(); // → falseなんじゃそれ。
情報がほしい...
まぁ、メソッドの定義とか見てると、引数の中に
uType AS <サポートされていないバリアント型>とかorzな記述があったりで、WSHからシンプルに使えるライブラリじゃなさそうなんだけど、「COMWinLib」とか「comwin.dll」とか見てもほとんど情報が見つからないのでものすごく気になってる。
追記:「サポートされないバリアント型」はIWindowDisp#MessageBoxにあったんだが、VC#2005でtlbimpしてみたらuintとかでマーシャリングされてたのでふつーにNumber渡して問題なかった。
だれかなんか情報しらないかなー
最近のコメント