本操作在已知文本框hwnd的前提下。
1.首先声明api,主要用到GetWindowTextLength获取文本的长度,GetWindowText获取文本的内容
<
System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)
>
_
Public Structure HWND__
''' int
Public unused As Integer
End Structure
Partial Public Class NativeMethods
''' Return Type: int
''' hWnd: HWND->HWND__*
< System.Runtime.InteropServices.DllImportAttribute( " user32.dll " , EntryPoint: = " GetWindowTextLengthA " ) > _
Public Shared Function GetWindowTextLengthA( < System.Runtime.InteropServices.InAttribute() > ByVal hWnd As System.IntPtr) As Integer
End Function
''' Return Type: int
''' hWnd: HWND->HWND__*
''' lpString: LPSTR->CHAR*
''' nMaxCount: int
< System.Runtime.InteropServices.DllImportAttribute( " user32.dll " , EntryPoint: = " GetWindowTextA " ) > _
Public Shared Function GetWindowTextA( < System.Runtime.InteropServices.InAttribute() > ByVal hWnd As System.IntPtr, < System.Runtime.InteropServices.OutAttribute(), System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr) > ByVal lpString As System.Text.StringBuilder, ByVal nMaxCount As Integer ) As Integer
End Function
End Class
Public Structure HWND__
''' int
Public unused As Integer
End Structure
Partial Public Class NativeMethods
''' Return Type: int
''' hWnd: HWND->HWND__*
< System.Runtime.InteropServices.DllImportAttribute( " user32.dll " , EntryPoint: = " GetWindowTextLengthA " ) > _
Public Shared Function GetWindowTextLengthA( < System.Runtime.InteropServices.InAttribute() > ByVal hWnd As System.IntPtr) As Integer
End Function
''' Return Type: int
''' hWnd: HWND->HWND__*
''' lpString: LPSTR->CHAR*
''' nMaxCount: int
< System.Runtime.InteropServices.DllImportAttribute( " user32.dll " , EntryPoint: = " GetWindowTextA " ) > _
Public Shared Function GetWindowTextA( < System.Runtime.InteropServices.InAttribute() > ByVal hWnd As System.IntPtr, < System.Runtime.InteropServices.OutAttribute(), System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr) > ByVal lpString As System.Text.StringBuilder, ByVal nMaxCount As Integer ) As Integer
End Function
End Class
声明api可以用相应的工具生成,我使用的是winsiggen.exe
2.传入句柄获取控件的内容
Dim
Tlong
As
Integer
, s
As
New
System.Text.StringBuilder
Tlong = NativeMethods.GetWindowTextLengthA( Me .TextBox1.Handle) + 1
NativeMethods.GetWindowTextA( Me .TextBox1.Handle, s, Tlong)
MsgBox (s.ToString)
Tlong = NativeMethods.GetWindowTextLengthA( Me .TextBox1.Handle) + 1
NativeMethods.GetWindowTextA( Me .TextBox1.Handle, s, Tlong)
MsgBox (s.ToString)
如何获取hwnd可以使用FindWindowEx, GetClientRect获取指定坐标的的hwnd