2012-02-09 78 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的錯誤代碼,而不是做你的事情。

我不認爲捕獲正在呈現給用戶的消息會有幫助。除了檢查每個對話框以及寫入每個控制檯的每段文本的低效性以及它是否包含您要查找的消息之外,您將如何確定用戶試圖運行哪個文件?