MessageBoxEx用法

来源:互联网 发布:软件开发基础 编辑:程序博客网 时间:2024/06/03 17:52

今天突然碰到一个来自HUAWEI的“变态”需求,一个自解压小工具,同事是用NSIS做的,就释放了几个文件,然后弹一个对话框提示修复完成,但是HUAWEI要求该对话框不论是在中文操作系统还是英文操作系统上都要显示为英文。同事开始问我NSIS如何设置语言,后来看了下,NSIS的语言设置是处理其安装向导页面的显示语言的,而现在要求的是用MsgBox 弹窗提示文字全部为英文,于是感觉到,::MessageBox应该有高级点的用法,可以设置显示语言的,

查阅MSDN,发现

int WINAPI MessageBox(  _In_opt_ HWND    hWnd,  _In_opt_ LPCTSTR lpText,  _In_opt_ LPCTSTR lpCaption,  _In_     UINT    uType);
这里只有四个参数,没有设置语言选项的参数,于是看了下跟这个相关的API

See also

Reference
MessageBoxEx
MessageBoxIndirect
SetForegroundWindow
居然有个带Ex的API

int WINAPI MessageBoxEx(  _In_opt_ HWND    hWnd,  _In_opt_ LPCTSTR lpText,  _In_opt_ LPCTSTR lpCaption,  _In_     UINT    uType,  _In_     WORD    wLanguageId);

要的正是这个,于是接着看wLanguageId相关的

To specify a language other than the current language, use the MAKELANGID macro to create this parameter. For more information, see MAKELANGID.

WORD MAKELANGID(   USHORT usPrimaryLanguage,   USHORT usSubLanguage);

0x0004Chinese (zh)0x04LANG_CHINESE_SIMPLIFIEDSimplified (Hans)0x02SUBLANG_CHINESE_SIMPLIFIED0x7C04Chinese (zh) LANG_CHINESE_TRADITIONALTraditional (Hant)0x01SUBLANG_CHINESE_TRADITIONAL0x0483Corsican (co)0x83LANG_CORSICANFrance (FR)0x01SUBLANG_CORSICAN_FRANCE0x001ACroatian (hr); see note 20x1ALANG_CROATIANNeutral  0x101ACroatian (hr)0x1aLANG_CROATIANBosnia and Herzegovina, Latin (BA)0x04SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN0x041A   Croatia (HR)0x01SUBLANG_CROATIAN_CROATIA0x0405Czech (cs)0x05LANG_CZECHCzech Republic (CZ)0x01SUBLANG_CZECH_CZECH_REPUBLIC0x0406Danish (da)0x06LANG_DANISHDenmark (DK)0x01SUBLANG_DANISH_DENMARK0x048CDari (prs)0x8CLANG_DARIAfghanistan (AF)0x01SUBLANG_DARI_AFGHANISTAN0x0465Divehi (dv)0x65LANG_DIVEHIMaldives (MV)0x01SUBLANG_DIVEHI_MALDIVES0x0813Dutch (nl)0x13LANG_DUTCHBelgium (BE)0x02SUBLANG_DUTCH_BELGIAN0x0413   Netherlands (NL)0x01SUBLANG_DUTCH0x0C09English (en)0x09LANG_ENGLISHAustralia (AU)0x03SUBLANG_ENGLISH_AUS0x2809   Belize (BZ)0x0ASUBLANG_ENGLISH_BELIZE0x1009   Canada (CA)0x04SUBLANG_ENGLISH_CAN0x2409   Caribbean (029)0x09SUBLANG_ENGLISH_CARIBBEAN0x4009   India (IN)0x10SUBLANG_ENGLISH_INDIA0x1809   Ireland (IE);see note 30x06SUBLANG_ENGLISH_EIRE0x1809   Ireland (IE);see note 30x06SUBLANG_ENGLISH_IRELAND0x2009   Jamaica (JM)0x08SUBLANG_ENGLISH_JAMAICA0x4409   Malaysia (MY)0x11SUBLANG_ENGLISH_MALAYSIA0x1409   New Zealand (NZ)0x05SUBLANG_ENGLISH_NZ0x3409   Philippines (PH)0x0DSUBLANG_ENGLISH_PHILIPPINES0x4809   Singapore (SG)0x12SUBLANG_ENGLISH_SINGAPORE0x1c09   South Africa (ZA)0x07SUBLANG_ENGLISH_SOUTH_AFRICA0x2C09   Trinidad and Tobago (TT)0x0BSUBLANG_ENGLISH_TRINIDAD0x0809   United Kingdom (GB)0x02SUBLANG_ENGLISH_UK0x0409   United States (US)0x01SUBLANG_ENGLISH于是做了个简单的测试

::MessageBoxEx(NULL, NULL, NULL, NULL, MAKELANGID (LANG_ENGLISH, SUBLANG_ENGLISH));

管用,“确定”显示为OK,要的就是这个效果

兴奋中,本能的想法就是写个NSIS的插件,调用下这个带EX的API,

后来上了个厕所回来发现自己刚才傻了,直接在NSIS调用这个API就行了嘛




1 0
原创粉丝点击