如题
keybd_event SendMessage 只发送单个事件.我要发送字符串文本尤其汉字到文本控件,应该如何实现呢?
谢谢

解决方案 »

  1.   

    找到控件的句柄
    SendMessage 就可以发送文本字符串
      

  2.   

    如果窗口句柄知道该如何找到控件句柄呢?用哪个API函数?
      

  3.   

    FindWindow 查找窗口句柄
    Public Declare Function FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)
    FindWindowEx 查找子窗口句柄
    Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
      

  4.   

    FindWindowEx 可以找到很多句柄.如何知道找到是窗口还是文本控件呢?尤其如何知道是否焦点控件?(控件类名是不知道的)
    另外哪个API可以取得当前鼠标位置下的控件句柄? 这个问题要知道我的问题也可以解决的.
      

  5.   

    Private Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
    '取得当前鼠标位置下的控件句柄:
    'xPoint  鼠标位置 X坐标
    'yPoint  鼠标位置 Y坐标
    Private Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long'取得当前鼠标所在位置. lpPoint.X 可以作为上面的X坐标. lpPoint.Y可以作为上面的Y坐标.
      

  6.   

    发现有个问题:SendMessage 似乎不能向其他进程的控件发送文本,GetWindowText也不能取其他进程的控件文本.不知有没能跨进程取/发文本的API?
      

  7.   

    SendMessage     '即可以设置文本,又可以取得文本.不管是什么样的进程.
    GetWindowText   '只可以取得文本.不管是什么样的进程.
    SetWindowText   '只可以设置文本,不管是什么样的进程.
    如果你取不到或设置不了文本.只能说明,那个进程对这些API或控件里面的文本进行了处理.
      

  8.   

    fvflove 谢谢你呀
    你说:GetWindowText  '只可以取得文本.不管是什么样的进程. 好象不完全对呀,我做了个验证,发现很有意思的现象:
    GetWindowText取得本进程的文本完全正确,但对于其它进程的文本控件只能取得控件初始化时的文本,控件文本经编程改变
    或用户输入改变后是不能取得的.什么原因呢?首先考虑到我代码的问题,主要代码如下:Public Function GetWinText(ByVal Hnd As Long) As String
    Dim Buf As String * 256
    Dim I As String
    Dim T As String
    Dim Ln As Long
    Ln = GetWindowText(Hnd, Buf, 255)
    'If Ln > 0 Then T = Mid(Buf, 1, Ln)
    I = InStr(1, Buf, Chr(0))
    If I > 0 Then T = Mid(Buf, 1, I - 1)
    GetWinText = T
    End Function
    Hnd 是用WindowFromPoint取得的,应该没有问题的
    不知问题出在哪里?能否解决?
      

  9.   

    看其它进程文本问题解决了:改用SendMessage