得到textBox的句柄,通过api实现。GetWindowsText吧,

解决方案 »

  1.   

    1.Findwindow
    2.如gujunyan(ivy) 说GetWindowsText
      

  2.   

    if win2k&XP u can't do this (GetWindowsText) ! but u can getText from TextBox of IE
      

  3.   

    这个比较完整,VC6
    http://www.codeguru.com/ieprogram/SPwdSpyDemo_Src.zip
    hope it helps
      

  4.   

    谢谢大家,可能我说的比较不明白,重新说一下。1,用程序获得其他程序中输入的密码。即:显示为****的东西。
    2,被检测的程序是普通的Widnows Form或者win32程序,被检测的筐是textbox。
    3,通过WM_GETTEXT来得到密码办法,已经被微软改掉了,从2k起已经没有办法用了。
    4,tjq_tang(重新开始)的也不行。
    5,请用C#实现。请大家不要说原理了,贴代码在这里好了。
      

  5.   

    你改一下不行吗.上面有个dll,直接引用它的API就是了.
      

  6.   

    wm_getpasswordchar
    wm_gettext
    sleep(100)
    wm_setpasswordchar按顺序发送消息sendmessage,我可能写错了函数了,自己查msdn吧
      

  7.   

    char Pass[1024]; //长度可以自己定义,不过一般的password edit输入的密码不会太长;
            char PassCharacter;
            PassCharacter = SendMessage(hWindow, EM_GETPASSWORDCHAR, 0, 0); //得到PASSWORD CHARACTER;
            PostMessage(hWindow, EM_SETPASSWORDCHAR, 0, 0); //取消Edit ES_PASSWORD style,
            Sleep(100); //在2000下似乎必须这么做,否则不能得到密码;98下没区别;
            SendMessage(hWindow, WM_GETTEXT, 1024, (LPARAM) Pass);
            EditCaption->Text = Pass;
            //得到密码后,恢复ES_PASSWORD style,,也可以不写后这句,这样
            //密码框的密码则以明文显示;
            PostMessage(hWindow, EM_SETPASSWORDCHAR, (WPARAM) PassCharacter, 0);
      

  8.   

    不过postmessage,sendmessage还有一些细微的差别,自己体会吧,以上是cb6的代码
      

  9.   

    这儿有个VC的例子,改一下,就是几个API函数.祝你好运void CEurekaDlg::OnMouseMove(UINT nFlags, CPoint point) 
    {
    if (m_bIsCapturing)
    {
    ClientToScreen(&point); m_strXYPos.Format("X=%ld, Y=%ld", point.x, point.y);
    m_strHwnd = _T("");
    m_strWndClass = _T("");
    m_strIsPassword = _T("");
    m_strPassword = _T(""); CWnd* pWnd = CWnd::WindowFromPoint(point);
    if (pWnd)
    {
    HWND hwndCurr = pWnd->GetSafeHwnd(); // Make sure that the window doesn't 'belong' to us
    if ((::GetWindowThreadProcessId (GetSafeHwnd(), NULL)) 
    != (::GetWindowThreadProcessId (hwndCurr, NULL))) 
    {
    m_strHwnd.Format("%ld", hwndCurr);
    m_strIsPassword = gc_PasswordNo; // Get the class name
    char lpClassName[255];
    if (::GetClassName(hwndCurr, lpClassName, 255))
    {
    m_strWndClass = lpClassName; // Is this an Edit control
    if (0 == m_strWndClass.CompareNoCase("EDIT"))
    {
    // Get the window's style
    LONG lStyle = ::GetWindowLong(hwndCurr, GWL_STYLE);
    if (lStyle & ES_PASSWORD)
    {
    m_strIsPassword = gc_PasswordYes; char szText[255];
    ::SendMessage(hwndCurr, WM_GETTEXT, 255, (LPARAM)szText);
    m_strPassword = szText;
    }
    }
    }
    }
    } UpdateData(FALSE);
    } CDialog::OnMouseMove(nFlags, point);
    }
      

  10.   

    up
    我只见过在98中实现的,现在还不知道在XP中怎么实现!
      

  11.   

    agreeonly one, u must hook of keyboard_input !
      

  12.   

    换个角度吧,如果是已经存在的密码显示成*,在win2k+
    这个问题我研究过,解决是没有公用的方法的,简单说一下吧,必须手工解,置顶希望也不大,你给班班发个消息试试1,旧方法,从窗口的textbox 句柄获得数据源,GetWindowsText 之类的就不说了,这个方法已经不行2,从内存中取出与textbox 同 class 的所有句柄内容,然后逆出该窗体是否是要找的目标,但因为win2k+ 密码不同软件在内存中存放的位置都不再有理可遵,所以也不能用global get char from memory,只能手工从内存中调试跟踪它的初始化偏移位置所以想做个工具软件发布那不可行,y. u can't do this 除非你要做某个软件专用的search password from memory不知哪位更有高见
      

  13.   

    如果想看密码的话,可以借助其它工具呀,去google.com搜索“查看 密码”有一大堆!
      

  14.   

    请大家不要忘了一个重要的原则:任何 Windows Handle 在其他进程中是没有任何意义的。WM_GETTEXT 取消后,几乎是无路可走了。
    这是重要的安全问题,如果允许这样的功能存在,微软会被安全专家骂死的。除非用 VXD,采用 RING 0 级的捕捉或许值得尝试。
    然而做 VXD,C#(包括 .NET 平台上的任何语言)天生不行,也永远不行。
      

  15.   

    在win2000和winXP里面,以前查看***密码的工具都不起作用的!!!