• 终于解决了在c#里面用鼠标查找窗口的问题,原来如此简单


    在我早期用c#写的窗口查看器里面,引用了很多windows api。主要功能几乎都是api调用实现的。当时发现做模仿spy++的查找窗口时出现了一个障碍。使我怀疑是不是查找窗口用到了更复杂的方式,已经用到查找子窗口等其他api。现在从vcbase上下来一个别人的vc++的源码,发现我的实现的想法是没有问题的。只是我获取光标的屏幕坐标时出现了问题。我原来的想法是用一个picturebox控件捕获光标,然后用pointtoscreen方法把收到的鼠标位置转为屏幕坐标,再调用WindowFromPoint获取窗口句柄。但是这样看起来是失效了,也许是在函数调用过程中发生了一些意外,导致不能马上获取到从地理坐标和z次序坐标最靠近光标位置的那个窗口,而是被定格到某一个窗口就不动了,然后不能及时的找到新的窗口。后来这个问题被搁置了很久,我就没有再去查看过了。

    其实过程非常简单:在c++代码中,只要两句就得到窗口句柄:
       POINT pnt;
       ::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中修改过。

    https://files.cnblogs.com/hoodlum1980/DesktopWndView.rar

    维护历史:

    2008.01.24:更新了查找窗口对话框的代码。对进程节点增加“结束进程”上下文菜单。

    ==================================================

    在此特别提供源代码的下载:

    https://files.cnblogs.com/hoodlum1980/DesktopWndView_Src.rar

              --by hoodlum1980      2008年11月22日1:13

    ==================================================

  • 相关阅读:
    testNG参数传递方式
    TestNG超详细教程
    testNG中@Factory详解
    【转】HashMap的工作原理
    shell脚本学习笔记
    awk文本处理知识汇总
    sed文本处理知识点整理
    oracle数据库sql的基本使用
    【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
    HTML5 indexedDB数据库的入门学习(二)
  • 原文地址:https://www.cnblogs.com/hoodlum1980/p/896957.html
Copyright © 2020-2023  润新知