Dim cLong As Long
Dim astr As String * 256
AA = FindWindow("#32770", "替换")
bb = GetWindow(AA, GW_CHILD)
bb = GetWindow(bb, GW_HWNDNEXT)cLong = SendMessage(bb, WM_GETTEXTLENGTH, 0, vbNull)
SendMessage bb, WM_GETTEXT, cLong + 1, astr
MsgBox astr用MSBBOX输出BB句柄的值和我用SPY++找到的EDIT句柄是一样的,但是如果输出astr就是空值,为什么不能得到EDIT框的值呢。
Dim astr As String * 256
AA = FindWindow("#32770", "替换")
bb = GetWindow(AA, GW_CHILD)
bb = GetWindow(bb, GW_HWNDNEXT)cLong = SendMessage(bb, WM_GETTEXTLENGTH, 0, vbNull)
SendMessage bb, WM_GETTEXT, cLong + 1, astr
MsgBox astr用MSBBOX输出BB句柄的值和我用SPY++找到的EDIT句柄是一样的,但是如果输出astr就是空值,为什么不能得到EDIT框的值呢。
SendMessage bb, WM_GETTEXT, cLong + 1, astr 是否执行成功
(不知道你的sendmessage是怎么声明的,如果用默认声明的话,则应该改为:
SendMessage bb, WM_GETTEXT, cLong + 1, byval astr)
另外,由于你用了定长字符串,所以还要对结果做一下处理(提示一下:用left和instr)
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long另外在ASTR前加了BYVAL 还是不管用。
cLong = SendMessage(bb, WM_GETTEXTLENGTH, 0, byval 0&)
dim buff(clong) as byte
SendMessage bb, WM_GETTEXT, cLong + 1, buff(0)
dim s as string
s=strconv(buff,vbunicode)
msgbox s另外,不建议使用clong这样的变量名称
dim buff() as byte
redim buff(clong)
bb = GetWindow(AA, GW_CHILD)
bb = GetWindow(bb, GW_HWNDNEXT)Dim s As String
Dim cLong As Byte
Dim buff() As Byte
ReDim buff(cLong)
cLong = SendMessage(bb, WM_GETTEXTLENGTH, 0, ByVal 0&)SendMessage bb, WM_GETTEXT, cLong + 1, buff(0)s = StrConv(buff, vbUnicode)
MsgBox clongEnd Sub
还是不成功,查看CLONG的值为0,说明上面SendMessage(bb, WM_GETTEXTLENGTH, 0, ByVal 0&)没有成功,查看s的值也为空。对了我要获取的是记事本里面编辑菜单里的替换里的查找内容后面那个文本框的内容。
Option ExplicitPrivate Const WM_GETTEXT = &HDPrivate Const WM_GETTEXTLENGTH = &HEPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Private Sub Command1_Click()
Dim mhwnd As Long
mhwnd = FindWindow("#32770", "替换")
If mhwnd = 0 Then Exit Sub
mhwnd = GetDlgItem(mhwnd, &H481) '这个481是用spy看到的control id(16进制), 你的系统可能不一样
Dim i As Long
i = SendMessage(mhwnd, WM_GETTEXTLENGTH, 0, ByVal 0&)
Dim buff() As Byte
ReDim buff(i)
i = SendMessage(mhwnd, WM_GETTEXT, i + 1, buff(0))
MsgBox StrConv(buff, vbUnicode)
End Sub