Inno Setup 系统托盘图标插件 TrayIconCtrl V1.5



V1.5 修正在某些 Windows 平台上(例如 Windows XP SP3)不能正常运行的问题。

引用来自  trayiconctrl.iss,2009-10-16 21:06:53 引用来自 trayiconctrl.iss,2009-10-16 21:06:53
; -- trayiconctrl.iss --
; restools
; http://restools.hanzify.org
; TrayIconCtrl.dll 为一个用于 Inno Setup 的 15.5 KB 的 托盘图标插件.
; 这个托盘图标插件拥有目前 windows 系统托盘图标拥有的一切特性.
; 可以说你们看见过的,没看见过的托盘图标效果在这里都已经展现了出来
; 这是我目前所做的最复杂的一个插件, 希望大家喜欢

[Files]
Source: "plugin\trayiconctrl.dll"; Flags: dontcopy

[code]
const
  
NIIF_NONE = 0;
  NIIF_INFO = $1;
  NIIF_WARNING = $2;
  NIIF_ERROR = $3;

type
// 如果你想传递更多的图标给插件,可以增加更多的 Icon 成员。
  
TIconList = record
    
Icon1: UINT;
    Icon2: UINT;
    Icon3: UINT;
    Icon4: UINT;
    // Icon5, Icon6 etc.
    // More...
  
end;
  
// 回调函数参数格式声明
  
TMenuItemClickProc = procedure(MenuIndex: Integer);
  TMenuPopupProc = procedure(PopMenu: LongWord; var bShow: Boolean);
  TTrayIconMsgFunc = function(wParam, lParam: LongWord): Boolean;

// 初始化 TrayIcon 插件
function InitTrayIconCtrl(MainForm_Handle, WizardForm_Handle: THandle; uCallbackMessage: UINT;
     szToolTip: String; icon: UINT; bHidden: BOOL; ShowTaskbarAppBtn: BOOL; MenuItems: String;
     DefaultMnuIndex: Integer; MenuItemOnClickCallBack: TMenuItemClickProc;
     MenuOnPopupCallBack: TMenuPopupProc; TrayIconMsgCallBack: TTrayIconMsgFunc): Boolean;
#ifdef UNICODE
    
external 'InitTrayIconCtrlW@files:trayiconctrl.dll stdcall';
#else
    
external 'InitTrayIconCtrlA@files:trayiconctrl.dll stdcall';
#endif
// MainForm_Handle : MainForm.Handle
// WizardForm_Handle : WizardForm.Handle
// uCallbackMessage : 消息标志
// szToolTip : TrayIcon 的 ToolTip 提示, win9x: 64 字符限制, win2000 以上: 128 字符限制
// icon : 显示的 Icon 的句柄. 如果设为 0 的时候默认使用安装程序的图标
// bHidden : 是否立即显示 TrayIcon, 不需要由 ShowIcon 来显示
// ShowTaskbarAppBtn : 是否显示安装程序在任务栏中的按钮
// MenuItems : 所有菜单项的 Caption, 用 ";" 分隔, 如果要显示 ";" 用 "#3B" 代替, 设置为空字符串将会禁止菜单显示, 同时菜单回调函数也被忽略
// DefaultMnuIndex : 默认菜单项, 当默认菜单项不是 -1 的时候, 双击 TrayIcon 的时候事件由用户设计,实际上就是双击的时候执行 MenuItemOnClickCallBack 某个指定的菜单单击事件
// MenuItemOnClickCallBack : TrayIcon 右键菜单点击事件控制
// MenuOnPopupCallBack : TrayIcon 右键菜单弹出前触发的回调事件
// TrayIconMsgCallBack : 自定义消息事件,可以实现更丰富的控制

// 卸载 TrayIcon 插件
function UninitTrayIconCtrl(): Boolean; external 'UninitTrayIconCtrl@files:trayiconctrl.dll stdcall';

// 隐藏 托盘图标
function HideTrayIcon(): Boolean; external 'HideTrayIcon@files:trayiconctrl.dll stdcall';

// 显示 托盘图标
function ShowTrayIcon(): Boolean; external 'ShowTrayIcon@files:trayiconctrl.dll stdcall';

// 为显示动态图标而为插件添加一组 图标 列。
function SetIconList(pHIconList: TIconList; nNumIcons: UINT): Boolean; external 'SetIconList@files:trayiconctrl.dll stdcall';
// pHIconList : 图标组
// nNumIcons : 要添加多少个图标
    
// 显示动态图标动画
function AnimateTrayIcon(nDelayMilliSeconds: UINT; nNumSeconds: Integer): Boolean;
     external 'AnimateTrayIcon@files:trayiconctrl.dll stdcall';
// nDelayMilliSeconds : 每个图标显示间隔时间, 这将影响动态速度
// nNumSeconds : 循环显示时间(秒数), 当这里设置为 -1 时, 将会无限时间循环

