HSP3掲示板より。HSPのdialog命令(タイプ0・1・2・3)で用意できるダイアログボックス(メッセージボックス)上のボタンの文字列を変更してみる。

 [はい]、[いいえ]、[キャンセル]というような文字は、そもそもシステムが用意してるものなので、基本的に変更は無理です。たとえば、英語圏Windowsならここは[Yes]、[No]、[Cancel]と現地の単語で表示されます。(HSP標準のbutton命令やobjprm命令を使ってどうこうできるものではないです。)

 で、あえてやるとすれば、HSPのscreen命令で自前のダイアログ風ウィンドウを用意して再現する、あるいは「フック関数」を利用します。HSP3はフックするのに必要なコールバック関数に標準で対応しとらんイメージ 1 ので、ひとまずちょくとさんが作成されたHSP拡張プラグイン「hscallbk.dll」を使ってダイアログをフックするHSP3スクリプトコードです。

 Win32 APIのMessageBox関数については、おなじくちょくとさんとこ参照。イメージ 2


/*
 MessageBox関数+フック
by 無題な濃いログ  (Thanx
jack_sonicのブログさんのCコードを移植)
*/

#include "user32.as"
#include "kernel32.as"

#include "hscallbk.as"

#uselib ""
#func MsgBoxHookProc "" int, int, int

#define WH_CBT 5
#define MB_OKCANCEL 1
#define HCBT_ACTIVATE 5

 setcallbk Proc, MsgBoxHookProc, *OnMsgBoxHookProc

 button "", *show

 stop


*show
 GetCurrentThreadId
 SetWindowsHookEx WH_CBT, varptr(Proc), 0, stat
 MyHookHandle = stat

 MessageBox hwnd, "フックメッセージボックス", "HookedMsgBox", MB_OKCANCEL
 mes stat

 stop


*OnMsgBoxHookProc
 if callbkarg(0) = HCBT_ACTIVATE {
  SetDlgItemText callbkarg(1), 1, "あへ~" ; [はい]のところ
  SetDlgItemText callbkarg(1), 2, "うへ~" ; [いいえ]のところ

  UnhookWindowsHookEx MyHookHandle
 }

 CallNextHookEx MyHookHandle, callbkarg(0), callbkarg(1), callbkarg(2)
 return stat