找回密码
 加入
搜索
查看: 10167|回复: 16

[GUI管理] [已解决]如何激活最小化至托盘区的程序窗口?

 火.. [复制链接]
发表于 2012-3-8 16:00:23 | 显示全部楼层 |阅读模式
本帖最后由 shqf 于 2012-3-10 09:41 编辑

在编一个自动往有道单词本里添加单词的程序。但有道词典5.0会最小化到托盘区,此时用WinActivate(“有道词典”,“词典”)不能激活该窗口(如最小化在任务栏是能激活的)。winlist、WinGetHandle也不行,请问论坛各位达人如何激活此时的窗口?

评分

参与人数 1金钱 +15 收起 理由
afan + 15 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2012-3-8 16:04:07 | 显示全部楼层
再run一下主程序试试呢
 楼主| 发表于 2012-3-8 16:40:35 | 显示全部楼层
谢谢楼上的兄弟。试了一下,由于有道词典5.0有一项设置为:启动时最水上化至托盘,对于这种情况好象用RUN最大化运行时也没有用。不知还有什么办法?
发表于 2012-3-8 16:57:28 | 显示全部楼层
那就只有点击托盘图标了   搜索论坛  有相关的操作
http://www.autoitx.com/forum.php?mod=viewthread&tid=30237  刚才试了一下这个可行

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

发表于 2012-3-8 21:05:57 | 显示全部楼层
回复 1# shqf


    有点郁闷,下午在公司用类似的金山词霸测试失败,回来试了下隐藏的浩方尽然成功了,楼主测试下:
#include <WinAPI.au3>
Opt('MustDeclareVars', 1)

_show()

Func _show()
    Local $aWindows, $i
    $aWindows = _WinAPI_EnumWindows()
    For $i = 1 To $aWindows[0][0]
        If WinGetTitle($aWindows[$i][0]) = "浩方电竞平台 - 5.7.1.1115" Then;改成隐藏程序的title
                        WinSetState(WinGetTitle($aWindows[$i][0]) , "", @SW_SHOW)
                EndIf
    Next
EndFunc   ;==>_Main

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2012-3-8 21:40:42 | 显示全部楼层
本帖最后由 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[0], $pos[1], 0)
        Sleep(100)
        MouseClick("right")
                ;Sleep(100) ;这里加sleep好
        MouseMove($k_pos[0], $k_pos[1], 0)
        Send("{down}")
        Send("{enter}")
EndIf
BlockInput(0)

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2012-3-9 17:27:39 | 显示全部楼层
有些程序的最小化并不是真正的最小化!如QQ.只是隐藏而以!用WinSetState设置为显示即可.

评分

参与人数 1贡献 +5 收起 理由
lixiaolong + 5 真没发现,学习了!

查看全部评分

 楼主| 发表于 2012-3-9 20:21:36 | 显示全部楼层
感谢楼上的几位。4、5、6楼介绍的方法我在二台电脑上都试过达不到如期效果。5 楼的是没反应,4、6楼的,鼠标指针移到了托盘处那图标上,但程序就是不点击。4楼的我再加上mouseclick也不点击。运行4 、6 楼的程序后,如人工点一下左键是能显现窗口的。难道是我人品的原因吗?
发表于 2012-3-9 21:08:58 | 显示全部楼层
回复 8# shqf

7楼的方法没解决?
 楼主| 发表于 2012-3-9 21:10:18 | 显示全部楼层
按照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, "")
 楼主| 发表于 2012-3-9 21:16:43 | 显示全部楼层
本帖最后由 shqf 于 2012-3-9 21:18 编辑

回复 9# lixiaolong
那个方法是最先使用的,程序先要WinWait,就等在那里了。改用sleep,再winsetstate还是没用。改用句柄,如上楼贴子所述,也没有用啊,真不知何故。
我简直怀疑自己哪里搞错了,还是这个窗口真有点儿特殊?
发表于 2012-3-9 21:24:48 | 显示全部楼层
回复 10# shqf
$handle 应该用wingethandle才行,你自己用msgbox测试一下就知道了。
发表于 2012-3-9 21:46:40 | 显示全部楼层
回复 11# shqf

你的用法不对,RUN返回的是PID.

WinSetState ( "标题或者窗口句柄", "文本", 标志 )

WinSetState("[class:YodaoMainWndClass]", "", @SW_SHOW)
或者
WinSetState("有道词典", "", @SW_SHOW)
 楼主| 发表于 2012-3-9 21:55:27 | 显示全部楼层
本帖最后由 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 的提示哦。
发表于 2012-3-17 15:25:02 | 显示全部楼层
本帖最后由 sxpms 于 2012-3-17 15:37 编辑

我也刚遇到这个问题,送上门的好事,以后就采用这种方法了,谢谢各位大侠
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-18 05:26 , Processed in 0.080806 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表