Batch file to VBScript file (2) at 1998 Nov. 02 Interrupt column 1 - MessageBox()  結局、前章で出た奴はAPI関数であるMessageBox()を呼び出していると見て  間違いないだろう。  で、MessageBox() APIのプロトタイプ宣言は:  int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);  である。とすれば前章のように単なる出力だけではなく入力にも使えるはずと、  考えて当然であり、それはおおむね正しい。だが、そっちに話を持っていく  前に、VBの文法にちょっと触れなければならない。  VBではサブルーチンとファンクションが記述できる。前者は戻り値がなく、  後者は戻り値がある。Cで書くと:   void foo(); // これはサブルーチン   int foo(); // これはファンクション   char foo(); // これも当然ファンクション  ということだ。何それぇ。Cだと同じやん?って!?  いや、私にそれを言われても……。とにかくVBは両者に区別があって、  ファンクションを呼び出す場合:   ret = foo(a, b, c, d)  サブルーチンを呼び出す場合:   foo a, b, c, d  なんです。でも何か美しくないでしょう?ということでサブルーチン呼び出しは   Call foo(a, b, c, d)  と、書いても良いことになってます。だから: Set WshShell = Wscript.CreateObject("Wscript.Shell") WshShell.Popup "3秒",3 Call WshShell.Popup("3秒",3)  この2行目と3行目は全く同じだったりする(「何故?」と訊くなかれ。この世には  未だ科学では解明できないことが沢山あるのじゃよ……なんのこっちゃ)。  閑話休題。いやその。個人的に引数が「()」で囲まれたり囲まれなかったりする、  というのは美しくないと思うし、見難いし、誤解を招くし、だからこれからは  サブルーチンコールはCallを使うよ、ってだけなんですけどね。実は(笑) ===  はぁはぁ。上までは単なる枕。ここで私が書かなければならないのはアイコンや  ボタンを意味する定数の説明。  要するにAPIで言う、MB_ICONEXCLAMATIONだとかっていう代物のことだが、これが  やっかいなことに、WSH側では何もAliasされてない。単なる数字なのだ。  AliasはVBA側でされているが、それは困ったことにSDKというかAPIの定義とは  違うのだ。  事態を不必要にやっかい極まるものにしてどうする、という怒りがわき上がる前に、  さすがMS。という諦めが出るのは何故?まぁそれはそれとして。 Buttons WSH VBS API ---------------------------------------------------------------------------- [OK] 0 vbOKOnly MB_OK [OK][Cancel] 1 vbOKCancel MB_OKCANCEL [Abort][Retry][Ignore] 2 vbAbortRetryIgnore MB_ABORTRETRYIGNORE [Yes][No][Cancel] 3 vbYesNoCancel MB_YESNOCANCEL [Yes][No] 4 vbYesNo MB_YESNO [Retry][Cancel] 5 vbRetryCancel MB_RETRYCANCEL Icon WSH VBS API ---------------------------------------------------------------------------- "Stop Mark", (STOP) 16 vbCritical (警告) MB_ICONSTOP MB_ICONERROR MB_ICONHAND "Question Mark", (?) 32 vbQuestion (問い合わせ) MB_ICONQUESTION "Exclamation Mark", (!) 48 vbExclamation (注意) MB_ICONEXCLAMATION MB_ICONWARNING "Information Mark", (i) 64 vbInformation (情報) MB_ICONINFORMATION MB_ICONASTERISK Focus - VBS API ---------------------------------------------------------------------------- 1st 0 vbDefaultButton1 MB_DEFBUTTON1 2nd 256 vbDefaultButton2 MB_DEFBUTTON2 3rd 512 vbDefaultButton3 MB_DEFBUTTON3 4th 768 vbDefaultButton4 MB_DEFBUTTON4 Mode - VBS API ---------------------------------------------------------------------------- アプリモーダル 0 vbApplicationModal MB_APPLMODAL システムモーダル 4096 vbSystemModal MB_SYSTEMMODAL  ここで、何故にFocusとModeの表でWSHとあるべき所が「-」なのかと言うと、  手持ちのWSHの資料には説明がないからである。どうせMessageBox() APIで実行  されるのならWSHモードでもOKそうだが試していない(試せよ>わし)。  蛇足ながら、APIには次の定義もある Others - API ---------------------------------------------------------------------------- &h200000 MB_DEFAULT_DESKTOP_ONLY &h004000 MB_HELP &h008000 MB_NOFOCUS &h080000 MB_RIGHT &h100000 MB_RTLREADING &h010000 MB_SETFOREGROUND &h040000 MB_TOPMOST (Windows NT) MB_SERVICE_NOTIFICATION (Windwos NT) MB_SERVICE_NOTIFICATION_NT3X  さて。ではWSHやVBSでユーザがどのボタンを押したのかを受けようとすれば、  その戻り値は次の通りとなる。 Return WSH VBS API ---------------------------------------------------------------------------- Time out -1 - - [OK] 1 vbOK IDOK [Cancel] 2 vbCancel IDCANCEL [Abort] 3 vbAbort IDABORT [Retry] 4 vbRetry IDRETRY [Ignore] 5 vbIgnore IDIGNORE [Yes] 6 vbYes IDYES [No] 7 vbNo IDNO  タイムアウトは、WSHでだけ定義されている。というか、VBSやAPIでの書き方では  タイムアウトの指定ができないから当然である。 #ふぅ。で、この次の章はChoice -> VBSになるわけやね (EOF)