是不是你的那个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
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
建议用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
老大但是不要做什么坏事哦,
如果你确实忍不住的话,记得叫上我哦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
这是我 的代码(变量都以定义了)
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
问题就在这,窗口类名为#32770为标准对话框,你找到的是一个标题为空的对话框,但是在系统中可能有多个这样的对话框,你找到的这个可能不是你要的
#32770 我可以确定是这个窗体的句柄因为我可以取的这个窗体其它控件的信息比如(Combobox)
因为这个窗体本来就是一个无标题的窗体,那你说我应该怎么取的这个窗体的句柄
我好想听说Win2k已经不可以用sendmessage这样直接来取的别的程序的密码框里的密码了是吗?
从Windows2000开始,MicroSoft修改了文本框设定:
对于密码文本框,只有自身进程可以访问,而外部进程访问将会拒绝。
解决办法:用全局Hook实现进程注入。但是纯靠VB是不行的(主要是受全局Hook的回调函数必须放入Win32 Dll的限制)
我已经发邮件你,请查收,分给我吧 :p