Есть ли ключ, ограничивающий вывод предупреждений?

Вопросы настройки, запуск любых Windows-программ, кроме игр

Модератор: Модераторы разделов

bluesman
Сообщения: 2137
Статус: Блюзмен
ОС: Ubuntu 9.10

Есть ли ключ, ограничивающий вывод предупреждений?

Сообщение bluesman »

Здравствуйте!

Определенная программа и в винде и в линуксе под вайном перед запуском выдает друг за другом порядка 15 окошек с предупреждениями, мол в таком-то файле такая-то строка многократно определена. Файл отвечает за русификацию и где-то разработчики там накосячили, но это не важно, ведь после того как раз 15 нажать на кнопку ОК, программа запускается.

В чем вопрос: можно ли запускать из под вайна эту прогу с каким-нибудь дополнительным ключем, чтобы эти предупреждения перед запуском не выводились и прога сразу запускалась?

Спасибо!
Спасибо сказали:
Hoblin
Модератор
Сообщения: 1442
Статус: Etersoft team
ОС: ALT Linux

Re: Есть ли ключ, ограничивающий вывод предупреждений?

Сообщение Hoblin »

Если такие ключи и предусмотрены, то они могут быть только в самой программе, не в wine.

Если решать проблему со стороны вайна, то это потребует вмешательства в код и ручной пересборки вайна. Можно убивать такие окошки на стадии их появления: найти признак, по которому можно однозначно определить это окно (например, текст сообщения или заголовок окна для MessageBox), и при создании сразу отправлять ему сообщение о нажатой ОК. Пользовался таким способом пару раз, до сих пор не вызывает нареканий, работает больше полутора лет.
Спасибо сказали:
bluesman
Сообщения: 2137
Статус: Блюзмен
ОС: Ubuntu 9.10

Re: Есть ли ключ, ограничивающий вывод предупреждений?

Сообщение bluesman »

Hoblin
Можно по-подробнее, как глушить окошки на стадии появления? Это нужно где-то прописывать?
Спасибо сказали:
Hoblin
Модератор
Сообщения: 1442
Статус: Etersoft team
ОС: ALT Linux

Re: Есть ли ключ, ограничивающий вывод предупреждений?

Сообщение Hoblin »

Самый простой случай. Выясняем, что действительно назойливое окошко - ничто иное, как обычный MessageBox. Убеждаемся в этом, например запустив trace по каналу +relay (подробнее - в один из вопросов FAQ). Смотрим, что вызван MessageBoxA (к примеру) с параметрами, содержащими сообщения назойливого окошка.
Берём исходники, dlls/user32/msgbox.c, ищем там нужную функцию. И дописываем строки вроде

Код: Выделить всё


if(!strncmp(text,"начало нашего надоедливого сообщения",sizeof(char)*13))
    return IDOK;

Перекомпилируем библиотеку, пользуемся.

P.S. Ужасно дерзкий хак, но иногда спасает.
P.P.S. Возможно, какие-то ссылки, подробности, большие участки кода и файлы стоит в ЛС обсудить, если вопросы будут?
Спасибо сказали: