Private Const WM_SETTEXT = &HCPrivate Function sendmesStr(sStr As String) As String
Dim FT_hWnd As Long
Dim ID_Control_hWnd As Long
Dim strTitle As String
       strTitle = Space(255) '定义接收字串   
    FT_hWnd = GetForegroundWindow   ' FT_hWnd is the handle to the foreground window 'FT_hWnd = FindWindow("ThunderRT6FormDC", "228X")   
       GetWindowText FT_hWnd, strTitle, 1024
       If Left(Replace(strTitle, " ", ""), 4) = "228X" Then
            ID_Control_hWnd = FindWindowEx(FT_hWnd, 0, "RICHEDIT", vbNullString) 'GR_Execution_Class        
             SendMessage ID_Control_hWnd, WM_SETTEXT, 0, ByVal sStr
              
       End If
End Function为什么调用此函数以后,程序不能按自己所愿往前台窗口发送字符串?如:sStr="Input error,Please input again!"实际上是运行后台程序以后,提示Microsoft那种发送或者不发送错误,然后后台程序自动关闭>
我用记事本命名为前台窗口,是可以的,但是到实际应用程序就不行,请教各位高手是我程序问题?还是那个前台程序在编写时就对窗口加了什么设置了?

解决方案 »

  1.   

    你先用spy取得目标句柄和你程序中的ID_Control_hWnd 对比一下,我估计是你的句柄取的不对,如果句柄没错的话,则可能是目标是对 WM_SETTEXT 消息做出了拦截处理,这时候,可以考虑利用vb的sendkeys语句实现你想要的功能
      

  2.   

    首先谢谢楼上的建议!我试试
    那个前台窗口FT_hWnd应用程序是点击另一个父应用程序里面的一个按钮弹出来的,应该也是属于一个独立窗体,因为我往那里面发送删除键操作是可以的,所以我想窗口句柄的获取应该是没错的把,另外:
    由于窗体FT_hWnd被弹出来以后里面控件ID_Control_hWnd(Richbox一个文本框)就自动显示几行字符(那个前台程序本身会写几行字符提示用户输入),我的目的就是判断用户输入正确与否并往窗体控件ID_Control_hWnd里面的发送一个提示字符串,用sendkeys发送某一个字母可以,如果发送字符好象不好操作把?
      

  3.   

    还有一个问题,我用SendMessage对记事本发送时,发送完以后,以前的字符没有了,取而代之的是我发送过去的字符,但是我现在发送的字符是想在本来的字符后面补写的,给用户一个提示,不知道行不行的通?忘高手赐教!
      

  4.   


    1、SendMessage可以取字符,你可以先取回来,连接上要追加的再用你当前的方法发送过去。虽然看着步骤不少,但瞬间完成,应该看不出来你怎么做的。
    2、修改你发送消息时的常数WM_SETTEXT = &HC,改为追加(想法而已,哈哈,我不知道有没有这个常数)