[已解决]如何激活最小化至托盘区的程序窗口?
本帖最后由 shqf 于 2012-3-10 09:41 编辑在编一个自动往有道单词本里添加单词的程序。但有道词典5.0会最小化到托盘区,此时用WinActivate(“有道词典”,“词典”)不能激活该窗口(如最小化在任务栏是能激活的)。winlist、WinGetHandle也不行,请问论坛各位达人如何激活此时的窗口? 再run一下主程序试试呢 谢谢楼上的兄弟。试了一下,由于有道词典5.0有一项设置为:启动时最水上化至托盘,对于这种情况好象用RUN最大化运行时也没有用。不知还有什么办法? 那就只有点击托盘图标了 搜索论坛有相关的操作
http://www.autoitx.com/forum.php?mod=viewthread&tid=30237刚才试了一下这个可行 回复 1# shqf
有点郁闷,下午在公司用类似的金山词霸测试失败,回来试了下隐藏的浩方尽然成功了,楼主测试下:#include <WinAPI.au3>
Opt('MustDeclareVars', 1)
_show()
Func _show()
Local $aWindows, $i
$aWindows = _WinAPI_EnumWindows()
For $i = 1 To $aWindows
If WinGetTitle($aWindows[$i]) = "浩方电竞平台 - 5.7.1.1115" Then;改成隐藏程序的title
WinSetState(WinGetTitle($aWindows[$i]) , "", @SW_SHOW)
EndIf
Next
EndFunc ;==>_Main
本帖最后由 lixiaolong 于 2012-3-8 21:44 编辑
回复 1# shqf #include "SysTray_UDF.au3"
BlockInput(1)
$k_pos = MouseGetPos()
$posTray = WinGetPos(_FindTrayToolbarWindow())
$index = _SysTrayIconIndex("YodaoDict.exe")
If $index <> -1 Then
$pos = _SysTrayIconPos($index)
If $pos = -1 Then
$pos = _SysTrayIconPos($index)
If $pos = -1 Then Exit
EndIf
MouseMove($pos, $pos, 0)
Sleep(100)
MouseClick("right")
;Sleep(100) ;这里加sleep好
MouseMove($k_pos, $k_pos, 0)
Send("{down}")
Send("{enter}")
EndIf
BlockInput(0) 有些程序的最小化并不是真正的最小化!如QQ.只是隐藏而以!用WinSetState设置为显示即可. 感谢楼上的几位。4、5、6楼介绍的方法我在二台电脑上都试过达不到如期效果。5 楼的是没反应,4、6楼的,鼠标指针移到了托盘处那图标上,但程序就是不点击。4楼的我再加上mouseclick也不点击。运行4 、6 楼的程序后,如人工点一下左键是能显现窗口的。难道是我人品的原因吗? 回复 8# shqf
7楼的方法没解决? 按照7楼的提示如下试了一下也不行:
$handle = Run("D:\Program Files\Youdao\Dict\YodaoDict.exe")
;ConsoleWrite($handle)
;WinWait($handle, "")
Sleep(8000)
;GUISetState(@SW_MAXIMIZE,$handle)
GUISetState(@SW_SHOW,$handle)
GUISetState(@SW_MAXIMIZE,$handle)
;WinSetState($handle,"",@SW_MAXIMIZE)
WinActivate($handle, "") 本帖最后由 shqf 于 2012-3-9 21:18 编辑
回复 9# lixiaolong
那个方法是最先使用的,程序先要WinWait,就等在那里了。改用sleep,再winsetstate还是没用。改用句柄,如上楼贴子所述,也没有用啊,真不知何故。
我简直怀疑自己哪里搞错了,还是这个窗口真有点儿特殊? 回复 10# shqf
$handle 应该用wingethandle才行,你自己用msgbox测试一下就知道了。 回复 11# shqf
你的用法不对,RUN返回的是PID.
WinSetState ( "标题或者窗口句柄", "文本", 标志 )
WinSetState("", "", @SW_SHOW)
或者
WinSetState("有道词典", "", @SW_SHOW) 本帖最后由 shqf 于 2012-3-10 09:40 编辑
哈哈,改用wingethandle真的行了啊,我竟然把RUN返回的进程标识符当作句柄,见笑了。
代码如下:
Run("D:\Program Files\Youdao\Dict\YodaoDict.exe")
$handle=WinGetHandle("有道词典","")
;WinWait($handle)
Sleep(3000)
WinSetState($handle,"",@SW_SHOW)
WinActivate($handle, "")
唯有一点还不明白,用WinWait还是停在那儿了。不过我已很满足了,今晚可以好好地睡一觉了。
谢谢几位的回答,特别是lion.lee、lixiaolong 的提示哦。 本帖最后由 sxpms 于 2012-3-17 15:37 编辑
我也刚遇到这个问题,送上门的好事,以后就采用这种方法了,谢谢各位大侠
页:
[1]
2