找回密码
 加入
搜索
查看: 5718|回复: 12

[系统综合] (求助总是强大的P版)如何禁止某程序托盘图标闪烁(已解决,但分类里没有已解决。)

[复制链接]
发表于 2010-11-25 11:28:55 | 显示全部楼层 |阅读模式
本帖最后由 gzh888666 于 2010-11-27 00:44 编辑

论坛里看到P版的可以禁止程序弹窗的代码,很是牛X,那么有的程序托盘图标闪烁,是否可以禁止呢?高手指点!
 楼主| 发表于 2010-11-26 10:11:45 | 显示全部楼层
自己顶一下,希望P版看到!
发表于 2010-11-26 11:21:38 | 显示全部楼层
截取目标进程的Shell32.Shell_NotifyIcon函数,如果截取到 函数的第一个参数为1,表示目标进程正要修改托盘图标的状态,立刻返回APIHOOK_Flags_Call_Abort阻止调用就行了。

你既然已经看到了那个阻止创建窗口的帖子,那你完全可以独立解决这个问题,比着葫芦画瓢就是了,先把你的代码贴上来吧。- -|||

Shell32.Shell_NotifyIcon函数参考:http://msdn.microsoft.com/en-us/library/bb762159(VS.85).aspx
 楼主| 发表于 2010-11-26 15:39:39 | 显示全部楼层
终于等到P版了,其实没看懂!关键是其中的几个自定义函数没搞明白 希望P版帮我先把禁止GameClient.exe托盘闪动的代码写一下,偶真的想学习!
#include <RTApiHook32.au3>
#include <SysTray_UDF.au3>
$st_process="hf.exe"
$tbxs=0
_SysTrayIconVisible($tbxs, _SysTrayIconIndex($st_process))

RunWait("GameClient.exe", @ScriptDir)
ProcessClose("hf.exe")
$hProcess = _RTOpenProcess("GameClient.exe")
 
$hCallBack = DllCallBackRegister("_CreateWindowCallBack", "dword", "handle;ptr")
$pCallBack = DllCallBackGetPtr($hCallBack)
 
$pCreateWindowExW = _RTGetProcAddress("User32.dll", "CreateWindowExW")
$tCreateWindowExW = _RTApiHookEx($hProcess, $pCreateWindowExW, 12, $pCallBack, $APIHOOK_Flags_Default)
 
OnAutoItExitRegister("_Restore")
 
While 1
        Sleep(100)
WEnd
 
Func _Restore()
        _RTApiUnhook($hProcess, $pCreateWindowExW, DllStructGetData($tCreateWindowExW, "Entrypoint"))
        DllCallBackFree($hCallBack)
EndFunc ;==>_Restore
 
Func _CreateWindowCallBack($hProcess, $pCallInfo)
 
        Local $pClassName = _RTApiHookReadParam($hProcess, $pCallInfo, 2)
        Local $sClassName = _RTReadProcessMemory($hProcess, $pClassName, "", 1024, "wstr")
 
 ;      If ($sClassName = "XXXX") Then
 
                _RTApiHookSetRetVal($hProcess, $pCallInfo, 0)
                _RTApiHookSetError($hProcess, $pCallInfo, 1407)
 
                Return $APIHOOK_Flags_Call_Abort
 ;      EndIf
EndFunc ;==>_CreateWinowCallBack
发表于 2010-11-26 22:11:56 | 显示全部楼层
#NoTrayIcon
#include <RTApiHook32.au3>

$iPid = ProcessExists("QQ.exe")
$hProcess = _RTOpenProcess($iPid)

$pShell_NotifyIcon  = _RTGetProcAddress("Shell32.dll", "Shell_NotifyIcon")
$pShell_NotifyIconA = _RTGetProcAddress("Shell32.dll", "Shell_NotifyIconA")
$pShell_NotifyIconW = _RTGetProcAddress("Shell32.dll", "Shell_NotifyIconW")

$hCallBack = DllCallBackRegister("_Shell_NotifyIcon_CallBack", "dword", "handle;ptr")
$pCallBack = DllCallBackGetPtr($hCallBack)

$tShell_NotifyIcon  = _RTApiHookEx($hProcess, $pShell_NotifyIcon,  2, $pCallBack)
$tShell_NotifyIconA = _RTApiHookEx($hProcess, $pShell_NotifyIconA, 2, $pCallBack)
$tShell_NotifyIconW = _RTApiHookEx($hProcess, $pShell_NotifyIconW, 2, $pCallBack)

While _RTWaitForObject($hProcess, 1)
WEnd
DllCallBackFree($hCallBack)

Func _Shell_NotifyIcon_CallBack($hProcess, $pCallInfo)
        If (_RTApiHookReadParam($hProcess, $pCallInfo, 1, "dword") = 1) Then
                Return $APIHOOK_Flags_Call_Abort
        EndIf
EndFunc        ;==>_Shell_NotifyIcon_CallBack
发表于 2010-11-27 00:25:49 | 显示全部楼层
呵呵!我也看看
 楼主| 发表于 2010-11-27 00:38:17 | 显示全部楼层
本帖最后由 gzh888666 于 2010-11-27 00:43 编辑

测试成功!P版果然强大,谢谢P老大了!分类里没有已解决呀!怎么移过去呢?
发表于 2012-1-18 11:14:26 | 显示全部楼层
楼主您好 您能给个 P版的可以禁止程序弹窗的代码 的帖子的链接吗? 找了半天没找到 我电脑安装了个艾美M6的遥控器 遥控器的控制软件 每次开机后都在系统托盘弹窗提示欢迎使用艾美遥控器软件 每次开机都提示 有点讨厌 想禁止这个弹窗 不知道楼主有办法吗?
发表于 2012-1-18 23:01:49 | 显示全部楼层
再自己顶顶
发表于 2012-1-21 12:56:02 | 显示全部楼层
再自己顶顶
发表于 2012-1-24 13:53:53 | 显示全部楼层
再自己顶顶
发表于 2012-7-7 18:36:10 | 显示全部楼层
真是非常厉害, 这个深度,佩服~!
发表于 2017-10-13 13:55:33 | 显示全部楼层
真是非常厉害, 这个深度,佩服~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-3-29 04:44 , Processed in 0.083988 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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