大家好,
我想在另一个应用程序中写水印搜索文本框。
我尝试使用 sendMassage 方法,但没有成功。如果文本框没有重点,我只更改了带水印的灰色文本。[图片:填充灰色文本的文本框2
如果我用鼠标单击文本框后效果很好。 图片:好文
我试图在这个文本框上制作鼠标事件,但不是最好的解决方案,因为有时在这个文本框上会出现某种形式。我试图激活控件,但没有成功。我也测试了 SendKey 方法。
你可以帮帮我吗?
谢谢, 伊斯特万
这是代码:
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
Private Declare Function SendKey Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As IntPtr, wMsg As Int32, wParam As Byte, lParam As Int32) As Int32
Private Const WM_SETTEXT As Integer = &HC
Private Const WM_ACTIVATE As Integer = &H6
Private Const WA_ACTIVE As Integer = &H1
Const WM_CHAR = &H102
Const WM_KEYDOWN As Integer = &H100
Const WM_KEYUP As Integer = &H101
Sub SendTextToTextbox()
Dim iHwndChild3 As IntPtr = FindWindowEx(iHwndChild2a, IntPtr.Zero, "TMEditTextClass", vbNullString)
'Activate control
SendMessage(iHwndChild3, WM_ACTIVATE, 0, 0)
SendMessage(iHwndChild3, WM_SETTEXT, IntPtr.Zero, "Text to send")
'Alternatively use SendKey methods
' SendKeysO(iHwndChild3, 25, "Text to send" & vbLf)
End Sub
Public Sub SendKeysO(handle As IntPtr, delay As Integer, chars As String)
Dim Bytes As List(Of Byte) = System.Text.Encoding.ASCII.GetBytes(chars).ToList
For Each B As Byte In Bytes
If B = 10 Then
SendKey(handle, WM_KEYDOWN, CByte(Keys.Enter), 0)
SendKey(handle, WM_KEYUP, CByte(Keys.Enter), 1)
End If
SendKey(handle, WM_CHAR, B, 0)
Dim Sw As Stopwatch = Stopwatch.StartNew
Do
Application.DoEvents()
Loop Until Sw.ElapsedMilliseconds >= delay
Next
End Sub