来源于偶然的一个思路,分享下!
QQ2009版本的界面,和以前的版本有个显著的不同,就是无法通过Spy++抓到界面上某些元素的句柄了,对于这个技术的实现方案,相信好多人都有一些揣度,实现方法怎样,有人说是应用的DirectUI技术,也有人说是用反Hook,等等一些列的说道!在这,我也说说我的一点看法!我说的一种方法不属于以上的任何一种方法。至于如何,且听我慢慢道来!此思路,来源于一个偶然,在聊天窗口失去焦点与获得焦点时的一个偶然........详细信息

解决方案 »

  1.   

    这种办法不错,但是输入控件得不到句柄不代表没法弄到想要的东西
    比如QQ,消息在聊天框内显示出来还是用的API,HOOK API就可以获得消息
      

  2.   

    另外,有的QQ尾巴依然可以发消息,具体可以参考下这个pdf的文章
    http://www.xp510.com/soft/8/163/14874.html
      

  3.   

    我的意思是,依旧可以通过richedit控件取得句柄,只是发消息的那个按键不容易获得了
      

  4.   

    我也下来看看!
    现在的CSDN,怎么搞的,总是内容太短?
      

  5.   

    我觉得可能不是的楼主这么弄的
    看了楼主的代码,楼主的代码在输入的时候EDIT还是会出现,用老妖的 SPY4的快捷键还是可以抓到,QQ我无法测试,我的QQ2009是可以取到句柄的
    另外发现一小问题,在焦点在EDT上时再切换到其他焦点时,再切换回去,刷新有问题 
      

  6.   

    楼主可以测你那版本的QQ在输入的时候,用SPY快捷键是否可以抓到句柄
    不过创意不错
    鄙视光看不提意见的 
      

  7.   

    以前也这么做过界面,不过不是为了防SPY,是为了漂亮点,呵呵
      

  8.   

    fbb品种名称呢?一个函数下拉生成两列?
      

  9.   

    窗口控件被其他非窗口控件盖住了,SPY++也可以探测到此窗口控件吗?
      

  10.   

    我的意思是,依旧可以通过richedit控件取得句柄,只是发消息的那个按键不容易获得了
      

  11.   

    hook键盘,或者on key press / down。自己绘制Edit并textout到panel上面。完全没有句柄了就。实现起来很简单。
      

  12.   

    大公司的小技巧.
    比如百度的博客,不让保存网页什么的.
    一个身高两米的巨人,让人觉得他是侏儒,只是一个原因:委琐.最搞笑的是,这些小伎俩,对付的偏偏是那些不在乎的外行,LOOKLOOK楼主,照样可以搞定.
    大公司的脑袋可能内存大使用率低,只好灌水充数.要不,就自己找扇门使劲地夹,日日夹,月月夹,年年夹,就成了现在的这样了...
      

  13.   

    不明白。。我的QQ2009 SP6 已经抓到句柄了。密码框内容也能正常截获
    不知道说的是哪个元素?还是我的QQ版本不对?
      

  14.   

    楼主您好,你的演示程序中有一个小小漏洞,就是使edit获得焦点但不输入任何数据,然后最小化窗口,再还原窗体,此时报错。
      

  15.   

    准备揭帖,关于楼上说的那些小Bug,请大家各自发挥自己的聪明才智,自行修改,呵呵,我只提供一个实现方案,而非提供完整控件代码!这个方案肯定是能实现的!只是要处理的东西还是蛮多,爱好者根据本思路自行修改!中午饭后揭帖
      

  16.   

    错误出现在这句:edt.Parent := nil;
    此句是该方案实现的关键。我自己研究一下吧,不敢耽误楼主时间。
      

  17.   

    这里把不改edt.Parent 而是edt.visible设为False就可解决此问题了。
    procedure TDxEdit.HookedtWndProc(var msg: TMessage);  
    begin
      OldEdtwndproc(msg);
      case msg.Msg of
        WM_KILLFOCUS:
        begin
          CopyControlBitmap(edt, bmp);
          edtbndrect.Left := 2;
          edtbndrect.Top := (Height - edt.Height) div 2;
          edtbndrect.Right := edtbndrect.Left + edt.Width;
          edtbndrect.Bottom := edtbndrect.Top + edt.Height;
          edt.Visible := False;
        end;
      end;
    end;
      

  18.   

    HAHA ,HAO FANGFA ,XUEXI XUEXI !
      

  19.   

    good!行好东西就要顶,先收藏啦
      

  20.   

    高深的问题,感觉有TControl的影子