如下几个问题1.知道qq密码文本框的句柄,怎么才能提取出里面的内容,我用的是  StringBuilder str=new StringBuilder(255);  GetWindowText(handleusername, str, 255);可是得到的数据为空,不知道各位高手用的什么方法去数据。
2.在点击登陆的时候想弄个钩子,把密码记录下来,可是回调函数,安装,卸载钩子不会用,看了很多资料还是含糊不请,哪为高手帮忙写一段,如果能在有注释那就在好不过了,谢谢了。

解决方案 »

  1.   

    http://www.codeproject.com/csharp/globalsystemhook.asp
      

  2.   

    如果你是在自己的程序中取得qq密码文本框的句柄,用 GetWindowText(handleusername, str, 255)是无法取得其中的密码的,因为在Windows2000以上版本中,Windos系统已经不允许跨进程使用GetWindowText()函数了(Windows98中可以). 所以你必须把GetWindowText(handleusername, str, 255)放到一个独立的DLL中,然后使用钩子注入技术将你的DLL注入到QQ的进程中,这样 GetWindowText(handleusername, str, 255)这个代码就和QQ处于一个进程了,就好用了.
      

  3.   

    由于QQ的密码屏蔽了好多消息,所以不能通过 GetWindowText得到密码内容,不过可以用SendMessage的API函数向文本框发送WM_SETTEXT修改密码内容,当然对一般的文本框你可以通过以送消息WM_GETTEXT得到文本框内容
    对于文本框屏蔽了WM_GETTEXT消息,通过线程注入的方法可能也无济于事
    不过可以监视键盘的输入
      

  4.   

    TO:pfworld(胡剑)
    想自己实现。谢谢提供。TO:使用钩子注入技术将你的DLL注入到QQ的进程中,这样  GetWindowText(handleusername,  str,  255)这个代码就和QQ处于一个进程了,就好用了.
    ========================================
    注入?  不会啊,能详讲一下吗?TO:lovevsnet(编程一把手) 谢谢,我去试试
    TO:flyskylf(天高云淡) 呵呵,哥们,别多想,只是学技术,要是盗的话也不用这么麻烦,网上有很多现成的。。
      

  5.   


    to:lovevsnet(编程一把手)  StringBuilder str = new StringBuilder(255);
     SendMessage(handleusername,WM_GETTEXT,255,str);
    还是不行,而且我看网上有人说WM_GETTEXT也不能跨线程取数据??不知道是真的吗?
      

  6.   

    C#做的DLL不能实现注入,要想实现注入,你的那个dll要用C或者C++来生成
    C#生成的dll不是传统意义上的dll了,是一个Accembly,没办法注入到别的程序里面去的
    现在QQ的文本框好象是画上去的,是一个panel或者是picturebox,肯定已经不是textbox了
    因此要获取句柄取到内容不是那么简单的了
      

  7.   

    QQ目录下有个TIMPlatform.exe
    使用键盘加密保护技术.专门保护密码的..
    目前还没有被攻破吧..
      

  8.   

    TIMPlatform.exe
    这个进程不是 限制启动多个qq的吗?
    好了,谢谢各位了,我先去学学注入进程,然后在问了,结贴!!
      

  9.   

    to zhedouyou():
    win2000以上操作系统是可以进行允许跨进程以送消息获取文本框内容的.
    并且QQ的用户名也能得到,只不过你的句柄可能找的不对,因此你也得不到QQ用户名,我自己写的WINSPY程序可以检测到QQ用户名,但得不到密码框
      

  10.   

    楼主,刚才帮你简单测试了一下,告诉你如何获得QQ用户框句柄:
    IntPtr fnd_qqwin=IntPtr.Zero,fnd_qquser=IntPtr.Zero;
    fnd_qqwin=Win32.FindWindow("#32770","QQ用户登录");
    if(fnd_qqwin==IntPtr.Zero)
    {
    MessageBox.Show("没有找到QQ主窗口");
    return;
    }
    fnd_qquser=Win32.FindWindowEx(fnd_qqwin,IntPtr.Zero,"ComboBox",null);
    if(fnd_qquser==IntPtr.Zero)
    {
    MessageBox.Show("没有找到QQ用户句柄");
    return;
    }
    string rt=Win32.GetWindowText(fnd_qquser);
    MessageBox.Show(rt);
    ----------------------------------------------------
    其中Win32.GetWindowText定义如下:
    public static string GetWindowText(IntPtr hWnd)
    {
    StringBuilder sb = new StringBuilder(1024);
    //Win32.GetWindowText(hWnd, sb, sb.Capacity);
    //Win32.SendMessage(hWnd,EM_SETPASSWORDCHAR,IntPtr.Zero,IntPtr.Zero);
    SendMessage(hWnd,WM_GETTEXT,sb.Capacity,sb);//这句能得到密码框的值,上一句GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount)不行
    return sb.ToString();
    }