读书人

为什么程序不能发送到前台一个应用窗体

发布时间: 2012-01-26 19:40:46 作者: rapoo

为什么程序不能发送到前台一个应用窗体的控件里面?
Private Const WM_SETTEXT = &HC

Private 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那种发送或者不发送错误,然后后台程序自动关闭>
我用记事本命名为前台窗口,是可以的,但是到实际应用程序就不行,请教各位高手是我程序问题?还是那个前台程序在编写时就对窗口加了什么设置了?


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

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

读书人网 >VB

热点推荐