zoukankan      html  css  js  c++  java
  • 终于解决了在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

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

  • 相关阅读:
    ⑤SpringCloud 实战:引入Zuul组件,开启网关路由
    ④SpringCloud 实战:引入Hystrix组件,分布式系统容错
    ③SpringCloud 实战:使用 Ribbon 客户端负载均衡
    ②SpringCloud 实战:引入Feign组件,发起服务间调用
    Spring 事件监听机制及原理分析
    ①SpringCloud 实战:引入Eureka组件,完善服务治理
    AbstractQueuedSynchronizer(AQS) 总结篇
    源码分析:CountDownLatch 之倒计时门栓
    源码分析:Semaphore之信号量
    Java 虚拟机垃圾回收算法总结
  • 原文地址:https://www.cnblogs.com/hoodlum1980/p/896957.html
Copyright © 2011-2022 走看看