2012-02-09 122 views
2

我正在制作一个名为Pwn16的程序。它允许通过模拟Intel 8086/Pentium处理器和DOS/Win3.x/Win98系统,在64位系统上运行16位应用程序。 Pwn16使用一个小型装载程序来检测Windows何时发出“不兼容16位”的消息(包括来自CMD的消息),以及何时通知所述消息被召唤,它会关闭它并自动启动Pwn16。 是否有任何库让我“捕获”这些消息并在错误的位置执行其他操作?我在VB6中做了大部分工作,所以任何可以做到这一点的代码也会有所帮助。我有模拟和图形用户界面,我只需要完成这个加载程序来完成它。 我需要捕获的邮件:如何捕获Windows消息?

“此文件的版本与您正在运行的Windows版本不兼容。检查计算机的系统信息以查看您是否需要x86(32位)或x64( 64位)版本的程序,然后联系软件发行商。“

“不支持的16位应用程序:由于与64位版本的Windows不兼容,程序或功能'(文件)'无法启动或运行请与软件供应商联系以询问64位Windows兼容版本可用“。

“这不是有效的Win32应用程序。”

“(文件)应用程序无法在Win32模式下运行。”

谢谢。

回答

2

据我所知,Explorer和cmd.exe都没有提前检查可执行文件的有效性。相反,他们呼叫CreateProcess,如果失败,请查看返回的错误代码。

所以,如果你调用CreateProcess(或者可能是the underlying native API),你应该能够捕获返回到Explorer/cmd.exe/whatever的错误代码,而不是做你的事情。

我不认为捕获正在呈现给用户的消息会有帮助。除了检查每个对话框以及写入每个控制台的每段文本的低效性以及它是否包含您要查找的消息之外,您将如何确定用户试图运行哪个文件?