为什么我用sendmessage 的WM_Gettext 在win98下能正常工作而在win2k上就不可以了(我在win98下我可以取得一个密码筐里的字符串,但在win2k什么也不显示取出一个空字符)

解决方案 »

  1.   

    是不是你的那个text框的句柄搞错了?
    建议用spy++查一下class name,然后用FindWindowEx来获得句柄。
    然后再用SendMessage (hWmd,WM_GETTEXT,wParam,lParam )WM_GETTEXT 
    wParam = (WPARAM) cchTextMax;   // number of characters to copy 
    lParam = (LPARAM) lpszText;     // address of buffer for text
      

  2.   

    2000没有任何问题,
    老大但是不要做什么坏事哦,
    如果你确实忍不住的话,记得叫上我哦Private Const WM_GETTEXTLENGTH = &HE
    Private Const WM_GETTEXT = &HD
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Sub Command1_Click()
        Dim s As String
        Dim l As Long
        l = SendMessage(Text1.hwnd, WM_GETTEXTLENGTH, 0, ByVal 0&)
        l = l + 1
        s = Space(l)
        SendMessage Text1.hwnd, WM_GETTEXT, l, ByVal s
        debug.print s
    End Sub
      

  3.   

    楼上几位大哥,我也知道你们所说的方法,我都可以取到文本框中字符的长度但是是取不到它的内容
    这是我 的代码(变量都以定义了)
    Private Sub Command1_Click()
     as_long = FindWindow("#32770", vbNullString) 
    //#32770 是该窗体的Class,是用Spy++ 查到的 而且该窗体只有一个edit控件
     as_kk = FindWindowEx(as_long, 0, "Edit", vbNullString)
     strlong = SendMessage(as_kk, WM_GETTEXTLENGTH, 0, ByVal 0&)
     strlong = strlong + 1
     tempstr = Space(strlong)
     as_ddj = SendMessage(as_long, WM_GETTEXT, strlong, ByVal tempstr)
    End Sub
      

  4.   

    as_long = FindWindow("#32770", vbNullString)
    问题就在这,窗口类名为#32770为标准对话框,你找到的是一个标题为空的对话框,但是在系统中可能有多个这样的对话框,你找到的这个可能不是你要的
      

  5.   

    To 楼上朋友
      #32770 我可以确定是这个窗体的句柄因为我可以取的这个窗体其它控件的信息比如(Combobox)
      因为这个窗体本来就是一个无标题的窗体,那你说我应该怎么取的这个窗体的句柄
      我好想听说Win2k已经不可以用sendmessage这样直接来取的别的程序的密码框里的密码了是吗?
      

  6.   

    我也觉得如此,在WIN2K中无法施展,可能是其增强了安全性的问题,可能还要用其它什么方法.
      

  7.   

    真正原因:
    从Windows2000开始,MicroSoft修改了文本框设定:
    对于密码文本框,只有自身进程可以访问,而外部进程访问将会拒绝。
    解决办法:用全局Hook实现进程注入。但是纯靠VB是不行的(主要是受全局Hook的回调函数必须放入Win32 Dll的限制)
      

  8.   

    你这样做在Windows2000中是拿不到的,需要通过Hook
    我已经发邮件你,请查收,分给我吧 :p