为什么程序不能发送到前台一个应用窗体的控件里面?该怎么处理
为什么程序不能发送到前台一个应用窗体的控件里面?
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,改为追加。。。(想法而已,哈哈,我不知道有没有这个常数)
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,改为追加。。。(想法而已,哈哈,我不知道有没有这个常数)