dnbj2010 发表于 2010-3-18 11:10:52

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

本帖最后由 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托盘。
改来改去都解决不了,向高手求解。

x163169x 发表于 2012-6-3 18:34:25

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

$st_process = "QQ.ex ...
dnbj2010 发表于 2010-3-18 11:10 http://www.autoitx.com/images/common/back.gif


    其实很简单,思路对了就可以了。你的思路上就是多了条要给所有同名程序添加不同的标题,但是你忽略一个现成的条件,那就是进程标识,那是唯一的,既然这样那我们完全可以依赖现成的ProcessList()。

   罗列进程,触发条件(QQ.EXE),匹配就隐藏。
   范例:
#include "SysTray_UDF.au3"   
$List=ProcessList()
      $i=$List
      $j=1
         while $j<=$i
            If StringUpper($List[$j])="QQ.EXE"then
               _SysTrayIcon_Clean($List[$j],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

llztt 发表于 2010-3-18 11:34:31

个人笨想法哈,如果多个窗口标题相同,可以整一个,然后修改其标题,循环进行下一个。。。
至于你的问题估计会麻烦些,因为你要根据系统的UDF进行修改使用。。

dnbj2010 发表于 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)

afan 发表于 2010-3-18 15:45:29

_SysTrayIcon_Clean('QQ.exe')
http://www.autoitx.com/thread-13661-1-1.html
楼主应该解决了吧~

dnbj2010 发表于 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')

dnbj2010 发表于 2010-3-18 16:40:40

晕,真是误人,刚才发的代码第一句
#include "SysTray_UDF.au3"是错的那个
正确的是下面这个
#include "systray UDF.au3"
惭愧!

afan 发表于 2010-3-18 16:42:20

回复 6# dnbj2010


    呵呵,如果你只想清理图标,一句就行了,前面的多余了~
#include "SysTray UDF.au3"
_SysTrayIcon_Clean('QQ.exe')

dnbj2010 发表于 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')

afan 发表于 2010-3-18 17:05:09

回复 8# dnbj2010

呵呵,碰巧了~

不过你这段代码应该不用先 _SysTrayIconVisible(1, _SysTrayIconIndex($st_process))隐藏,直接 _SysTrayIcon_Clean('QQ.exe') 就OK了吧?

dnbj2010 发表于 2010-3-18 17:19:02

回复 9# afan

还真是,直接清掉图标就行了。我这个隐藏这一步也还是多余了。隐藏即清除,理解深入点了。
谢版主。

rikthhpgf2005 发表于 2010-3-18 20:43:12

看看:face (20):

hoboyo 发表于 2010-3-20 17:57:13

非常感谢,收藏了不少好东西~~~~~~~~~~~

fox_hazard 发表于 2011-3-21 15:06:08

借楼主的帖问一下,SysTray UDF.au3是不是不支持WIN7?

libosir 发表于 2011-4-30 02:59:57

在VISTA没有用呀
页: [1] 2
查看完整版本: [已解决]:多个QQ托盘图标无法隐藏