使用api获取文件框里的内容!
本操作在已知文本框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