代码:
Option Explicit
Private 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 GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long Const WM_GETTEXT = &HD
Const WM_GETTEXTLENGTH = &HE
Dim a
Dim GetIParam As Long
Dim GetString As String * 255
Private Sub Command1_Click()
a = SendMessage(CLng(Text1.Text), WM_GETTEXTLENGTH, 0, 0)
SendMessage CLng(Text1.Text), WM_GETTEXT, a + 1, GetIParam
GetKeyNameText GetIParam, GetString, Len(GetString)
MsgBox GetString
End Sub
TEXTBOX里的内容是目标的句柄,我是填一个其它程序的控件句柄,句柄是正确的..
可为何要崩溃呢?是不是内存的权限问题?
望解答...
Option Explicit
Private 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 GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long Const WM_GETTEXT = &HD
Const WM_GETTEXTLENGTH = &HE
Dim a
Dim GetIParam As Long
Dim GetString As String * 255
Private Sub Command1_Click()
a = SendMessage(CLng(Text1.Text), WM_GETTEXTLENGTH, 0, 0)
SendMessage CLng(Text1.Text), WM_GETTEXT, a + 1, GetIParam
GetKeyNameText GetIParam, GetString, Len(GetString)
MsgBox GetString
End Sub
TEXTBOX里的内容是目标的句柄,我是填一个其它程序的控件句柄,句柄是正确的..
可为何要崩溃呢?是不是内存的权限问题?
望解答...
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Sub Form_Activate()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: [email protected]
Dim MyStr As String
'Create a buffer
MyStr = String(100, Chr$(0))
'Get the windowtext
GetWindowText Me.hwnd, MyStr, 100
'strip the rest of buffer
MyStr = Left$(MyStr, InStr(MyStr, Chr$(0)) - 1)
'Triple the window's text
MyStr = MyStr + MyStr + MyStr
'Set the new window text
SetWindowText Me.hwnd, MyStr
End Sub
不是啊...是SendMessage那出的问题.....
好像是读内存的权限不够...
Option Explicit
Private 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 GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As LongPrivate Const WM_GETTEXT = &HD&
Private Const WM_GETTEXTLENGTH = &HE&
'Dim a As Long
Dim GetIParam As Long
Dim GetString As String * 255
Private Sub Command1_Click()
Text1.Text = Command1.hwnd
'a = SendMessage(CLng(Text1.Text), WM_GETTEXTLENGTH, 0, 0)
SendMessage CLng(Text1.Text), WM_GETTEXT, 255, ByVal GetString '255是缓冲区的长度
'GetKeyNameText GetIParam, GetString, Len(GetString)
MsgBox GetString
End Sub
Debug.Print Len(Left$(GetString, InStr(GetString, Chr(0)) - 1))
但是我想请教一个问题,就是:
SendMessage CLng(Text1.Text), WM_GETTEXT, 255, ByVal GetString '255是缓冲区的长度中ByVal GetString 是ByVal,也就是说,为什么要传值而不是用(ByRef) GetString传地址...
望解答~
http://topic.csdn.net/u/20090901/09/dddf35aa-7838-4415-85b2-222358422d81.html