// 停止动态图标动画
function StopAnimation(): Boolean; external 'StopAnimation@files:trayiconctrl.dll stdcall';

// 把 WizardForm 最小化到托盘图标, 或者还原出现
function ToggleWizardVisible(): Boolean; external 'ToggleWizardVisible@files:trayiconctrl.dll stdcall';

// 显示漫画型气泡提示, 这个函数只能对 Windows 2000 以上系统有作用
function ShowBalloon(szText, szTitle: String; dwIcon: DWORD; uTimeout: UINT; bWaitforPreMsg: Boolean): Boolean;
#ifdef UNICODE
    
external 'ShowBalloonW@files:trayiconctrl.dll stdcall';
#else
    
external 'ShowBalloonA@files:trayiconctrl.dll stdcall';
#endif
// szText : 提示信息, 256 字符限制
// szTitle : 提示信息标题, 64 字符限制
// dwIcon : 提示信息中带有的图标
//    NIIF_NONE = 0x00000000;     无图标
//    NIIF_INFO = 0x00000001;     信息图标
//    NIIF_WARNING = 0x00000002;  警告图标
//    NIIF_ERROR = 0x00000003;    错误图标
// uTimeout : 停留的时间 范围: 10 ~ 30 秒. 如果无任何鼠标动作时, 系统自动维持 60 秒
// bWaitforPreMsg : 在 Win2000 中, 默认是要前一个消息消失后才会显示后一个消息, 这里设置为 False 的时候就直接替换前一个消息

// 隐藏漫画型气泡提示, 这个函数只能对 Windows 2000 以上系统有作用
function HideBalloon(): Boolean; external 'HideBalloon@files:trayiconctrl.dll stdcall';

// WizardForm 是否已被最小化到系统托盘区
function WizardFormInTray(): Boolean; external 'WizardFormInTray@files:trayiconctrl.dll stdcall';

// 重新设定托盘图标插件的提示标签和图标
function SetTrayIcon(szToolTip: String; icon: UINT): Boolean;
#ifdef UNICODE
    
external 'SetTrayIconW@files:trayiconctrl.dll stdcall';
#else
    
external 'SetTrayIconA@files:trayiconctrl.dll stdcall';
#endif

点击下面连接下载例子。
http://restools.hanzify.org/inno/trayiconctrl/IS_TrayIconCtrl_V1.5.zip



[本日志由 xin 于 2010-02-27 01:04 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: Inno Setup TrayIconCtrl Plugin 插件
评论: 11 | 引用: 0 | 查看次数: 17916
zhfi [2009-08-20 01:38 PM]
引用来自 xin 引用来自 xin
按照 zhfi 调用水纹插件(WaterCtrl)的方法,大致上应该可以用同样的方法来调用 TrayIconCtrl 插件。

这个如果插件是标准的函数,没有涉及一些Inno特有的处理的话, 应该是可以在NSIS中使用的.
晚上回去我试试看.

^~*
xin [2009-07-30 01:06 AM]
按照 zhfi 调用水纹插件(WaterCtrl)的方法,大致上应该可以用同样的方法来调用 TrayIconCtrl 插件。
JunJun [2009-07-29 04:32 PM]
请问能搞一个NSIS用的吗,现在那个不太好用 静默安装时使用还会有问题。。。
xin [2009-07-15 06:29 PM]
Example_Password.iss 中关于 SetPassword 函数的使用就有解释。
hello [2009-07-15 03:17 PM]
restools,我用了你的密码扰乱功能,可是,在初始化时,运行函数ExtractTemporaryFile解压,提示文件损坏,请问这个有办法结决吗?
xin [2009-05-04 08:09 PM]
汉化新世纪论坛
KIM [2009-04-29 09:31 AM]
引用来自 xin 引用来自 xin
很多程序都会建立互斥对象。可用 CheckForMutexes 来检测。
如果没有互斥对象,只能用检查进程的外部程序或 DLL 来完成检测工作。具体我没做过,你可在论坛中搜索旧帖即可找到,因为论坛中至少不会少于 3 次讨论这个问题。

哪儿的论坛?
xin [2009-03-02 10:31 PM]
很多程序都会建立互斥对象。可用 CheckForMutexes 来检测。
如果没有互斥对象,只能用检查进程的外部程序或 DLL 来完成检测工作。具体我没做过,你可在论坛中搜索旧帖即可找到,因为论坛中至少不会少于 3 次讨论这个问题。
KIM [2009-02-28 01:59 AM]
请问xin,如何在安装前检查目标程序是否已经在运行,然后安装程序给出提示?
或者检查目标文件是否已经在使用中,如dll和exe文件
wow [2008-11-08 08:47 AM]
太棒了!强烈支持作者!
如果能随便提供一些图标,比如展示安装过程的ico就更完美了
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 5000 字 | UBB代码 开启 | [img]标签 关闭