0

大家好,

我想在另一个应用程序中写水印搜索文本框。

图片:在此处输入文本的原始文本框

我尝试使用 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
4

0 回答 0