找回密码
 加入
搜索
查看: 11989|回复: 17

[AU3基础] [已解决]:多个QQ托盘图标无法隐藏

 火.. [复制链接]
发表于 2010-3-18 11:10:52 | 显示全部楼层 |阅读模式
本帖最后由 dnbj2010 于 2010-3-18 16:45 编辑

当运行一个QQ时,使用如下代码可以将QQ托盘图标隐藏
#include "SysTray_UDF.au3"

$st_process = "QQ.exe"
_SysTrayIconVisible(1, _SysTrayIconIndex($st_process))

但如果开两个QQ或者更多,却始终只能隐藏一个。其他无效。
去看了一下SysTray_UDF.au3,他是先获取获取托盘栏所有图标程序的标题,再以此获取进程PID列表,再以此获取进程名称,然后隐藏托盘图标的。可多个QQ的标题都是同样的,所以这个SysTray_UDF.au3就只能识别一个QQ进程了,只能隐藏一个QQ托盘。
改来改去都解决不了,向高手求解。

评分

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

查看全部评分

发表于 2012-6-3 18:34:25 | 显示全部楼层
当运行一个QQ时,使用如下代码可以将QQ托盘图标隐藏
#include "SysTray_UDF.au3"

$st_process = "QQ.ex ...
dnbj2010 发表于 2010-3-18 11:10



    其实很简单,思路对了就可以了。你的思路上就是多了条要给所有同名程序添加不同的标题,但是你忽略一个现成的条件,那就是进程标识,那是唯一的,既然这样那我们完全可以依赖现成的ProcessList()。
  
   罗列进程,触发条件(QQ.EXE),匹配就隐藏。
   范例:
#include "SysTray_UDF.au3"   
$List=ProcessList()
        $i=$List[0][0]
        $j=1
           while $j<=$i
              If StringUpper($List[$j][0])="QQ.EXE"  then
                 _SysTrayIcon_Clean($List[$j][0],1)
              Endif
              $j=$j+1
              TraySetState(2)
       WEnd

上述内容  是昨天和今天学习所得,参考文献
http://www.autoitx.com/thread-13661-1-1.html

我改进的UDF 不当处请指正
http://www.autoitx.com/thread-32692-1-1.html
发表于 2010-3-18 11:34:31 | 显示全部楼层
个人笨想法哈,如果多个窗口标题相同,可以整一个,然后修改其标题,循环进行下一个。。。
至于你的问题估计会麻烦些,因为你要根据系统的UDF进行修改使用。。
 楼主| 发表于 2010-3-18 14:50:37 | 显示全部楼层
二楼的方法不行啊,QQ的标题随便改,但还是只能隐藏一个QQ托盘图标。代码如下:
#include "SysTray_UDF.au3"

$st_process = "QQ.exe"
_SysTrayIconVisible(1, _SysTrayIconIndex($st_process))  ;隐藏指定托盘图标
sleep(500)
$i = Random (100, 999, 1)
WinActivate("QQ2009 Beta2", "")
WinSetTitle ( "QQ2009 Beta2", "", "QQ2009 _"&$i)
发表于 2010-3-18 15:45:29 | 显示全部楼层
_SysTrayIcon_Clean('QQ.exe')
http://www.autoitx.com/thread-13661-1-1.html
楼主应该解决了吧~
 楼主| 发表于 2010-3-18 16:34:19 | 显示全部楼层
是的,解决了。
afan超级版主果然是算得准。
我起先从http://www.autoitx.com/thread-13661-1-1.html这里下了systray UDF.au3
我也想到要清除一下图标。
可我总是测试失败,纳闷了。一怒之下不弄了。又过来看到你的回贴,我又回去查。唉呀,失败啊。
我居然把#include "systray UDF.au3"写成#include "SysTray_UDF.au3"
难怪总是失败,真是一杠害死人。
再将代码奉上:
#include "SysTray_UDF.au3"

$st_process = "QQ.exe"
_SysTrayIconVisible(1, _SysTrayIconIndex($st_process))  ;隐藏指定托盘图标
sleep(500)
$i = Random (100, 999, 1)
WinActivate("QQ2009 Beta2", "")
WinSetTitle ( "QQ2009 Beta2", "", "QQ2009 _"&$i)
_SysTrayIcon_Clean('QQ.exe')
 楼主| 发表于 2010-3-18 16:40:40 | 显示全部楼层
晕,真是误人,刚才发的代码第一句
#include "SysTray_UDF.au3"是错的那个
正确的是下面这个
#include "systray UDF.au3"
惭愧!
发表于 2010-3-18 16:42:20 | 显示全部楼层
回复 6# dnbj2010


    呵呵,如果你只想清理图标,一句就行了,前面的多余了~
#include "SysTray UDF.au3"
_SysTrayIcon_Clean('QQ.exe')
 楼主| 发表于 2010-3-18 17:00:40 | 显示全部楼层
确实,更换QQ标题这一步是多余的。看来只要及时清除隐藏后的托盘图标,AU3就可以重新获取新的PID列表。这样可以隐藏多个QQ的托盘图标。学习了。
afan版主今日凌晨发布systray UDF.au3,料事如神啊。呵呵。

#include "SysTray UDF.au3"

$st_process = "QQ.exe"
_SysTrayIconVisible(1, _SysTrayIconIndex($st_process))  ;隐藏指定托盘图标
_SysTrayIcon_Clean('QQ.exe')
发表于 2010-3-18 17:05:09 | 显示全部楼层
回复 8# dnbj2010

呵呵,碰巧了~

不过你这段代码应该不用先 _SysTrayIconVisible(1, _SysTrayIconIndex($st_process))  隐藏,直接 _SysTrayIcon_Clean('QQ.exe') 就OK了吧?
 楼主| 发表于 2010-3-18 17:19:02 | 显示全部楼层
回复 9# afan

还真是,直接清掉图标就行了。我这个隐藏这一步也还是多余了。隐藏即清除,理解深入点了。
谢版主。
发表于 2010-3-18 20:43:12 | 显示全部楼层
看看
发表于 2010-3-20 17:57:13 | 显示全部楼层
非常感谢,收藏了不少好东西~~~~~~~~~~~
发表于 2011-3-21 15:06:08 | 显示全部楼层
借楼主的帖问一下,SysTray UDF.au3是不是不支持WIN7?
发表于 2011-4-30 02:59:57 | 显示全部楼层
在VISTA没有用呀
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 00:11 , Processed in 0.081091 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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