如何使用带 Python 的 MessageBoxExW 更改 MB_OKCANCEL 按钮文本 (Windows API) 中的语言?

How to change language in MB_OKCANCEL buttons text (Windows API) using MessageBoxExW with Python?

我有一个显示带有两个按钮(确定和取消)的 window 的应用程序,我以前用英文使用它,但现在我想用中文显示确定和取消按钮的文本。

我的原始代码是:

if win32con.IDOK == win32gui.MessageBox(self.hwnd,self.dic.voc["mainwin.quitConfirm"],
                                       self.dic.voc["mainwin.quitConfirmTitle"],
                                       win32con.MB_OKCANCEL):

现在我正在尝试使用 MessageBoxExW 函数,因为在 API 页面中说您可以在最后一个参数 (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxexw) 中使用任何语言。

所以现在我的代码如下:

lang = win32api.MAKELANGID(4, 2)
if win32con.IDOK ==ctypes.windll.user32.MessageBoxExW(self.hwnd,self.dic.voc["mainwin.quitConfirm"], self.dic.voc["mainwin.quitConfirmTitle"], win32con.MB_YESNO, lang):

但是它继续显示英文文本按钮,而不是中文,我也在我的电脑中设置了区域和语言,中文(简体,中国)'Formats'和'System Locale'. 我的脚本被编码为 'UTF-8'.

当我运行这个,

locale.getdefaultlocale(["LANGUAGE"])

我得到,

('zh_CN', 'cp936')

如果有任何帮助或线索,我将不胜感激。非常感谢。

如果您使用的是Windows 10,您需要在Windows中安装指定语言的语言包。

它不一定是默认显示的语言,但它需要在已安装的语言包中。

非常感谢您的帮助!

最后,我可以使用名为 Vistalizator 的应用程序安装我需要的语言包,因为我没有 MUI,因为我使用的是 Windows 7 Professional(而且我无法通过 Microsoft 安装它更新)。您只需要此应用程序和您正在使用的 Windows 版本的语言包;您可以从同一页面下载两者 (https://www.froggie.sk/es/details.html)。

在应用程序中 select 下载包含语言包的 exe 文件,更改为快速模式并按照应用程序步骤进行操作。

最后我可以看到我需要的语言的文本按钮,并且使用 MessageBoxExW 函数,它起作用了!非常感谢您的帮助。