请教一个非焦点程序发送热键的问题。。
我从一个进程里面得到了一个PID,从PID获得了句柄,找出了窗口带“会议”字眼的句柄现在我想向带“会议”字眼的窗口发送一个Alt+s的热键,弄来弄去都无法成功,“会议”窗口没有反应
求助各路大侠,请问是什么问题,谢谢!
窗口是非焦点的,不想Active它为焦点是因为会重修刷新窗口,内容会发生变化。。。。
这是上次得到afan大大的指点后,自己又改了一些的代码#include "PostMessage_UDF.au3"
;找到MIM进程PID
$list = ProcessList("tj.exe")
;得到PID号
$PID = $list;
;得到PID的句柄
$tjHandle = _Pid2Handle($PID)
For $i = 1 to $MIMHandle
;If StringInStr($tjHandle[$i], '会议') Then Msgbox(0, '窗口句柄:' & $tjHandle[$i], '窗口标题:' & $tjHandle[$i] & @LF & '含有“结果”字样。')
;If StringInStr($tjHandle[$i], '会议') Then Msgbox(0,$tjHandle[$i],$tjHandle[$i])
;If StringInStr($tjHandle[$i], '会议') Then Msgbox(0,'',$tjHandle[$i]) ;列出名
;If StringInStr($tjHandle[$i], '会议') Then Send ("!{S}",0) ;发出按键
If StringInStr($tjHandle[$i], '会议') Then _SendKeys($tjHandle[$i],"!{s}");<<-------不起效????
Next
Func _Pid2Handle($PID)
;Afan提示:通过进程pid返回包含其可见窗口标题和句柄的二维数组
Local $Whall, $i, $pidHandle = [], $x = 1
$Whall = WinList()
For $i = 1 To $Whall
If WinGetProcess($Whall[$i]) = $PID And BitAND(WinGetState($Whall[$i]), 2) Then
ReDim $pidHandle[$x + 1]
$pidHandle += 1
$pidHandle[$x] = $Whall[$i]
$pidHandle[$x] = $Whall[$i]
$x += 1
EndIf
Next
Return $pidHandle
EndFunc ;==>_Pid2Handle 本帖最后由 afan 于 2010-7-8 15:37 编辑
试试 _SendKeys($tjHandle[$i],"!{s}") 或者 _SendKeys($tjHandle[$i],"!s"),
_SendKeys的第一个参数应该是句柄 $tjHandle[$i],而不是标题 $tjHandle[$i]。 谢谢afan大大,我同时做了另外一个实验,
$tjHandle 至 $tjHandle 逐个手工试发送热键,都不起效,貌似向窗口直接发送热键应该是行不通,
我用信息工具看这个窗口时候,发现这个窗口组成很复杂,可能是由“多个不同元素窗口”组成一个窗口显示出来的,
如果实在没有什么办法,就真的只能把窗口active起来,然后模拟鼠标点击两层菜单进去了吗? 无奈。。。 直接手动按键alt-s窗口行不
页:
[1]