定制调试诊断工具和实用程序(7)
2006-07-20 11:42:21 来源:WEB开发网Figure 11 WindowDump 中的异常编码
WindowDump 的背后并没有什么玄机。唯一有趣的地方是 Windows 通常允许 GetWindowText 和 WM_GETTEXT 操作不同的进程。但对于列表视图和树型视图这样的公用控件除外。Jeffrey Richter 在他的 Q&A Win32(MSJ September 1997)专栏中解释了如何 dump 另外一个进程中列表视图的内容,附带一个范例程序 LV2Clip。下面是一些 WindowDump 能盗取其内容的窗口类:Edit、ScrollBar、ListBox、ComboBox、ListView 和 TreeView。根据这些类的窗口内容,你还能得到 Figure 12 所列出的信息。
有关 WindowsDump 实现的最后一个重点是进程 ID。从窗口句柄入手,使用 GetWindowThreadProcessId 不难确定线程以及负责创建该线程的进程。如果你还想知道模块名,用 GetWindowModuleFileName 可能会碰壁。与在文档中给出的信息相反,这个 API 函数在 Windows NT、Windows 2000 或 Windows XP 下调用失败。你得钻研知识库的文章 Q228469 查明原因。
在这样情况下,你应该用 PSAPI 及其 GetModuleFileNameEx 函数。它以进程和 hModule 模块句柄为参数,返回对应的路径名。为了查出某一个进程的可执行文件路径名,hModule 应该为 0。不要使用 0x400000:某些进程被加载到不同的地址,如 winlogon 和 Task Manager 在 0x1000000,ntvdm 在 f000000 以及Microsoft Word 2000 在 0x30000000。
参考资料
在后续文章中,我将介绍 CreateRemoteThread,命令行及其它。
(待续)
- ››调试SQL server 2008功能设置
- ››调试JavaScript错误
- ››定制个性化的对话框窗口类
- ››定制 SWT/RCP 界面:如何编写一个漂亮的 SWT/RCP ...
- ››调试和测试 Swing 代码
- ››定制基于 Visual studio 2005 平台 Windows CE(AR...
- ››定制版黑雨 blackra1n 越狱3.1.2 全系 iPhone
- ››调试集成 Java 和 C/C++ 的代码
- ››定制 Eclipse RCP 应用程序,第 1 部分: 可与 SWT...
- ››调试JavaScript脚本程序(Firefox篇)
- ››调试JavaScript/VB Script脚本程序(ASP.NET篇)
- ››调试JavaScript/VB Script脚本程序(Wscript篇)
更多精彩
赞助商链接