gzh888666 发表于 2010-11-25 11:28:55

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

本帖最后由 gzh888666 于 2010-11-27 00:44 编辑

论坛里看到P版的可以禁止程序弹窗的代码,很是牛X,那么有的程序托盘图标闪烁,是否可以禁止呢?高手指点!

gzh888666 发表于 2010-11-26 10:11:45

自己顶一下,希望P版看到!

pusofalse 发表于 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

gzh888666 发表于 2010-11-26 15:39:39

终于等到P版了,其实没看懂!关键是其中的几个自定义函数没搞明白{:face (301):} 希望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

pusofalse 发表于 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

呵呵!我也看看{:1_413:}

gzh888666 发表于 2010-11-27 00:38:17

本帖最后由 gzh888666 于 2010-11-27 00:43 编辑

测试成功!P版果然强大,谢谢P老大了!分类里没有已解决呀!怎么移过去呢?

vigov 发表于 2012-1-18 11:14:26

楼主您好 您能给个 P版的可以禁止程序弹窗的代码 的帖子的链接吗? 找了半天没找到 我电脑安装了个艾美M6的遥控器 遥控器的控制软件 每次开机后都在系统托盘弹窗提示欢迎使用艾美遥控器软件 每次开机都提示 有点讨厌 想禁止这个弹窗 不知道楼主有办法吗?

vigov 发表于 2012-1-18 23:01:49

再自己顶顶

vigov 发表于 2012-1-21 12:56:02

再自己顶顶

vigov 发表于 2012-1-24 13:53:53

再自己顶顶

chenronting 发表于 2012-7-7 18:36:10

真是非常厉害, 这个深度,佩服~!

gywxdn 发表于 2017-10-13 13:55:33

真是非常厉害, 这个深度,佩服~
页: [1]
查看完整版本: (求助总是强大的P版)如何禁止某程序托盘图标闪烁(已解决,但分类里没有已解决。)