ラベル WSH の投稿を表示しています。 すべての投稿を表示
ラベル WSH の投稿を表示しています。 すべての投稿を表示

2008/03/02

短いホットキーを設定する

スタートアップに登録する Polipo へのショートカットに、ショートカットキー S が設定されていました。ひでー。 polipo 入れてみた on WindowsXP - 母方の祖母にフル・ネルソン日記

引用もとのエントリーの主たる内容とは全然関係ありませんが、存じませんでしたので調べてみました。WSHで好きに変更できるみたいです。

var sh = WScript.CreateObject("shell.application"); var fl = sh.NameSpace("C:\\"); var sc = fl.parseName("test.txt.lnk").getlink; sc.hotkey=65; // "A" sc.save(); //Alt =1024 //Ctrl = 512 //Shift = 256 //A = 65 //Z = 90 //F1 = 112 //F2 = 113 //PgUp = 33 //PgDn = 34 //End = 35 //Home = 36 //Ins = 45 //Del = 46 //Pause = 19 //SclLc = 145 //Tab = 9

最後にsave()しないと反映されません。うっかり忘れると小一時間半泣きになります。

2008/01/01

WSHの暗黙の最上位オブジェクトはscriptlet

a.hanai 公開モノ置き場 | scriptletオブジェクト
WSHにおける最上位オブジェクトとして「scriptlet」オブジェクトというモノが存在します。

HTMLの(中でJavaScriptを使う)場合、宣言なしにwindowオブジェクトが使えますが、JScriptの場合このwindowオブジェクトはありません。

JScriptの場合、WScriptが最上位のオブジェクトと説明するサイトもありますが、windowと同様の暗黙オブジェクトとされるなら、echoを書くたびにWScriptのSを小文字で誤タイプしてキレたりする必要はなくなりそうなもんですし、関数がWScriptのメンバになっても良さそうなもんです。

function main(){} WScript.echo(typeof WScript["main"]); // undefined

つまりこのコードでundefinedではなく、functionが返ってきて欲しいわけです。

で、実際に上記のサイトどおりscriptletを参照するとそのような動きになります。

<job> <script language="JScript"> function main(){} WScript.echo(typeof scriptlet["main"]); // function </script> </job>

ただし、これはwsfの場合でjsの場合、やっぱり使えません。

function main(){} WScript.echo(typeof WScript["main"]); // undefined WScript.echo(typeof scriptlet["main"]); // error('scriptlet'は宣言されていません)

ラッパークラスを作るような、ある程度の規模のコードならどっちにしろJScript単体では無理があるので、wsfの方を使えということでしょうか。ただ、複数ライブラリを読み込むようなある程度の規模のwsfファイルでグローバルな名前空間は逆にあんまり使いたくないですね。