Как мне перехватить сообщения Windows? - PullRequest
2 голосов
/ 09 февраля 2012

Я делаю программу под названием Pwn16. Он позволяет 16-разрядным приложениям работать в 64-разрядных системах, эмулируя процессор Intel 8086 / Pentium и систему DOS / Win3.x / Win98. Pwn16 использует небольшую загрузочную программу, которая обнаруживает, когда Windows выдает «не 16-битно-совместимые» сообщения (включая сообщение из CMD), и когда она замечает, что указанные сообщения вызваны, она закрывает их и вместо этого автоматически запускает Pwn16. Существуют ли какие-либо библиотеки, которые позволят мне «захватывать» эти сообщения и делать что-то еще вместо ошибок? Я делаю большую часть этого в VB6, поэтому любой код, который может сделать это, также поможет. У меня отключена эмуляция и графический интерфейс, мне просто нужно сделать этот загрузчик, чтобы закончить его. Сообщения, которые мне нужно захватить:

"Версия этого файла несовместима с версией Windows, которую вы используете. Проверьте системную информацию вашего компьютера, чтобы узнать, нужна ли вам версия программы для x86 (32-разрядная) или x64 (64-разрядная) и затем обратитесь к издателю программного обеспечения. "

"Неподдерживаемое 16-битное приложение: программа или функция (файл) не могут запускаться или запускаться из-за несовместимости с 64-битными версиями Windows. Обратитесь к поставщику программного обеспечения, чтобы узнать, подходит ли 64-битная версия, совместимая с Windows. доступны ".

"Это не действительное приложение Win32."

«Невозможно запустить приложение (файл) в режиме Win32.»

Спасибо.

1 Ответ

2 голосов
/ 09 февраля 2012

Насколько я знаю, ни Explorer, ни cmd.exe заранее не проверяют правильность исполняемого файла.Вместо этого они вызывают CreateProcess и, в случае сбоя, просматривают возвращенный код ошибки.

Итак, если вы перехватываете вызовы CreateProcess (или, возможно, )базовый нативный API ) вы должны быть в состоянии перехватить код ошибки, возвращаемый в Explorer / cmd.exe / что угодно, и вместо этого выполнять свои действия.

Я не думаю, что захват сообщения, представляемогопользователь будет полезенПомимо неэффективности, связанной с проверкой каждого диалогового окна и каждого фрагмента текста, записанного на каждой консоли, чтобы выяснить, содержит ли оно искомое сообщение, как бы вы тогда определили, какой файл пытался запустить пользователь?

...