其实过程非常简单:在c++代码中,只要两句就得到窗口句柄:
::GetCursorPos(&pnt); //取得鼠标坐标!
HWND hwnd = ::WindowFromPoint(pnt) ; //取得鼠标指针处窗口句柄
在C#中只要原封不动的转换成Invoke即可。
另外一点值得注意的是,c++和c#里面都有long这个类型,c#中的long是int64,但是c++中的LONG长度4个字节,因此应当在C#中用Int或者Uint表示。
窗口查看器的历史来源是,我帮人做一个桌面小程序,里面用到鼠标穿透,嵌入桌面等功能,其中嵌入桌面的原理,导致我写了一个小程序,用来显示桌面的窗口树组成结构。再后来演化成为一个demo环境,在其中集成了乱七八糟我的想法和测试功能。但尝试的有些技术和想法可能比较敏感和危险,所以我没有集成进去。
最后是一些截图:
界面较多,不一一截图。主要功能有:qq尾巴模拟器,扫雷作弊器,IE管理器,PE文件信息查看器,进程信息查看,窗口截图,向指定窗口发送字符消息等等(更多节点操作就使用右键context menu)。
当前未解决的问题:
(1)在IE管理器的第一个页面中,修改IE的相关注册表信息时,好像没有刷新到注册表。导致其功能失效。具体原因没有耐心去查,所以尚待解决。
(2)特殊情况考虑不周,可能会偶尔出现运行时的异常情况,不过一般来说都不至于使程序致命的错误(比如某些特殊进程的信息无法访问),点击continue即可。
另外一个感想是,vc爱好者很多,乃至真正的技术领域是学无止境。
最后是一个可执行文件(不包含源码)的连接,同样,在vs2003中写的,在vs2005中修改过。
http://files.cnblogs.com/hoodlum1980/DesktopWndView.rar
维护历史:
2008.01.24:更新了查找窗口对话框的代码。对进程节点增加“结束进程”上下文菜单。
==================================================
在此特别提供源代码的下载:
http://files.cnblogs.com/hoodlum1980/DesktopWndView_Src.rar
--by hoodlum1980 2008年11月22日1:13
==================================================