2014年10月11日土曜日

wsh javascript用のメニュー表示


最近ファイル名リネームのスクリプトを書いてたが、冒頭に何種類かの文字列を挿入したかった
wsfにしてvbscriptのInputBoxを使ったりしてたが、もう少し簡単にしたい
ポップアップメニューを出してカーソルで選択したい
しかしいろいろ調べたけどメニューはスクリプト系ではなかなか出せないようだ
ということで、久々にCでメニューだけ表示するexeを作ってみた
いくつか備忘録的にポイントを残しておく

javascriptからexeを起動してそこから戻り値(文字列)をもらう
①まずスクリプト側はexecで起動してStdOutを取得してそこからexeの標準出力をもらう
②exe側はメニューで選択したアイテムの文字列を標準出力に吐き出して終了する

スクリプトはこんな感じ
var WshShell = new ActiveXObject("WScript.Shell");
var oExec = WshShell.Exec("hogehoge.exe");
mojil="";
while (oExec.Status == 0) {
    if (!oExec.StdOut.AtEndOfStream) {
        moji = oExec.StdOut.ReadAll();
         WScript.Sleep(100);
      }
}
exe側で標準出力に吐き出すのは、単純に printf で良かった、これは盲点かな?

ポップアップメニューを縦に分ける
挿入したい文字列はジャンル別にたくさんあったのでメニューを横に分割したかった
調べたらリソース的には
  MENUITEM "ほげ" , 40004 , MENUBREAK
こんな感じ
しかし動的に実装したかったので更に調べたら InsertMenuItem のときの MENUITEMINFO構造体を作るときに 
mii.fType = MFT_STRING|MFT_MENUBREAK
これで行けた

久しぶりでPellesCを弄った
ポップアップメニュー形式のランチャを前に作ったことがあって、それをちょっと弄っただけのものだったが面白かった
でもそれは200708のものだった
7年以上前だったんだなあ、最近全然Cやってなかったな
今の環境になってすぐPellesCの64bitを入れたらなんだかポインタ演算とかが面倒になったような記憶があるんだが、今回は64bitで作った
単純なexeだたせいか何もなく動いた
やりだすとやりたくなるなあ、プログラミング・・・・・
スクリプトとの組み合わせは簡単でいいわ

0 件のコメント:

コメントを投稿