(view source code of dialogboxes_systemtraymessage.cs as plain text)
namespace RobvanderWoude{[System.Runtime.InteropServices.Guid( "96D1A611-39B2-4039-AEDA-C9DC88FFB031" )]
public interface SystemTrayMessage_Interface
{[System.Runtime.InteropServices.DispId( 1 )]
void CheckUpdate( );
[System.Runtime.InteropServices.DispId( 2 )]
string Credits( );
[System.Runtime.InteropServices.DispId( 3 )]
string Help( int html = 0 );
[System.Runtime.InteropServices.DispId( 4 )]
string ListProperties( );
[System.Runtime.InteropServices.DispId( 5 )]
string ListToolTipIcons( );
[System.Runtime.InteropServices.DispId( 6 )]
string SampleCode( );
[System.Runtime.InteropServices.DispId( 7 )]
void Show( );
}[System.Runtime.InteropServices.Guid( "F80187E9-E178-4B7B-87EB-EEE1386FF0E1" ), System.Runtime.InteropServices.InterfaceType( System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIDispatch )]
public interface SystemTrayMessage_Events
{ }[System.Runtime.InteropServices.Guid( "C7484303-39FC-4C47-8736-02E3E341BDD5" ), System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.AutoDual ), System.Runtime.InteropServices.ComSourceInterfaces( typeof( SystemTrayMessage_Events ) )]
public class SystemTrayMessage : SystemTrayMessage_Interface
{ #region Default Valuesconst string defaulticonfile = "shell32.dll";
const int defaulticonindex = 277;
const int defaulttimeout = 10;
const System.Windows.Forms.ToolTipIcon defaulttooltipicon = System.Windows.Forms.ToolTipIcon.Info;
static readonly string defaulttitle = string.Format( "{0}, Version {1}", Global.Common.ProgramInfo.FileName, Global.Common.ProgramInfo.FileVersion );
static readonly string[] searchpath = System.Environment.GetEnvironmentVariable( "PATH" ).Split( new char[] { ';' }, System.StringSplitOptions.RemoveEmptyEntries );
#endregion Default Valuesstatic System.Windows.Forms.NotifyIcon notifyicon;
static System.Drawing.Icon systrayicon;
#region Methodspublic void CheckUpdate( )
{Global.Common.ProgramInfo.CheckUpdate( );
}public string Credits( )
{return Global.Common.Credits( );
}public string Help( int html = 0 )
{int col1width = 0;
int col2width = 0;
int col3width = 0;
int col4width = 0;
int col5width = 0;
string help = string.Empty;
string linetemplate = string.Empty;
string separatorline = string.Empty;
if ( html == 1 )
{help += "<h1>Help for SystemTrayMessage class</h1>\n\n";
help += "<p>Present an icon in the notification area (system tray) with an optional tooltip balloon, and return whether the icon or tooltip were clicked</p>\n\n";
help += "<h2>COM ProgID: RobvanderWoude.SystemTrayMessage</h2>\n\n";
} else {help += "Help for SystemTrayMessage class\n";
help += new string( '\u2500', help.Length ) + "\n\n";
help += "Present an icon in the notification area (system tray) with an optional tooltip balloon, and return whether the icon or tooltip were clicked\n\n\n";
help += "COM ProgID: RobvanderWoude.SystemTrayMessage\n\n\n";
} #region Propertiesif ( html == 1 )
{separatorline = string.Empty;
linetemplate = "<tr>\n\t<td>{0}</td>\n\t<td>{1}</td>\n\t<td>{2}</td>\n\t<td>{3}</td>\n\t<td>{4}</td>\n</tr>\n";
help += "<table>\n";
help += "<tr>\n";
help += "\t<th colspan=\"5\">Properties (Note that all properties are string or integer, no booleans, objects or arrays)</th>\n";
help += "</tr>\n";
help += "<tr>\n";
help += "\t<th>Property Name</th>\n";
help += "\t<th>Description</th>\n";
help += "\t<th>Mandatory</th>\n";
help += "\t<th>Read-Only</th>\n";
help += "\t<th>Default (Allowed) Values</th>\n";
help += "</tr>\n";
} else {col1width = 16;
col2width = 50;
col3width = 9;
col4width = 9;
col5width = 44;
separatorline = "\u251C" + new string( '\u2500', 2 + col1width ) + "\u253C" + new string( '\u2500', 2 + col2width ) + "\u253C" + new string( '\u2500', 2 + col3width ) + "\u253C" + new string( '\u2500', 2 + col4width ) + "\u253C" + new string( '\u2500', 2 + col5width ) + "\u2524\n";
linetemplate = "\u2502 {0,-" + col1width.ToString( ) + "} \u2502 {1,-" + col2width.ToString( ) + "} \u2502 {2,-" + col3width.ToString( ) + "} \u2502 {3,-" + col4width.ToString( ) + "} \u2502 {4,-" + col5width.ToString( ) + "} \u2502\n";
help += "\u250C" + new string( '\u2500', 14 + col1width + col2width + col3width + col4width + col5width ) + "\u2510\n";
help += "\u2502" + new string( ' ', 14 + col1width + col2width + col3width + col4width + col5width ) + "\u2502\n";
help += string.Format( "\u2502 {0,-" + ( 12 + col1width + col2width + col3width + col4width + col5width ).ToString( ) + "} \u2502\n", "Properties (Note that all properties are string or integer, no booleans, objects or arrays)" );
help += "\u2502" + new string( ' ', 14 + col1width + col2width + col3width + col4width + col5width ) + "\u2502\n";
help += "\u255E" + new string( '\u2550', 2 + col1width ) + "\u2564" + new string( '\u2550', 2 + col2width ) + "\u2564" + new string( '\u2550', 2 + col3width ) + "\u2564" + new string( '\u2550', 2 + col4width ) + "\u2564" + new string( '\u2550', 2 + col5width ) + "\u2561\n";
help += string.Format( linetemplate, "Property Name", "Description", "Mandatory", "Read-Only", "Default (Allowed) Values" );
help += "\u255E" + new string( '\u2550', 2 + col1width ) + "\u256A" + new string( '\u2550', 2 + col2width ) + "\u256A" + new string( '\u2550', 2 + col3width ) + "\u256A" + new string( '\u2550', 2 + col4width ) + "\u256A" + new string( '\u2550', 2 + col5width ) + "\u2561\n";
}help += HelpTableRow( linetemplate, "balloonclicked", "Will be 1 (true) if wait is 1 (true) and the tooltip balloon was clicked before timeout elapsed (0=false; 1=true)", "N/A", "YES", "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "debuginfo", Global.Common.Help.debuginfo, "N/A", "YES", "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "errors", Global.Common.Help.errors, "N/A", "YES", "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "escapemessage", "Interpret \\n as newline and \\t as tab in message (0=false; 1=true)", "no", "no", "1", html );
help += separatorline;
help += HelpTableRow( linetemplate, "iconfile", "Either an icon file (*.ico) or an icon library (*.dll or *.exe) containing the icon to be used in notification area", "no", "no", string.Format( "icon #{0} in {1}", defaulticonindex, defaulticonfile ), html );
help += separatorline;
help += HelpTableRow( linetemplate, "iconindex", "Index of icon in icon library iconfile", "no", "no", string.Format( "{0} if iconfile is {1}", defaulticonindex, defaulticonfile ), html );
help += separatorline;
help += HelpTableRow( linetemplate, "message", "Tooltip message (if empty, no tooltip is shown)", "no", "no", "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "timeout", Global.Common.Help.timeout, "no", "no", defaulttimeout.ToString( ), html );
help += separatorline;
help += HelpTableRow( linetemplate, "title", Global.Common.Help.title, "no", "no", defaulttitle, html );
help += separatorline;
help += HelpTableRow( linetemplate, "tooltipicon", "Icon shown in the tooltip balloon (use ListToolTipIcons( ) for a list of available icons)", "no", "no", string.Format( "{0} ({1})", defaulttooltipicon.ToString( ), ListToolTipIcons( ).Replace( ";", ", " ) + ")" ), html );
help += separatorline;
help += HelpTableRow( linetemplate, "Version", Global.Common.Help.version, "N/A", "YES", "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "wait", "Wait for timeout to elapse (0=false; 1=true)\n(if 1, script will wait until either tooltip balloon is clicked or timeout elapses, if 0 script will continue without waiting, but \"balloonclicked\" status will not be available)", "", "", "1", html );
if ( html == 1 )
{help += "</table>\n\n\n";
} else {help += "\u2514" + new string( '\u2500', 2 + col1width ) + "\u2534" + new string( '\u2500', 2 + col2width ) + "\u2534" + new string( '\u2500', 2 + col3width ) + "\u2534" + new string( '\u2500', 2 + col4width ) + "\u2534" + new string( '\u2500', 2 + col5width ) + "\u2518\n\n\n";
} #endregion Properties #region Methodsif ( html == 1 )
{separatorline = string.Empty;
linetemplate = "<tr>\n\t<td>{0}</td>\n\t<td>{1}</td>\n\t<td>{2}</td>\n</tr>\n";
help += "<table>\n";
help += "<tr>\n";
help += "\t<th colspan=\"3\">Methods</th>\n";
help += "</tr>\n";
help += "<tr>\n";
help += "\t<th>Method Name</th>\n";
help += "\t<th>Description</th>\n";
help += "\t<th>Requirements</th>\n";
help += "</tr>\n";
} else {col1width = 16;
col2width = 74;
col3width = 44;
separatorline = "\u251C" + new string( '\u2500', 2 + col1width ) + "\u253C" + new string( '\u2500', 2 + col2width ) + "\u253C" + new string( '\u2500', 2 + col3width ) + "\u2524\n";
linetemplate = "\u2502 {0,-" + col1width.ToString( ) + "} \u2502 {1,-" + col2width.ToString( ) + "} \u2502 {2,-" + col3width.ToString( ) + "} \u2502\n";
help += "\u250C" + new string( '\u2500', 8 + col1width + col2width + col3width ) + "\u2510\n";
help += "\u2502" + new string( ' ', 8 + col1width + col2width + col3width ) + "\u2502\n";
help += string.Format( "\u2502 {0,-" + ( 6 + col1width + col2width + col3width ).ToString( ) + "} \u2502\n", "Methods" );
help += "\u2502" + new string( ' ', 8 + col1width + col2width + col3width ) + "\u2502\n";
help += "\u255E" + new string( '\u2550', 2 + col1width ) + "\u2564" + new string( '\u2550', 2 + col2width ) + "\u2564" + new string( '\u2550', 2 + col3width ) + "\u2561\n";
help += string.Format( linetemplate, "Method Name", "Description", "Requirements" );
help += "\u255E" + new string( '\u2550', 2 + col1width ) + "\u256A" + new string( '\u2550', 2 + col2width ) + "\u256A" + new string( '\u2550', 2 + col3width ) + "\u2561\n";
}help += HelpTableRow( linetemplate, "CheckUpdate", Global.Common.Help._checkupdate, "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "Credits", Global.Common.Help._credits, "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "Help", Global.Common.Help._help, "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "ListProperties", Global.Common.Help._listproperties, "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "ListToolTipIcons", "Return a semicolon-separated list of available icons", "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "SampleCode", Global.Common.Help._samplecode, "", html );
help += separatorline;
help += HelpTableRow( linetemplate, "Show", "Presents an icon in the notification area (system tray) with an optional tooltip balloon; if the program is set to continue without waiting, then that's all; if the program is set to wait for the timeout to elapse, clicking the tooltip balloon sets \"balloonclicked\" property and aborts the program.", "", html );
if ( html == 1 )
{help += "</table>\n\n\n";
} else {help += "\u2514" + new string( '\u2500', 2 + col1width ) + "\u2534" + new string( '\u2500', 2 + col2width ) + "\u2534" + new string( '\u2500', 2 + col3width ) + "\u2518\n\n\n";
} #endregion Methods #region Exampleif ( html == 1 )
{help += "<h2>VBScript usage example:</h2>\n\n<pre>";
} else {help += "VBScript usage example:\n";
help += new string( '\u2500', 23 ) + "\n\n";
}help += SampleCode( );
if ( html == 1 )
{help += "</pre>";
}help += "\n\n";
#endregion Examplehelp = help.Replace( "\n", System.Environment.NewLine );
return help;
}private string HelpTableRow( string template, string col1text, string col2text, string col3text, int html )
{if ( html == 1 )
{return Global.Common.Help.HelpTableRowHTML( col1text, col2text, col3text );
} else {return Global.Common.Help.HelpTableRowText( template, col1text, col2text, col3text, "", "" );
} }private string HelpTableRow( string template, string col1text, string col2text, string col3text, string col4text, string col5text, int html )
{if ( html == 1 )
{return Global.Common.Help.HelpTableRowHTML( col1text, col2text, col3text, col4text, col5text );
} else {return Global.Common.Help.HelpTableRowText( template, col1text, col2text, col3text, col4text, col5text );
} }public string ListProperties( )
{return Global.Common.Lists.Properties( this );
}public string ListToolTipIcons( )
{return Global.Common.Lists.ToolTipIcons( );
}public string SampleCode( )
{string code = string.Empty;
code += "Set objSystemTrayMessage = CreateObject( \"RobvanderWoude.SystemTrayMessage\" )\n\n";
code += "With objSystemTrayMessage\n";
code += "\t.message = \"It is time for your daily backup.\" & vbCrLf & \"Please save and close all documents,\" & vbCrLf & \"and click this message when ready.\"\n";
code += "\t.title = \"Backup Time\"\n";
code += "\t.timeout = 1800\n";
code += "\t.wait = 1\n";
code += "\tWScript.Echo .ListProperties( )\n";
code += "\tWScript.Echo\n";
code += "\t.Show\n";
code += "\tIf .balloonclicked Then\n";
code += "\t\tWScript.Echo \"You clicked the tooltip balloon before the timeout elapsed\"\n";
code += "\tEnd If\n";
code += "End With\n\n";
code += "Set objSystemTrayMessage = Nothing";
return code;
}public void Show( )
{if ( iconext == ".dll" )
{systrayicon = Global.IconExtractor.Extract( iconfile, iconindex, true );
} else {systrayicon = new System.Drawing.Icon( iconfile );
}notifyicon = new System.Windows.Forms.NotifyIcon( );
notifyicon.Icon = systrayicon;
notifyicon.Visible = true;
if ( !string.IsNullOrWhiteSpace( message ) )
{if ( _escapemessage )
{message = System.Text.RegularExpressions.Regex.Replace( message, @"(?<!\\)\\n", "\n" );
message = System.Text.RegularExpressions.Regex.Replace( message, @"(?<!\\)\\t", "\t" );
message = System.Text.RegularExpressions.Regex.Replace( message, @"\\", @"\" );
}if ( _wait )
{ // Wait for the icon/message to be clickednotifyicon.BalloonTipClicked += ( object sender, System.EventArgs e ) => { _balloonclicked = true; };
notifyicon.BalloonTipClosed += ( object sender, System.EventArgs e ) => { _balloonclicked = true; };
}notifyicon.ShowBalloonTip( _timeout, title, message, _tooltipicon );
}if ( _wait )
{_balloonclicked = false;
while ( _timeout > 0 && !_balloonclicked )
{System.Threading.Thread.Sleep( 100 );
System.Windows.Forms.Application.DoEvents( );
_timeout -= 100;
}notifyicon.Visible = false;
notifyicon.Dispose( );
} } #endregion Methods #region Propertiesprivate static bool _balloonclicked = false;
[System.Runtime.InteropServices.ComVisible( true )]
public int balloonclicked
{ get {return ( _balloonclicked ? 1 : 0 );
} }private static System.Collections.Generic.List<string> _debuginfo = new System.Collections.Generic.List<string>( );
[System.Runtime.InteropServices.ComVisible( true )]
public string debuginfo
{ get {return string.Join( "\n", _debuginfo.ToArray( ) );
} }private static System.Collections.Generic.List<string> _errors = new System.Collections.Generic.List<string>( );
[System.Runtime.InteropServices.ComVisible( true )]
public string errors
{ get {return string.Join( "\n", _errors.ToArray( ) );
} }private static bool _escapemessage = true;
[System.Runtime.InteropServices.ComVisible( true )]
public int escapemessage
{ get {return ( _escapemessage ? 1 : 0 );
} set {_escapemessage = ( value == 1 );
} }private static string _iconfile = defaulticonfile;
[System.Runtime.InteropServices.ComVisible( true )]
public string iconfile
{ get {return _iconfile;
} set {if ( System.IO.File.Exists( value ) )
{_iconfile = System.IO.Path.GetFullPath( value );
}else if ( iconext == ".dll" || iconext == ".exe" )
{foreach ( string folder in searchpath )
{if ( System.IO.File.Exists( System.IO.Path.Combine( folder, value ) ) )
{_iconfile = System.IO.Path.Combine( folder, value );
break;
} }if ( !System.IO.File.Exists( _iconfile ) )
{_debuginfo.Add( timestamp + "Invalid path to icon file or library, using default icon file \"" + defaulticonfile + "\" and index " + defaulticonindex + " instead" );
_errors.Add( Global.Common.TimeStamp( ) + "Invalid path to icon file or library, using default icon file \"" + defaulticonfile + "\" and index " + defaulticonindex + " instead" );
_iconfile = defaulticonfile;
_iconindex = defaulticonindex;
} }if ( iconfile.EndsWith( "shell32.dll", System.StringComparison.InvariantCultureIgnoreCase ) )
{iconindex = iconindex.LimitToRange( 1, 305 );
} } }[System.Runtime.InteropServices.ComVisible( false )]
private static string iconext
{ get {return System.IO.Path.GetExtension( _iconfile ).ToLower( );
} }private static int _iconindex = defaulticonindex;
[System.Runtime.InteropServices.ComVisible( true )]
public int iconindex
{ get {return _iconindex;
} set {if ( _iconfile.EndsWith( "shell32.dll", System.StringComparison.InvariantCultureIgnoreCase ) )
{_iconindex = value.LimitToRange( 1, 305 );
} else {_iconindex = value;
} } }private static string _message = string.Empty;
[System.Runtime.InteropServices.ComVisible( true )]
public string message
{ get {return _message;
} set {_message = value.Trim( );
} }private static int _timeout = defaulttimeout * 1000;
[System.Runtime.InteropServices.ComVisible( true )]
public int timeout
{ get {return _timeout / 1000;
} set {if ( value < 1 )
{_debuginfo.Add( timestamp + "Cannot set timeout to a value less than 1 second, using the minimum of 1 second" );
_timeout = 1000;
} else {_timeout = value * 1000;
} } }public static string timestamp => Global.Common.TimeStamp( );
private static string _title = defaulttitle;
[System.Runtime.InteropServices.ComVisible( true )]
public string title
{ get {return _title;
} set {if ( string.IsNullOrWhiteSpace( value ) )
{_title = defaulttitle;
} else {_title = value.Trim( );
} } }private static System.Windows.Forms.ToolTipIcon _tooltipicon = defaulttooltipicon;
[System.Runtime.InteropServices.ComVisible( true )]
public string tooltipicon
{ get {return _tooltipicon.ToString( );
} set {if ( !System.Enum.TryParse( value, true, out _tooltipicon ) )
{_tooltipicon = defaulttooltipicon;
} } }[System.Runtime.InteropServices.ComVisible( true )]
public string Version
{ get {return Global.Common.ProgramInfo.FileVersion;
} }private static bool _wait = true;
[System.Runtime.InteropServices.ComVisible( true )]
public int wait
{ get {return ( _wait ? 1 : 0 );
} set {_wait = ( value == 1 );
} } #endregion Properties }}page last modified: 2025-10-11; loaded in 0.0142 seconds