Можно ли получить доступ к стандартным строкам Windows, таким как «Отмена»? - PullRequest
16 голосов
/ 11 августа 2010

Я создаю диалоговое окно Windows со стандартными кнопками «ОК» и «Отмена». Учитывая, что Windows использует один и тот же текст кнопок в своих собственных диалогах, есть ли способ выбрать правильные строки для кнопок?

Таким образом, мое приложение будет иметь правильные строки независимо от того, какой язык используется, и мне не нужно будет локализовать его для множества разных языков. Я использую C #, но могу с радостью использовать вызов платформы для доступа к методу ОС, если это необходимо.

ПРИМЕЧАНИЕ. Да, я могу легко локализовать ресурсы, но не хочу их искать, и мне приходится вводить миллионы различных языковых строк, когда они уже должны присутствовать в Windows. Пожалуйста, не отвечайте, сказав, локализовать приложение!

Ответы [ 4 ]

12 голосов
/ 11 августа 2010

В Visual Studio: Файл + Открыть + Файл введите c: \ windows \ system32 \ user32.dll.Откройте узел String Table и дважды щелкните String Table.Прокрутите вниз до 800.

Microsoft занимает довольно многообещающую позицию против использования этих идентификаторов ресурсов.Учитывая количество программистов, которые сделали то, что вы обдумываете, маловероятно, что они когда-либо смогут изменить эти цифры.Вам нужно будет выполнить P / Invoke LoadLibrary () и LoadString ().

Однако, в конечном итоге, в этом плане вы столкнетесь с Vista / Win7 Ultimate с языковыми пакетами MUI.Что позволяет пользователю переключаться между языками без обновления строк ресурсов в библиотеках DLL.Такое издание всегда будет иметь английские строки.

3 голосов
/ 11 августа 2010

Хорошо, если вы используете стандартную функцию MessageBox.Show() и передаете ей соответствующие параметры, она автоматически локализует кнопки yes / no / okay / cancel .

Что более интересно, так это как вы локализуете текст сообщения.

1 голос
/ 24 апреля 2017

см. MB_GetString, который утверждает, что делает именно это:

https://msdn.microsoft.com/en-us/library/windows/desktop/dn910915(v=vs.85).aspx

однако, похоже, требуется связывание во время выполнения:

http://undoc.airesoft.co.uk/user32.dll/MB_GetString.php

1 голос
/ 11 августа 2010

Нет, нет стандартного, поддерживаемого способа сделать это.Да, Windows хранит эти строки, и их можно (с некоторыми усилиями) получить, но нет гарантии, что они будут оставаться в одном и том же месте и с одним и тем же идентификатором от версии к версии.

ХотяВы не могли бы хотеть , чтобы это было ответом, ответ, действительно, локализовать ваше приложение.Если вы локализуете все остальное (как вам нужно, если вы просто не хотели бы OK и Cancel быть локализованным), я не уверен, почему это было бы большим усилием длявключая локализованные значения для OK и Cancel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...