Initial commit, 0.9.1.233
3
.gitignore
vendored
|
@ -3,6 +3,9 @@
|
||||||
##
|
##
|
||||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||||
|
|
||||||
|
# SVN
|
||||||
|
.svn*
|
||||||
|
|
||||||
# User-specific files
|
# User-specific files
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
|
|
59
Config.cs
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
using Microsoft.WindowsAPICodePack.Dialogs;
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu
|
||||||
|
{
|
||||||
|
public class Config
|
||||||
|
{
|
||||||
|
public static string Language = "en";
|
||||||
|
|
||||||
|
public static string Path
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Properties.Settings.Default.PathDirectory;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool LoadOrSetByUser()
|
||||||
|
{
|
||||||
|
bool pathOK = Directory.Exists(
|
||||||
|
Properties.Settings.Default.PathDirectory);
|
||||||
|
if (!pathOK)
|
||||||
|
{
|
||||||
|
pathOK = SetFolderByUser();
|
||||||
|
}
|
||||||
|
return pathOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool SetFolderByUser()
|
||||||
|
{
|
||||||
|
bool pathOK = false;
|
||||||
|
bool userAborted = false;
|
||||||
|
CommonOpenFileDialog dialog = new CommonOpenFileDialog();
|
||||||
|
dialog.InitialDirectory = Path;
|
||||||
|
dialog.IsFolderPicker = true;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
|
||||||
|
{
|
||||||
|
if (Directory.Exists(dialog.FileName))
|
||||||
|
{
|
||||||
|
pathOK = true;
|
||||||
|
Properties.Settings.Default.PathDirectory =
|
||||||
|
dialog.FileName;
|
||||||
|
Properties.Settings.Default.Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
userAborted = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (!pathOK && !userAborted);
|
||||||
|
|
||||||
|
return pathOK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
526
Controls/AboutBox.Designer.cs
generated
Normal file
|
@ -0,0 +1,526 @@
|
||||||
|
namespace SystemTrayMenu.Controls
|
||||||
|
{
|
||||||
|
partial class AboutBox
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox));
|
||||||
|
this.buttonDetails = new System.Windows.Forms.Button();
|
||||||
|
this.ImagePictureBox = new System.Windows.Forms.PictureBox();
|
||||||
|
this.AppDateLabel = new System.Windows.Forms.Label();
|
||||||
|
this.buttonSystemInfo = new System.Windows.Forms.Button();
|
||||||
|
this.AppCopyrightLabel = new System.Windows.Forms.Label();
|
||||||
|
this.AppVersionLabel = new System.Windows.Forms.Label();
|
||||||
|
this.AppDescriptionLabel = new System.Windows.Forms.Label();
|
||||||
|
this.GroupBox1 = new System.Windows.Forms.GroupBox();
|
||||||
|
this.AppTitleLabel = new System.Windows.Forms.Label();
|
||||||
|
this.buttonOk = new System.Windows.Forms.Button();
|
||||||
|
this.MoreRichTextBox = new System.Windows.Forms.RichTextBox();
|
||||||
|
this.TabPanelDetails = new System.Windows.Forms.TabControl();
|
||||||
|
this.TabPageApplication = new System.Windows.Forms.TabPage();
|
||||||
|
this.AppInfoListView = new System.Windows.Forms.ListView();
|
||||||
|
this.colKey = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.colValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.TabPageAssemblies = new System.Windows.Forms.TabPage();
|
||||||
|
this.AssemblyInfoListView = new System.Windows.Forms.ListView();
|
||||||
|
this.colAssemblyName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.colAssemblyVersion = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.colAssemblyBuilt = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.colAssemblyCodeBase = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.TabPageAssemblyDetails = new System.Windows.Forms.TabPage();
|
||||||
|
this.AssemblyDetailsListView = new System.Windows.Forms.ListView();
|
||||||
|
this.ColumnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.ColumnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||||
|
this.AssemblyNamesComboBox = new System.Windows.Forms.ComboBox();
|
||||||
|
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.ImagePictureBox)).BeginInit();
|
||||||
|
this.TabPanelDetails.SuspendLayout();
|
||||||
|
this.TabPageApplication.SuspendLayout();
|
||||||
|
this.TabPageAssemblies.SuspendLayout();
|
||||||
|
this.TabPageAssemblyDetails.SuspendLayout();
|
||||||
|
this.tableLayoutPanel1.SuspendLayout();
|
||||||
|
this.tableLayoutPanel4.SuspendLayout();
|
||||||
|
this.tableLayoutPanel2.SuspendLayout();
|
||||||
|
this.tableLayoutPanel3.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// buttonDetails
|
||||||
|
//
|
||||||
|
this.buttonDetails.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.buttonDetails.AutoSize = true;
|
||||||
|
this.buttonDetails.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.buttonDetails.Location = new System.Drawing.Point(148, 5);
|
||||||
|
this.buttonDetails.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.buttonDetails.MinimumSize = new System.Drawing.Size(133, 40);
|
||||||
|
this.buttonDetails.Name = "buttonDetails";
|
||||||
|
this.buttonDetails.Size = new System.Drawing.Size(133, 40);
|
||||||
|
this.buttonDetails.TabIndex = 25;
|
||||||
|
this.buttonDetails.Text = "Details";
|
||||||
|
this.buttonDetails.Click += new System.EventHandler(this.DetailsButton_Click);
|
||||||
|
//
|
||||||
|
// ImagePictureBox
|
||||||
|
//
|
||||||
|
this.ImagePictureBox.BackgroundImage = global::SystemTrayMenu.Properties.Resources.STM;
|
||||||
|
this.ImagePictureBox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
|
||||||
|
this.ImagePictureBox.Location = new System.Drawing.Point(5, 5);
|
||||||
|
this.ImagePictureBox.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.ImagePictureBox.Name = "ImagePictureBox";
|
||||||
|
this.ImagePictureBox.Size = new System.Drawing.Size(68, 63);
|
||||||
|
this.ImagePictureBox.TabIndex = 24;
|
||||||
|
this.ImagePictureBox.TabStop = false;
|
||||||
|
//
|
||||||
|
// AppDateLabel
|
||||||
|
//
|
||||||
|
this.AppDateLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.AppDateLabel.AutoSize = true;
|
||||||
|
this.AppDateLabel.Location = new System.Drawing.Point(5, 140);
|
||||||
|
this.AppDateLabel.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.AppDateLabel.Name = "AppDateLabel";
|
||||||
|
this.AppDateLabel.Size = new System.Drawing.Size(668, 25);
|
||||||
|
this.AppDateLabel.TabIndex = 23;
|
||||||
|
this.AppDateLabel.Text = "Built on %builddate%";
|
||||||
|
//
|
||||||
|
// buttonSystemInfo
|
||||||
|
//
|
||||||
|
this.buttonSystemInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.buttonSystemInfo.AutoSize = true;
|
||||||
|
this.buttonSystemInfo.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.buttonSystemInfo.Location = new System.Drawing.Point(5, 5);
|
||||||
|
this.buttonSystemInfo.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.buttonSystemInfo.MinimumSize = new System.Drawing.Size(133, 40);
|
||||||
|
this.buttonSystemInfo.Name = "buttonSystemInfo";
|
||||||
|
this.buttonSystemInfo.Size = new System.Drawing.Size(133, 40);
|
||||||
|
this.buttonSystemInfo.TabIndex = 22;
|
||||||
|
this.buttonSystemInfo.Text = "System Info";
|
||||||
|
this.buttonSystemInfo.Visible = false;
|
||||||
|
this.buttonSystemInfo.Click += new System.EventHandler(this.SysInfoButton_Click);
|
||||||
|
//
|
||||||
|
// AppCopyrightLabel
|
||||||
|
//
|
||||||
|
this.AppCopyrightLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.AppCopyrightLabel.AutoSize = true;
|
||||||
|
this.AppCopyrightLabel.Location = new System.Drawing.Point(5, 175);
|
||||||
|
this.AppCopyrightLabel.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.AppCopyrightLabel.Name = "AppCopyrightLabel";
|
||||||
|
this.AppCopyrightLabel.Size = new System.Drawing.Size(668, 25);
|
||||||
|
this.AppCopyrightLabel.TabIndex = 21;
|
||||||
|
this.AppCopyrightLabel.Text = "Copyright © %year%, %company%";
|
||||||
|
//
|
||||||
|
// AppVersionLabel
|
||||||
|
//
|
||||||
|
this.AppVersionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.AppVersionLabel.AutoSize = true;
|
||||||
|
this.AppVersionLabel.Location = new System.Drawing.Point(5, 105);
|
||||||
|
this.AppVersionLabel.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.AppVersionLabel.Name = "AppVersionLabel";
|
||||||
|
this.AppVersionLabel.Size = new System.Drawing.Size(668, 25);
|
||||||
|
this.AppVersionLabel.TabIndex = 20;
|
||||||
|
this.AppVersionLabel.Text = "Version %version%";
|
||||||
|
//
|
||||||
|
// AppDescriptionLabel
|
||||||
|
//
|
||||||
|
this.AppDescriptionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.AppDescriptionLabel.AutoSize = true;
|
||||||
|
this.AppDescriptionLabel.Location = new System.Drawing.Point(5, 40);
|
||||||
|
this.AppDescriptionLabel.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.AppDescriptionLabel.Name = "AppDescriptionLabel";
|
||||||
|
this.AppDescriptionLabel.Size = new System.Drawing.Size(142, 25);
|
||||||
|
this.AppDescriptionLabel.TabIndex = 19;
|
||||||
|
this.AppDescriptionLabel.Text = "%description%";
|
||||||
|
//
|
||||||
|
// GroupBox1
|
||||||
|
//
|
||||||
|
this.GroupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.GroupBox1.Location = new System.Drawing.Point(5, 91);
|
||||||
|
this.GroupBox1.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.GroupBox1.Name = "GroupBox1";
|
||||||
|
this.GroupBox1.Padding = new System.Windows.Forms.Padding(5);
|
||||||
|
this.GroupBox1.Size = new System.Drawing.Size(668, 4);
|
||||||
|
this.GroupBox1.TabIndex = 18;
|
||||||
|
this.GroupBox1.TabStop = false;
|
||||||
|
this.GroupBox1.Text = "GroupBox1";
|
||||||
|
//
|
||||||
|
// AppTitleLabel
|
||||||
|
//
|
||||||
|
this.AppTitleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.AppTitleLabel.AutoSize = true;
|
||||||
|
this.AppTitleLabel.Location = new System.Drawing.Point(5, 5);
|
||||||
|
this.AppTitleLabel.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.AppTitleLabel.Name = "AppTitleLabel";
|
||||||
|
this.AppTitleLabel.Size = new System.Drawing.Size(142, 25);
|
||||||
|
this.AppTitleLabel.TabIndex = 17;
|
||||||
|
this.AppTitleLabel.Text = "%title%";
|
||||||
|
//
|
||||||
|
// buttonOk
|
||||||
|
//
|
||||||
|
this.buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.buttonOk.AutoSize = true;
|
||||||
|
this.buttonOk.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
|
this.buttonOk.Location = new System.Drawing.Point(291, 5);
|
||||||
|
this.buttonOk.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.buttonOk.MinimumSize = new System.Drawing.Size(133, 40);
|
||||||
|
this.buttonOk.Name = "buttonOk";
|
||||||
|
this.buttonOk.Size = new System.Drawing.Size(133, 40);
|
||||||
|
this.buttonOk.TabIndex = 16;
|
||||||
|
this.buttonOk.Text = "OK";
|
||||||
|
//
|
||||||
|
// MoreRichTextBox
|
||||||
|
//
|
||||||
|
this.MoreRichTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.MoreRichTextBox.BackColor = System.Drawing.SystemColors.ControlLight;
|
||||||
|
this.MoreRichTextBox.Location = new System.Drawing.Point(5, 210);
|
||||||
|
this.MoreRichTextBox.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.MoreRichTextBox.Name = "MoreRichTextBox";
|
||||||
|
this.MoreRichTextBox.ReadOnly = true;
|
||||||
|
this.MoreRichTextBox.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical;
|
||||||
|
this.MoreRichTextBox.Size = new System.Drawing.Size(668, 210);
|
||||||
|
this.MoreRichTextBox.TabIndex = 26;
|
||||||
|
this.MoreRichTextBox.Text = "%product% is %copyright%, %trademark%";
|
||||||
|
this.MoreRichTextBox.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.MoreRichTextBox_LinkClicked);
|
||||||
|
//
|
||||||
|
// TabPanelDetails
|
||||||
|
//
|
||||||
|
this.TabPanelDetails.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.TabPanelDetails.Controls.Add(this.TabPageApplication);
|
||||||
|
this.TabPanelDetails.Controls.Add(this.TabPageAssemblies);
|
||||||
|
this.TabPanelDetails.Controls.Add(this.TabPageAssemblyDetails);
|
||||||
|
this.TabPanelDetails.Location = new System.Drawing.Point(5, 430);
|
||||||
|
this.TabPanelDetails.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.TabPanelDetails.Name = "TabPanelDetails";
|
||||||
|
this.TabPanelDetails.SelectedIndex = 0;
|
||||||
|
this.TabPanelDetails.Size = new System.Drawing.Size(668, 219);
|
||||||
|
this.TabPanelDetails.TabIndex = 27;
|
||||||
|
this.TabPanelDetails.Visible = false;
|
||||||
|
this.TabPanelDetails.SelectedIndexChanged += new System.EventHandler(this.TabPanelDetails_SelectedIndexChanged);
|
||||||
|
//
|
||||||
|
// TabPageApplication
|
||||||
|
//
|
||||||
|
this.TabPageApplication.Controls.Add(this.AppInfoListView);
|
||||||
|
this.TabPageApplication.Location = new System.Drawing.Point(4, 33);
|
||||||
|
this.TabPageApplication.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.TabPageApplication.Name = "TabPageApplication";
|
||||||
|
this.TabPageApplication.Size = new System.Drawing.Size(660, 182);
|
||||||
|
this.TabPageApplication.TabIndex = 0;
|
||||||
|
this.TabPageApplication.Text = "Application";
|
||||||
|
//
|
||||||
|
// AppInfoListView
|
||||||
|
//
|
||||||
|
this.AppInfoListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
|
this.colKey,
|
||||||
|
this.colValue});
|
||||||
|
this.AppInfoListView.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.AppInfoListView.FullRowSelect = true;
|
||||||
|
this.AppInfoListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||||
|
this.AppInfoListView.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.AppInfoListView.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.AppInfoListView.Name = "AppInfoListView";
|
||||||
|
this.AppInfoListView.Size = new System.Drawing.Size(660, 182);
|
||||||
|
this.AppInfoListView.TabIndex = 16;
|
||||||
|
this.AppInfoListView.UseCompatibleStateImageBehavior = false;
|
||||||
|
this.AppInfoListView.View = System.Windows.Forms.View.Details;
|
||||||
|
//
|
||||||
|
// colKey
|
||||||
|
//
|
||||||
|
this.colKey.Text = "Application Key";
|
||||||
|
this.colKey.Width = 120;
|
||||||
|
//
|
||||||
|
// colValue
|
||||||
|
//
|
||||||
|
this.colValue.Text = "Value";
|
||||||
|
this.colValue.Width = 700;
|
||||||
|
//
|
||||||
|
// TabPageAssemblies
|
||||||
|
//
|
||||||
|
this.TabPageAssemblies.Controls.Add(this.AssemblyInfoListView);
|
||||||
|
this.TabPageAssemblies.Location = new System.Drawing.Point(4, 33);
|
||||||
|
this.TabPageAssemblies.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.TabPageAssemblies.Name = "TabPageAssemblies";
|
||||||
|
this.TabPageAssemblies.Size = new System.Drawing.Size(660, 182);
|
||||||
|
this.TabPageAssemblies.TabIndex = 1;
|
||||||
|
this.TabPageAssemblies.Text = "Assemblies";
|
||||||
|
//
|
||||||
|
// AssemblyInfoListView
|
||||||
|
//
|
||||||
|
this.AssemblyInfoListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
|
this.colAssemblyName,
|
||||||
|
this.colAssemblyVersion,
|
||||||
|
this.colAssemblyBuilt,
|
||||||
|
this.colAssemblyCodeBase});
|
||||||
|
this.AssemblyInfoListView.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.AssemblyInfoListView.FullRowSelect = true;
|
||||||
|
this.AssemblyInfoListView.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.AssemblyInfoListView.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.AssemblyInfoListView.MultiSelect = false;
|
||||||
|
this.AssemblyInfoListView.Name = "AssemblyInfoListView";
|
||||||
|
this.AssemblyInfoListView.Size = new System.Drawing.Size(660, 182);
|
||||||
|
this.AssemblyInfoListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
|
||||||
|
this.AssemblyInfoListView.TabIndex = 13;
|
||||||
|
this.AssemblyInfoListView.UseCompatibleStateImageBehavior = false;
|
||||||
|
this.AssemblyInfoListView.View = System.Windows.Forms.View.Details;
|
||||||
|
this.AssemblyInfoListView.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.AssemblyInfoListView_ColumnClick);
|
||||||
|
this.AssemblyInfoListView.DoubleClick += new System.EventHandler(this.AssemblyInfoListView_DoubleClick);
|
||||||
|
//
|
||||||
|
// colAssemblyName
|
||||||
|
//
|
||||||
|
this.colAssemblyName.Text = "Assembly";
|
||||||
|
this.colAssemblyName.Width = 123;
|
||||||
|
//
|
||||||
|
// colAssemblyVersion
|
||||||
|
//
|
||||||
|
this.colAssemblyVersion.Text = "Version";
|
||||||
|
this.colAssemblyVersion.Width = 100;
|
||||||
|
//
|
||||||
|
// colAssemblyBuilt
|
||||||
|
//
|
||||||
|
this.colAssemblyBuilt.Text = "Built";
|
||||||
|
this.colAssemblyBuilt.Width = 130;
|
||||||
|
//
|
||||||
|
// colAssemblyCodeBase
|
||||||
|
//
|
||||||
|
this.colAssemblyCodeBase.Text = "CodeBase";
|
||||||
|
this.colAssemblyCodeBase.Width = 750;
|
||||||
|
//
|
||||||
|
// TabPageAssemblyDetails
|
||||||
|
//
|
||||||
|
this.TabPageAssemblyDetails.Controls.Add(this.AssemblyDetailsListView);
|
||||||
|
this.TabPageAssemblyDetails.Controls.Add(this.AssemblyNamesComboBox);
|
||||||
|
this.TabPageAssemblyDetails.Location = new System.Drawing.Point(4, 33);
|
||||||
|
this.TabPageAssemblyDetails.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.TabPageAssemblyDetails.Name = "TabPageAssemblyDetails";
|
||||||
|
this.TabPageAssemblyDetails.Size = new System.Drawing.Size(660, 182);
|
||||||
|
this.TabPageAssemblyDetails.TabIndex = 2;
|
||||||
|
this.TabPageAssemblyDetails.Text = "Assembly Details";
|
||||||
|
//
|
||||||
|
// AssemblyDetailsListView
|
||||||
|
//
|
||||||
|
this.AssemblyDetailsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||||
|
this.ColumnHeader1,
|
||||||
|
this.ColumnHeader2});
|
||||||
|
this.AssemblyDetailsListView.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.AssemblyDetailsListView.FullRowSelect = true;
|
||||||
|
this.AssemblyDetailsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
|
||||||
|
this.AssemblyDetailsListView.Location = new System.Drawing.Point(0, 32);
|
||||||
|
this.AssemblyDetailsListView.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.AssemblyDetailsListView.Name = "AssemblyDetailsListView";
|
||||||
|
this.AssemblyDetailsListView.Size = new System.Drawing.Size(660, 150);
|
||||||
|
this.AssemblyDetailsListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
|
||||||
|
this.AssemblyDetailsListView.TabIndex = 19;
|
||||||
|
this.AssemblyDetailsListView.UseCompatibleStateImageBehavior = false;
|
||||||
|
this.AssemblyDetailsListView.View = System.Windows.Forms.View.Details;
|
||||||
|
//
|
||||||
|
// ColumnHeader1
|
||||||
|
//
|
||||||
|
this.ColumnHeader1.Text = "Assembly Key";
|
||||||
|
this.ColumnHeader1.Width = 120;
|
||||||
|
//
|
||||||
|
// ColumnHeader2
|
||||||
|
//
|
||||||
|
this.ColumnHeader2.Text = "Value";
|
||||||
|
this.ColumnHeader2.Width = 700;
|
||||||
|
//
|
||||||
|
// AssemblyNamesComboBox
|
||||||
|
//
|
||||||
|
this.AssemblyNamesComboBox.Dock = System.Windows.Forms.DockStyle.Top;
|
||||||
|
this.AssemblyNamesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.AssemblyNamesComboBox.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.AssemblyNamesComboBox.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.AssemblyNamesComboBox.Name = "AssemblyNamesComboBox";
|
||||||
|
this.AssemblyNamesComboBox.Size = new System.Drawing.Size(660, 32);
|
||||||
|
this.AssemblyNamesComboBox.Sorted = true;
|
||||||
|
this.AssemblyNamesComboBox.TabIndex = 18;
|
||||||
|
this.AssemblyNamesComboBox.SelectedIndexChanged += new System.EventHandler(this.AssemblyNamesComboBox_SelectedIndexChanged);
|
||||||
|
//
|
||||||
|
// tableLayoutPanel1
|
||||||
|
//
|
||||||
|
this.tableLayoutPanel1.AutoSize = true;
|
||||||
|
this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.tableLayoutPanel1.ColumnCount = 1;
|
||||||
|
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel4, 0, 8);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 0);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.AppCopyrightLabel, 0, 4);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.AppDateLabel, 0, 3);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.GroupBox1, 0, 1);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.TabPanelDetails, 0, 7);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.MoreRichTextBox, 0, 6);
|
||||||
|
this.tableLayoutPanel1.Controls.Add(this.AppVersionLabel, 0, 2);
|
||||||
|
this.tableLayoutPanel1.Location = new System.Drawing.Point(16, 12);
|
||||||
|
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||||
|
this.tableLayoutPanel1.RowCount = 9;
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel1.Size = new System.Drawing.Size(678, 712);
|
||||||
|
this.tableLayoutPanel1.TabIndex = 28;
|
||||||
|
//
|
||||||
|
// tableLayoutPanel4
|
||||||
|
//
|
||||||
|
this.tableLayoutPanel4.AutoSize = true;
|
||||||
|
this.tableLayoutPanel4.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.tableLayoutPanel4.ColumnCount = 3;
|
||||||
|
this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||||
|
this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||||
|
this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||||
|
this.tableLayoutPanel4.Controls.Add(this.buttonSystemInfo, 0, 0);
|
||||||
|
this.tableLayoutPanel4.Controls.Add(this.buttonDetails, 1, 0);
|
||||||
|
this.tableLayoutPanel4.Controls.Add(this.buttonOk, 2, 0);
|
||||||
|
this.tableLayoutPanel4.Location = new System.Drawing.Point(4, 658);
|
||||||
|
this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tableLayoutPanel4.Name = "tableLayoutPanel4";
|
||||||
|
this.tableLayoutPanel4.RowCount = 1;
|
||||||
|
this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel4.Size = new System.Drawing.Size(429, 50);
|
||||||
|
this.tableLayoutPanel4.TabIndex = 29;
|
||||||
|
//
|
||||||
|
// tableLayoutPanel2
|
||||||
|
//
|
||||||
|
this.tableLayoutPanel2.AutoSize = true;
|
||||||
|
this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.tableLayoutPanel2.ColumnCount = 2;
|
||||||
|
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 548F));
|
||||||
|
this.tableLayoutPanel2.Controls.Add(this.ImagePictureBox, 0, 0);
|
||||||
|
this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 1, 0);
|
||||||
|
this.tableLayoutPanel2.Location = new System.Drawing.Point(4, 4);
|
||||||
|
this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
|
||||||
|
this.tableLayoutPanel2.RowCount = 1;
|
||||||
|
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel2.Size = new System.Drawing.Size(626, 78);
|
||||||
|
this.tableLayoutPanel2.TabIndex = 29;
|
||||||
|
//
|
||||||
|
// tableLayoutPanel3
|
||||||
|
//
|
||||||
|
this.tableLayoutPanel3.AutoSize = true;
|
||||||
|
this.tableLayoutPanel3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.tableLayoutPanel3.ColumnCount = 1;
|
||||||
|
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||||
|
this.tableLayoutPanel3.Controls.Add(this.AppTitleLabel, 0, 0);
|
||||||
|
this.tableLayoutPanel3.Controls.Add(this.AppDescriptionLabel, 0, 1);
|
||||||
|
this.tableLayoutPanel3.Location = new System.Drawing.Point(82, 4);
|
||||||
|
this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(4);
|
||||||
|
this.tableLayoutPanel3.Name = "tableLayoutPanel3";
|
||||||
|
this.tableLayoutPanel3.RowCount = 2;
|
||||||
|
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel3.Size = new System.Drawing.Size(152, 70);
|
||||||
|
this.tableLayoutPanel3.TabIndex = 25;
|
||||||
|
//
|
||||||
|
// AboutBox
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(168F, 168F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
|
this.AutoSize = true;
|
||||||
|
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.CancelButton = this.buttonOk;
|
||||||
|
this.ClientSize = new System.Drawing.Size(704, 861);
|
||||||
|
this.Controls.Add(this.tableLayoutPanel1);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.Margin = new System.Windows.Forms.Padding(5);
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.MinimizeBox = false;
|
||||||
|
this.Name = "AboutBox";
|
||||||
|
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
|
this.Text = "About %title%";
|
||||||
|
this.Load += new System.EventHandler(this.AboutBox_Load);
|
||||||
|
this.Paint += new System.Windows.Forms.PaintEventHandler(this.AboutBox_Paint);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.ImagePictureBox)).EndInit();
|
||||||
|
this.TabPanelDetails.ResumeLayout(false);
|
||||||
|
this.TabPageApplication.ResumeLayout(false);
|
||||||
|
this.TabPageAssemblies.ResumeLayout(false);
|
||||||
|
this.TabPageAssemblyDetails.ResumeLayout(false);
|
||||||
|
this.tableLayoutPanel1.ResumeLayout(false);
|
||||||
|
this.tableLayoutPanel1.PerformLayout();
|
||||||
|
this.tableLayoutPanel4.ResumeLayout(false);
|
||||||
|
this.tableLayoutPanel4.PerformLayout();
|
||||||
|
this.tableLayoutPanel2.ResumeLayout(false);
|
||||||
|
this.tableLayoutPanel2.PerformLayout();
|
||||||
|
this.tableLayoutPanel3.ResumeLayout(false);
|
||||||
|
this.tableLayoutPanel3.PerformLayout();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Button buttonDetails;
|
||||||
|
private System.Windows.Forms.PictureBox ImagePictureBox;
|
||||||
|
private System.Windows.Forms.Label AppDateLabel;
|
||||||
|
private System.Windows.Forms.Button buttonSystemInfo;
|
||||||
|
private System.Windows.Forms.Label AppCopyrightLabel;
|
||||||
|
private System.Windows.Forms.Label AppVersionLabel;
|
||||||
|
private System.Windows.Forms.Label AppDescriptionLabel;
|
||||||
|
private System.Windows.Forms.GroupBox GroupBox1;
|
||||||
|
private System.Windows.Forms.Label AppTitleLabel;
|
||||||
|
private System.Windows.Forms.Button buttonOk;
|
||||||
|
internal System.Windows.Forms.RichTextBox MoreRichTextBox;
|
||||||
|
internal System.Windows.Forms.TabControl TabPanelDetails;
|
||||||
|
internal System.Windows.Forms.TabPage TabPageApplication;
|
||||||
|
internal System.Windows.Forms.ListView AppInfoListView;
|
||||||
|
internal System.Windows.Forms.ColumnHeader colKey;
|
||||||
|
internal System.Windows.Forms.ColumnHeader colValue;
|
||||||
|
internal System.Windows.Forms.TabPage TabPageAssemblies;
|
||||||
|
internal System.Windows.Forms.ListView AssemblyInfoListView;
|
||||||
|
internal System.Windows.Forms.ColumnHeader colAssemblyName;
|
||||||
|
internal System.Windows.Forms.ColumnHeader colAssemblyVersion;
|
||||||
|
internal System.Windows.Forms.ColumnHeader colAssemblyBuilt;
|
||||||
|
internal System.Windows.Forms.ColumnHeader colAssemblyCodeBase;
|
||||||
|
internal System.Windows.Forms.TabPage TabPageAssemblyDetails;
|
||||||
|
internal System.Windows.Forms.ListView AssemblyDetailsListView;
|
||||||
|
internal System.Windows.Forms.ColumnHeader ColumnHeader1;
|
||||||
|
internal System.Windows.Forms.ColumnHeader ColumnHeader2;
|
||||||
|
internal System.Windows.Forms.ComboBox AssemblyNamesComboBox;
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4;
|
||||||
|
}
|
||||||
|
}
|
846
Controls/AboutBox.cs
Normal file
|
@ -0,0 +1,846 @@
|
||||||
|
using Microsoft.Win32;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Specialized;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Controls
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Generic, self-contained About Box dialog
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Jeff Atwood
|
||||||
|
/// http://www.codinghorror.com
|
||||||
|
/// converted to C# by Scott Ferguson
|
||||||
|
/// http://www.forestmoon.com
|
||||||
|
/// </remarks>
|
||||||
|
public partial class AboutBox : Form
|
||||||
|
{
|
||||||
|
public AboutBox()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
buttonOk.Text = Program.Translate("buttonOk");
|
||||||
|
buttonDetails.Text = Program.Translate("buttonDetails");
|
||||||
|
buttonSystemInfo.Text = Program.Translate("buttonSystemInfo");
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool _IsPainted = false;
|
||||||
|
private string _EntryAssemblyName;
|
||||||
|
private string _CallingAssemblyName;
|
||||||
|
private string _ExecutingAssemblyName;
|
||||||
|
private Assembly _EntryAssembly;
|
||||||
|
private NameValueCollection _EntryAssemblyAttribCollection;
|
||||||
|
private int _MinWindowHeight;
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// returns the entry assembly for the current application domain
|
||||||
|
// </summary>
|
||||||
|
// <remarks>
|
||||||
|
// This is usually read-only, but in some weird cases (Smart Client apps)
|
||||||
|
// you won't have an entry assembly, so you may want to set this manually.
|
||||||
|
// </remarks>
|
||||||
|
public Assembly AppEntryAssembly
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _EntryAssembly;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_EntryAssembly = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// single line of text to show in the application title section of the about box dialog
|
||||||
|
// </summary>
|
||||||
|
// <remarks>
|
||||||
|
// defaults to "%title%"
|
||||||
|
// %title% = Assembly: AssemblyTitle
|
||||||
|
// </remarks>
|
||||||
|
public string AppTitle
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return AppTitleLabel.Text;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
AppTitleLabel.Text = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// single line of text to show in the description section of the about box dialog
|
||||||
|
// </summary>
|
||||||
|
// <remarks>
|
||||||
|
// defaults to "%description%"
|
||||||
|
// %description% = Assembly: AssemblyDescription
|
||||||
|
// </remarks>
|
||||||
|
public string AppDescription
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return AppDescriptionLabel.Text;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == "")
|
||||||
|
{
|
||||||
|
AppDescriptionLabel.Visible = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AppDescriptionLabel.Visible = true;
|
||||||
|
AppDescriptionLabel.Text = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// single line of text to show in the version section of the about dialog
|
||||||
|
// </summary>
|
||||||
|
// <remarks>
|
||||||
|
// defaults to "Version %version%"
|
||||||
|
// %version% = Assembly: AssemblyVersion
|
||||||
|
// </remarks>
|
||||||
|
public string AppVersion
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return AppVersionLabel.Text;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == "")
|
||||||
|
{
|
||||||
|
AppVersionLabel.Visible = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AppVersionLabel.Visible = true;
|
||||||
|
AppVersionLabel.Text = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// single line of text to show in the copyright section of the about dialog
|
||||||
|
// </summary>
|
||||||
|
// <remarks>
|
||||||
|
// defaults to "Copyright © %year%, %company%"
|
||||||
|
// %company% = Assembly: AssemblyCompany
|
||||||
|
// %year% = current 4-digit year
|
||||||
|
// </remarks>
|
||||||
|
public string AppCopyright
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return AppCopyrightLabel.Text;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == "")
|
||||||
|
{
|
||||||
|
AppCopyrightLabel.Visible = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AppCopyrightLabel.Visible = true;
|
||||||
|
AppCopyrightLabel.Text = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// intended for the default 32x32 application icon to appear in the upper left of the about dialog
|
||||||
|
// </summary>
|
||||||
|
// <remarks>
|
||||||
|
// if you open this form using .ShowDialog(Owner), the icon can be derived from the owning form
|
||||||
|
// </remarks>
|
||||||
|
public Image AppImage
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return ImagePictureBox.Image;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
ImagePictureBox.Image = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// multiple lines of miscellaneous text to show in rich text box
|
||||||
|
// </summary>
|
||||||
|
// <remarks>
|
||||||
|
// defaults to "%product% is %copyright%, %trademark%"
|
||||||
|
// %product% = Assembly: AssemblyProduct
|
||||||
|
// %copyright% = Assembly: AssemblyCopyright
|
||||||
|
// %trademark% = Assembly: AssemblyTrademark
|
||||||
|
// </remarks>
|
||||||
|
public string AppMoreInfo
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return MoreRichTextBox.Text;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == null || value == "")
|
||||||
|
{
|
||||||
|
MoreRichTextBox.Visible = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MoreRichTextBox.Visible = true;
|
||||||
|
MoreRichTextBox.Text = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// determines if the "Details" (advanced assembly details) button is shown
|
||||||
|
// </summary>
|
||||||
|
public bool AppDetailsButton
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return buttonDetails.Visible;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
buttonDetails.Visible = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// exception-safe retrieval of LastWriteTime for this assembly.
|
||||||
|
// </summary>
|
||||||
|
// <returns>File.GetLastWriteTime, or DateTime.MaxValue if exception was encountered.</returns>
|
||||||
|
private DateTime AssemblyLastWriteTime(Assembly a)
|
||||||
|
{
|
||||||
|
if (a.Location == null || a.Location == "")
|
||||||
|
return DateTime.MaxValue;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return File.GetLastWriteTime(a.Location);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
return DateTime.MaxValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// returns DateTime this Assembly was last built. Will attempt to calculate from build number, if possible.
|
||||||
|
// If not, the actual LastWriteTime on the assembly file will be returned.
|
||||||
|
// </summary>
|
||||||
|
// <param name="a">Assembly to get build date for</param>
|
||||||
|
// <param name="ForceFileDate">Don't attempt to use the build number to calculate the date</param>
|
||||||
|
// <returns>DateTime this assembly was last built</returns>
|
||||||
|
private DateTime AssemblyBuildDate(Assembly a, bool ForceFileDate)
|
||||||
|
{
|
||||||
|
Version AssemblyVersion = a.GetName().Version;
|
||||||
|
DateTime dt;
|
||||||
|
|
||||||
|
if (ForceFileDate)
|
||||||
|
{
|
||||||
|
dt = AssemblyLastWriteTime(a);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dt = DateTime.Parse("01/01/2000").AddDays(AssemblyVersion.Build).AddSeconds(AssemblyVersion.Revision * 2);
|
||||||
|
if (TimeZone.IsDaylightSavingTime(dt, TimeZone.CurrentTimeZone.GetDaylightChanges(dt.Year)))
|
||||||
|
{
|
||||||
|
dt = dt.AddHours(1);
|
||||||
|
}
|
||||||
|
if (dt > DateTime.Now || AssemblyVersion.Build < 730 || AssemblyVersion.Revision == 0)
|
||||||
|
{
|
||||||
|
dt = AssemblyLastWriteTime(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// returns string name / string value pair of all attribs
|
||||||
|
// for specified assembly
|
||||||
|
// </summary>
|
||||||
|
// <remarks>
|
||||||
|
// note that Assembly* values are pulled from AssemblyInfo file in project folder
|
||||||
|
//
|
||||||
|
// Trademark = AssemblyTrademark string
|
||||||
|
// Debuggable = true
|
||||||
|
// GUID = 7FDF68D5-8C6F-44C9-B391-117B5AFB5467
|
||||||
|
// CLSCompliant = true
|
||||||
|
// Product = AssemblyProduct string
|
||||||
|
// Copyright = AssemblyCopyright string
|
||||||
|
// Company = AssemblyCompany string
|
||||||
|
// Description = AssemblyDescription string
|
||||||
|
// Title = AssemblyTitle string
|
||||||
|
// </remarks>
|
||||||
|
private NameValueCollection AssemblyAttribs(Assembly a)
|
||||||
|
{
|
||||||
|
string TypeName;
|
||||||
|
string Name;
|
||||||
|
string Value;
|
||||||
|
NameValueCollection nvc = new NameValueCollection();
|
||||||
|
Regex r = new Regex(@"(\.Assembly|\.)(?<Name>[^.]*)Attribute$", RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
|
foreach (object attrib in a.GetCustomAttributes(false))
|
||||||
|
{
|
||||||
|
TypeName = attrib.GetType().ToString();
|
||||||
|
Name = r.Match(TypeName).Groups["Name"].ToString();
|
||||||
|
Value = "";
|
||||||
|
switch (TypeName)
|
||||||
|
{
|
||||||
|
case "System.CLSCompliantAttribute":
|
||||||
|
Value = ((CLSCompliantAttribute)attrib).IsCompliant.ToString(); break;
|
||||||
|
case "System.Diagnostics.DebuggableAttribute":
|
||||||
|
Value = ((System.Diagnostics.DebuggableAttribute)attrib).IsJITTrackingEnabled.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyCompanyAttribute":
|
||||||
|
Value = ((AssemblyCompanyAttribute)attrib).Company.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyConfigurationAttribute":
|
||||||
|
Value = ((AssemblyConfigurationAttribute)attrib).Configuration.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyCopyrightAttribute":
|
||||||
|
Value = ((AssemblyCopyrightAttribute)attrib).Copyright.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyDefaultAliasAttribute":
|
||||||
|
Value = ((AssemblyDefaultAliasAttribute)attrib).DefaultAlias.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyDelaySignAttribute":
|
||||||
|
Value = ((AssemblyDelaySignAttribute)attrib).DelaySign.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyDescriptionAttribute":
|
||||||
|
Value = ((AssemblyDescriptionAttribute)attrib).Description.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyInformationalVersionAttribute":
|
||||||
|
Value = ((AssemblyInformationalVersionAttribute)attrib).InformationalVersion.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyKeyFileAttribute":
|
||||||
|
Value = ((AssemblyKeyFileAttribute)attrib).KeyFile.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyProductAttribute":
|
||||||
|
Value = ((AssemblyProductAttribute)attrib).Product.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyTrademarkAttribute":
|
||||||
|
Value = ((AssemblyTrademarkAttribute)attrib).Trademark.ToString(); break;
|
||||||
|
case "System.Reflection.AssemblyTitleAttribute":
|
||||||
|
Value = ((AssemblyTitleAttribute)attrib).Title.ToString(); break;
|
||||||
|
case "System.Resources.NeutralResourcesLanguageAttribute":
|
||||||
|
Value = ((System.Resources.NeutralResourcesLanguageAttribute)attrib).CultureName.ToString(); break;
|
||||||
|
case "System.Resources.SatelliteContractVersionAttribute":
|
||||||
|
Value = ((System.Resources.SatelliteContractVersionAttribute)attrib).Version.ToString(); break;
|
||||||
|
case "System.Runtime.InteropServices.ComCompatibleVersionAttribute":
|
||||||
|
{
|
||||||
|
System.Runtime.InteropServices.ComCompatibleVersionAttribute x;
|
||||||
|
x = ((System.Runtime.InteropServices.ComCompatibleVersionAttribute)attrib);
|
||||||
|
Value = x.MajorVersion + "." + x.MinorVersion + "." + x.RevisionNumber + "." + x.BuildNumber; break;
|
||||||
|
}
|
||||||
|
case "System.Runtime.InteropServices.ComVisibleAttribute":
|
||||||
|
Value = ((System.Runtime.InteropServices.ComVisibleAttribute)attrib).Value.ToString(); break;
|
||||||
|
case "System.Runtime.InteropServices.GuidAttribute":
|
||||||
|
Value = ((System.Runtime.InteropServices.GuidAttribute)attrib).Value.ToString(); break;
|
||||||
|
case "System.Runtime.InteropServices.TypeLibVersionAttribute":
|
||||||
|
{
|
||||||
|
System.Runtime.InteropServices.TypeLibVersionAttribute x;
|
||||||
|
x = ((System.Runtime.InteropServices.TypeLibVersionAttribute)attrib);
|
||||||
|
Value = x.MajorVersion + "." + x.MinorVersion; break;
|
||||||
|
}
|
||||||
|
case "System.Security.AllowPartiallyTrustedCallersAttribute":
|
||||||
|
Value = "(Present)"; break;
|
||||||
|
default:
|
||||||
|
// debug.writeline("** unknown assembly attribute '" + TypeName + "'")
|
||||||
|
Value = TypeName; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nvc[Name] == null)
|
||||||
|
{
|
||||||
|
nvc.Add(Name, Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// add some extra values that are not in the AssemblyInfo, but nice to have
|
||||||
|
// codebase
|
||||||
|
try
|
||||||
|
{
|
||||||
|
nvc.Add("CodeBase", a.CodeBase.Replace("file:///", ""));
|
||||||
|
}
|
||||||
|
catch (NotSupportedException)
|
||||||
|
{
|
||||||
|
nvc.Add("CodeBase", "(not supported)");
|
||||||
|
}
|
||||||
|
// build date
|
||||||
|
DateTime dt = AssemblyBuildDate(a, false);
|
||||||
|
if (dt == DateTime.MaxValue)
|
||||||
|
{
|
||||||
|
nvc.Add("BuildDate", "(unknown)");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nvc.Add("BuildDate", dt.ToString("yyyy-MM-dd hh:mm tt"));
|
||||||
|
}
|
||||||
|
// location
|
||||||
|
try
|
||||||
|
{
|
||||||
|
nvc.Add("Location", a.Location);
|
||||||
|
}
|
||||||
|
catch (NotSupportedException)
|
||||||
|
{
|
||||||
|
nvc.Add("Location", "(not supported)");
|
||||||
|
}
|
||||||
|
// version
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (a.GetName().Version.Major == 0 && a.GetName().Version.Minor == 0)
|
||||||
|
{
|
||||||
|
nvc.Add("Version", "(unknown)");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nvc.Add("Version", a.GetName().Version.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
nvc.Add("Version", "(unknown)");
|
||||||
|
}
|
||||||
|
|
||||||
|
nvc.Add("FullName", a.FullName);
|
||||||
|
|
||||||
|
return nvc;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// reads an HKLM Windows Registry key value
|
||||||
|
// </summary>
|
||||||
|
private string RegistryHklmValue(string KeyName, string SubKeyRef)
|
||||||
|
{
|
||||||
|
RegistryKey rk;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
rk = Registry.LocalMachine.OpenSubKey(KeyName);
|
||||||
|
return (string)rk.GetValue(SubKeyRef, "");
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// launch the MSInfo "system information" application (works on XP, 2003, and Vista)
|
||||||
|
// </summary>
|
||||||
|
private void ShowSysInfo()
|
||||||
|
{
|
||||||
|
string strSysInfoPath = "";
|
||||||
|
|
||||||
|
strSysInfoPath = RegistryHklmValue(@"SOFTWARE\Microsoft\Shared Tools Location", "MSINFO");
|
||||||
|
if (strSysInfoPath == "")
|
||||||
|
{
|
||||||
|
strSysInfoPath = RegistryHklmValue(@"SOFTWARE\Microsoft\Shared Tools\MSINFO", "PATH");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strSysInfoPath == "")
|
||||||
|
{
|
||||||
|
MessageBox.Show("System Information is unavailable at this time." +
|
||||||
|
Environment.NewLine +
|
||||||
|
Environment.NewLine +
|
||||||
|
"(couldn't find path for Microsoft System Information Tool in the registry.)",
|
||||||
|
Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.Diagnostics.Process.Start(strSysInfoPath);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
MessageBox.Show("System Information is unavailable at this time." +
|
||||||
|
Environment.NewLine +
|
||||||
|
Environment.NewLine +
|
||||||
|
"(couldn't launch '" + strSysInfoPath + "')",
|
||||||
|
Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// populate a listview with the specified key and value strings
|
||||||
|
// </summary>
|
||||||
|
private void Populate(ListView lvw, string Key, string Value)
|
||||||
|
{
|
||||||
|
if (Value == "")
|
||||||
|
return;
|
||||||
|
ListViewItem lvi = new ListViewItem();
|
||||||
|
lvi.Text = Key;
|
||||||
|
lvi.SubItems.Add(Value);
|
||||||
|
lvw.Items.Add(lvi);
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// populates the Application Information listview
|
||||||
|
// </summary>
|
||||||
|
private void PopulateAppInfo()
|
||||||
|
{
|
||||||
|
AppDomain d = System.AppDomain.CurrentDomain;
|
||||||
|
Populate(AppInfoListView, "Application Name", d.SetupInformation.ApplicationName);
|
||||||
|
Populate(AppInfoListView, "Application Base", d.SetupInformation.ApplicationBase);
|
||||||
|
Populate(AppInfoListView, "Cache Path", d.SetupInformation.CachePath);
|
||||||
|
Populate(AppInfoListView, "Configuration File", d.SetupInformation.ConfigurationFile);
|
||||||
|
Populate(AppInfoListView, "Dynamic Base", d.SetupInformation.DynamicBase);
|
||||||
|
Populate(AppInfoListView, "Friendly Name", d.FriendlyName);
|
||||||
|
Populate(AppInfoListView, "License File", d.SetupInformation.LicenseFile);
|
||||||
|
Populate(AppInfoListView, "private Bin Path", d.SetupInformation.PrivateBinPath);
|
||||||
|
Populate(AppInfoListView, "Shadow Copy Directories", d.SetupInformation.ShadowCopyDirectories);
|
||||||
|
Populate(AppInfoListView, " ", " ");
|
||||||
|
Populate(AppInfoListView, "Entry Assembly", _EntryAssemblyName);
|
||||||
|
Populate(AppInfoListView, "Executing Assembly", _ExecutingAssemblyName);
|
||||||
|
Populate(AppInfoListView, "Calling Assembly", _CallingAssemblyName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// populate Assembly Information listview with ALL assemblies
|
||||||
|
// </summary>
|
||||||
|
private void PopulateAssemblies()
|
||||||
|
{
|
||||||
|
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
|
||||||
|
{
|
||||||
|
PopulateAssemblySummary(a);
|
||||||
|
}
|
||||||
|
AssemblyNamesComboBox.SelectedIndex = AssemblyNamesComboBox.FindStringExact(_EntryAssemblyName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// populate Assembly Information listview with summary view for a specific assembly
|
||||||
|
// </summary>
|
||||||
|
private void PopulateAssemblySummary(Assembly a)
|
||||||
|
{
|
||||||
|
NameValueCollection nvc = AssemblyAttribs(a);
|
||||||
|
|
||||||
|
string strAssemblyName = a.GetName().Name;
|
||||||
|
|
||||||
|
ListViewItem lvi = new ListViewItem();
|
||||||
|
lvi.Text = strAssemblyName;
|
||||||
|
lvi.Tag = strAssemblyName;
|
||||||
|
if (strAssemblyName == _CallingAssemblyName)
|
||||||
|
{
|
||||||
|
lvi.Text += " (calling)";
|
||||||
|
}
|
||||||
|
if (strAssemblyName == _ExecutingAssemblyName)
|
||||||
|
{
|
||||||
|
lvi.Text += " (executing)";
|
||||||
|
}
|
||||||
|
if (strAssemblyName == _EntryAssemblyName)
|
||||||
|
{
|
||||||
|
lvi.Text += " (entry)";
|
||||||
|
}
|
||||||
|
lvi.SubItems.Add(nvc["version"]);
|
||||||
|
lvi.SubItems.Add(nvc["builddate"]);
|
||||||
|
lvi.SubItems.Add(nvc["codebase"]);
|
||||||
|
//lvi.SubItems.Add(AssemblyVersion(a))
|
||||||
|
//lvi.SubItems.Add(AssemblyBuildDatestring(a, true))
|
||||||
|
//lvi.SubItems.Add(AssemblyCodeBase(a))
|
||||||
|
AssemblyInfoListView.Items.Add(lvi);
|
||||||
|
AssemblyNamesComboBox.Items.Add(strAssemblyName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// retrieves a cached value from the entry assembly attribute lookup collection
|
||||||
|
// </summary>
|
||||||
|
private string EntryAssemblyAttrib(string strName)
|
||||||
|
{
|
||||||
|
if (_EntryAssemblyAttribCollection[strName] == null)
|
||||||
|
{
|
||||||
|
return "<Assembly: Assembly" + strName + "(\"\")>";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return _EntryAssemblyAttribCollection[strName].ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// Populate all the form labels with tokenized text
|
||||||
|
// </summary>
|
||||||
|
private void PopulateLabels()
|
||||||
|
{
|
||||||
|
// get entry assembly attribs
|
||||||
|
_EntryAssemblyAttribCollection = AssemblyAttribs(_EntryAssembly);
|
||||||
|
|
||||||
|
// set icon from parent, if present
|
||||||
|
if (Owner == null)
|
||||||
|
{
|
||||||
|
//ImagePictureBox.Visible = false;
|
||||||
|
//AppTitleLabel.Left = AppCopyrightLabel.Left;
|
||||||
|
//AppDescriptionLabel.Left = AppCopyrightLabel.Left;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Icon = Owner.Icon;
|
||||||
|
ImagePictureBox.Image = Icon.ToBitmap();
|
||||||
|
}
|
||||||
|
// replace all labels and window title
|
||||||
|
Text = ReplaceTokens(Text);
|
||||||
|
AppTitleLabel.Text = ReplaceTokens(AppTitleLabel.Text);
|
||||||
|
if (AppDescriptionLabel.Visible)
|
||||||
|
{
|
||||||
|
AppDescriptionLabel.Text = ReplaceTokens(AppDescriptionLabel.Text);
|
||||||
|
}
|
||||||
|
if (AppCopyrightLabel.Visible)
|
||||||
|
{
|
||||||
|
AppCopyrightLabel.Text = ReplaceTokens(AppCopyrightLabel.Text);
|
||||||
|
}
|
||||||
|
if (AppVersionLabel.Visible)
|
||||||
|
{
|
||||||
|
AppVersionLabel.Text = ReplaceTokens(AppVersionLabel.Text);
|
||||||
|
}
|
||||||
|
if (AppDateLabel.Visible)
|
||||||
|
{
|
||||||
|
AppDateLabel.Text = ReplaceTokens(AppDateLabel.Text);
|
||||||
|
}
|
||||||
|
if (MoreRichTextBox.Visible)
|
||||||
|
{
|
||||||
|
MoreRichTextBox.Text = ReplaceTokens(MoreRichTextBox.Text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// perform assemblyinfo to string replacements on labels
|
||||||
|
// </summary>
|
||||||
|
private string ReplaceTokens(string s)
|
||||||
|
{
|
||||||
|
s = s.Replace("%title%", EntryAssemblyAttrib("title"));
|
||||||
|
s = s.Replace("%copyright%", EntryAssemblyAttrib("copyright"));
|
||||||
|
s = s.Replace("%description%", EntryAssemblyAttrib("description"));
|
||||||
|
s = s.Replace("%company%", EntryAssemblyAttrib("company"));
|
||||||
|
s = s.Replace("%product%", EntryAssemblyAttrib("product"));
|
||||||
|
s = s.Replace("%trademark%", EntryAssemblyAttrib("trademark"));
|
||||||
|
s = s.Replace("%year%", DateTime.Now.Year.ToString());
|
||||||
|
s = s.Replace("%version%", EntryAssemblyAttrib("version"));
|
||||||
|
s = s.Replace("%builddate%", EntryAssemblyAttrib("builddate"));
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// populate details for a single assembly
|
||||||
|
// </summary>
|
||||||
|
private void PopulateAssemblyDetails(Assembly a, ListView lvw)
|
||||||
|
{
|
||||||
|
lvw.Items.Clear();
|
||||||
|
|
||||||
|
// this assembly property is only available in framework versions 1.1+
|
||||||
|
Populate(lvw, "Image Runtime Version", a.ImageRuntimeVersion);
|
||||||
|
Populate(lvw, "Loaded from GAC", a.GlobalAssemblyCache.ToString());
|
||||||
|
|
||||||
|
NameValueCollection nvc = AssemblyAttribs(a);
|
||||||
|
foreach (string strKey in nvc)
|
||||||
|
{
|
||||||
|
Populate(lvw, strKey, nvc[strKey]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// matches assembly by Assembly.GetName.Name; returns nothing if no match
|
||||||
|
// </summary>
|
||||||
|
private Assembly MatchAssemblyByName(string AssemblyName)
|
||||||
|
{
|
||||||
|
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
|
||||||
|
{
|
||||||
|
if (a.GetName().Name == AssemblyName)
|
||||||
|
{
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// things to do when form is loaded
|
||||||
|
// </summary>
|
||||||
|
private void AboutBox_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
// if the user didn't provide an assembly, try to guess which one is the entry assembly
|
||||||
|
if (_EntryAssembly == null)
|
||||||
|
{
|
||||||
|
_EntryAssembly = Assembly.GetEntryAssembly();
|
||||||
|
}
|
||||||
|
if (_EntryAssembly == null)
|
||||||
|
{
|
||||||
|
_EntryAssembly = Assembly.GetExecutingAssembly();
|
||||||
|
}
|
||||||
|
|
||||||
|
_ExecutingAssemblyName = Assembly.GetExecutingAssembly().GetName().Name;
|
||||||
|
_CallingAssemblyName = Assembly.GetCallingAssembly().GetName().Name;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// for web hosted apps, GetEntryAssembly = nothing
|
||||||
|
_EntryAssemblyName = Assembly.GetEntryAssembly().GetName().Name;
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
_MinWindowHeight = AppCopyrightLabel.Top + AppCopyrightLabel.Height + buttonOk.Height + 30;
|
||||||
|
|
||||||
|
TabPanelDetails.Visible = false;
|
||||||
|
if (!MoreRichTextBox.Visible)
|
||||||
|
{
|
||||||
|
Height = Height - MoreRichTextBox.Height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// things to do when form is FIRST painted
|
||||||
|
// </summary>
|
||||||
|
private void AboutBox_Paint(object sender, PaintEventArgs e)
|
||||||
|
{
|
||||||
|
if (!_IsPainted)
|
||||||
|
{
|
||||||
|
_IsPainted = true;
|
||||||
|
Application.DoEvents();
|
||||||
|
Cursor.Current = Cursors.WaitCursor;
|
||||||
|
PopulateLabels();
|
||||||
|
Cursor.Current = Cursors.Default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// expand about dialog to show additional advanced details
|
||||||
|
// </summary>
|
||||||
|
private void DetailsButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Cursor.Current = Cursors.WaitCursor;
|
||||||
|
buttonDetails.Visible = false;
|
||||||
|
SuspendLayout();
|
||||||
|
MaximizeBox = true;
|
||||||
|
FormBorderStyle = FormBorderStyle.Sizable;
|
||||||
|
TabPanelDetails.Dock = DockStyle.Fill;
|
||||||
|
tableLayoutPanel1.Dock = DockStyle.Fill;
|
||||||
|
this.AutoSize = false;
|
||||||
|
SizeGripStyle = SizeGripStyle.Show;
|
||||||
|
Size = new Size(580, Size.Height);
|
||||||
|
MoreRichTextBox.Visible = false;
|
||||||
|
TabPanelDetails.Visible = true;
|
||||||
|
buttonSystemInfo.Visible = true;
|
||||||
|
PopulateAssemblies();
|
||||||
|
PopulateAppInfo();
|
||||||
|
CenterToParent();
|
||||||
|
ResumeLayout();
|
||||||
|
Cursor.Current = Cursors.Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// for detailed system info, launch the external Microsoft system info app
|
||||||
|
// </summary>
|
||||||
|
private void SysInfoButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ShowSysInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// if an assembly is double-clicked, go to the detail page for that assembly
|
||||||
|
// </summary>
|
||||||
|
private void AssemblyInfoListView_DoubleClick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
string strAssemblyName;
|
||||||
|
if (AssemblyInfoListView.SelectedItems.Count > 0)
|
||||||
|
{
|
||||||
|
strAssemblyName = Convert.ToString(AssemblyInfoListView.SelectedItems[0].Tag);
|
||||||
|
AssemblyNamesComboBox.SelectedIndex = AssemblyNamesComboBox.FindStringExact(strAssemblyName);
|
||||||
|
TabPanelDetails.SelectedTab = TabPageAssemblyDetails;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// if a new assembly is selected from the combo box, show details for that assembly
|
||||||
|
// </summary>
|
||||||
|
private void AssemblyNamesComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
string strAssemblyName = Convert.ToString(AssemblyNamesComboBox.SelectedItem);
|
||||||
|
PopulateAssemblyDetails(MatchAssemblyByName(strAssemblyName), AssemblyDetailsListView);
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// sort the assembly list by column
|
||||||
|
// </summary>
|
||||||
|
private void AssemblyInfoListView_ColumnClick(object sender, ColumnClickEventArgs e)
|
||||||
|
{
|
||||||
|
int intTargetCol = e.Column + 1;
|
||||||
|
|
||||||
|
if (AssemblyInfoListView.Tag != null)
|
||||||
|
{
|
||||||
|
if (Math.Abs(Convert.ToInt32(AssemblyInfoListView.Tag)) == intTargetCol)
|
||||||
|
{
|
||||||
|
intTargetCol = -Convert.ToInt32(AssemblyInfoListView.Tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AssemblyInfoListView.Tag = intTargetCol;
|
||||||
|
AssemblyInfoListView.ListViewItemSorter = new ListViewItemComparer(intTargetCol, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// launch any http:// or mailto: links clicked in the body of the rich text box
|
||||||
|
// </summary>
|
||||||
|
private void MoreRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
System.Diagnostics.Process.Start(e.LinkText);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// <summary>
|
||||||
|
// things to do when the selected tab is changed
|
||||||
|
// </summary>
|
||||||
|
class ListViewItemComparer : System.Collections.IComparer
|
||||||
|
{
|
||||||
|
private int _intCol;
|
||||||
|
private bool _IsAscending = true;
|
||||||
|
|
||||||
|
public ListViewItemComparer()
|
||||||
|
{
|
||||||
|
_intCol = 0;
|
||||||
|
_IsAscending = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ListViewItemComparer(int column, bool ascending)
|
||||||
|
{
|
||||||
|
if (column < 0)
|
||||||
|
{
|
||||||
|
_IsAscending = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_IsAscending = ascending;
|
||||||
|
}
|
||||||
|
_intCol = Math.Abs(column) - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Compare(object x, object y)
|
||||||
|
{
|
||||||
|
int intResult =
|
||||||
|
string.Compare(((ListViewItem)x).SubItems[_intCol].Text, ((ListViewItem)y).SubItems[_intCol].Text);
|
||||||
|
|
||||||
|
if (_IsAscending)
|
||||||
|
{
|
||||||
|
return intResult;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return -intResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TabPanelDetails_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (TabPanelDetails.SelectedTab == TabPageAssemblyDetails)
|
||||||
|
AssemblyNamesComboBox.Focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
377
Controls/AboutBox.resx
Normal file
|
@ -0,0 +1,377 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA
|
||||||
|
AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAJAAAAcwEB
|
||||||
|
AXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAACQAA
|
||||||
|
AHMBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AAAAcwAAAAkAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAACQAAAHUAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAdQAA
|
||||||
|
AAkAAAABAAAAAQAAAAkAAABzAAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAA
|
||||||
|
AHMAAAAJAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAkAAABzAQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
|
||||||
|
AXsBAQF7AQEBewAAAHMAAAAJAAAAAQAAAAEAAAAJAAAAcwEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
|
||||||
|
AXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAHwAAANkBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AAAA2QAAAB8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAAAAIQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
|
||||||
|
ACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
|
||||||
|
ACUAAAAhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARsAAAC5AAAA0QAAANEAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAALkBAQEbAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAQEBGwEBAbkAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAANEAAADRAQEBuQEBARsAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAQEBIQEB
|
||||||
|
ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEB
|
||||||
|
ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQEhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAB8AAADZAQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QAAANkAAAAfAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEA
|
||||||
|
IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQAA
|
||||||
|
AHEBAQFxAQEBcQAAAHEBAQFxAQEBcQAAAHEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEB
|
||||||
|
AXEAAABxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAA
|
||||||
|
AHEAAABxAQEBcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEB
|
||||||
|
AS8AAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAA
|
||||||
|
AP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8BAQH/AAAA/wEBAf8AAAD/AAAA/wEB
|
||||||
|
Af8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQEBAS8AAADTAAAA/wEBAf8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AQEB/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wEB
|
||||||
|
Af8AAAD/AAAA/wEBAf8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQEBAXEBAQFxAQEBcQEBAXEBAQFxAQEBcQEB
|
||||||
|
AXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEAAABxAAAAcQEBAXEAAABxAQEBcQAA
|
||||||
|
AHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQEBAV0AAAAVAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAABcAAABhAQEBdwAAAHcBAQF3AAAAdwEBAXcBAQF3AAAAdwEBAXcAAAB3AAAAdwEB
|
||||||
|
AXcAAAB3AQEBdwAAAHcAAAB3AAAAdwEBAXcBAQF3AAAAdwAAAHcAAAB3AQEBdwAAAHcBAQF3AQEBdwAA
|
||||||
|
AHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAGEAAAAXAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAQEB+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QAA
|
||||||
|
APkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkBAQH5AAAA+QAA
|
||||||
|
APkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAc8AAAAvAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAAAA+QAAAPkAAAD5AQEB+QAA
|
||||||
|
APkAAAD5AQEB+QEBAfkAAAD5AQEB+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QEB
|
||||||
|
AfkBAQH5AAAA+QEBAfkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AQEB+QAAAPkBAQH5AQEB+QAA
|
||||||
|
AM8AAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARcAAABhAQEBdQEB
|
||||||
|
AXUBAQF1AAAAdQEBAXUBAQF1AAAAdQEBAXUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
|
||||||
|
AHUAAAB1AQEBdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
|
||||||
|
AHUAAAB1AAAAdQEBAWEBAQEXAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAA
|
||||||
|
AHEAAABxAQEBcQEBAXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEB
|
||||||
|
AXEAAABxAQEBcQAAAHEBAQFxAAAAcQAAAHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEB
|
||||||
|
AV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8BAQHTAAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AC8AAADTAQEB/wAAAP8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAdMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQEBAXEBAQFxAAAAcQAA
|
||||||
|
AHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAAAAcQAA
|
||||||
|
AHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
258
Controls/AppContextMenu.cs
Normal file
|
@ -0,0 +1,258 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Controls
|
||||||
|
{
|
||||||
|
class AppContextMenu
|
||||||
|
{
|
||||||
|
public event EventHandler ClickedChangeFolder;
|
||||||
|
public event EventHandler ClickedOpenLog;
|
||||||
|
public event EventHandler ClickedRestart;
|
||||||
|
public event EventHandler ClickedExit;
|
||||||
|
|
||||||
|
public ContextMenuStrip Create()
|
||||||
|
{
|
||||||
|
ContextMenuStrip menu = new ContextMenuStrip();
|
||||||
|
menu.BackColor = SystemColors.Control;
|
||||||
|
ToolStripMenuItem changeFolder = new ToolStripMenuItem();
|
||||||
|
changeFolder.Text = Program.Translate("Folder");
|
||||||
|
changeFolder.Click += ChangeFolder_Click;
|
||||||
|
void ChangeFolder_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ClickedChangeFolder.Invoke();
|
||||||
|
}
|
||||||
|
menu.Items.Add(changeFolder);
|
||||||
|
|
||||||
|
ToolStripMenuItem changeLanguage = new ToolStripMenuItem()
|
||||||
|
{
|
||||||
|
Name = "changeLanguage",
|
||||||
|
Text = Program.Translate("Language")
|
||||||
|
};
|
||||||
|
foreach (CultureInfo cultureInfo in
|
||||||
|
GetCultureList(CultureTypes.AllCultures))
|
||||||
|
{
|
||||||
|
if (Program.Languages.Contains(cultureInfo.Name))
|
||||||
|
{
|
||||||
|
ToolStripItem language = changeLanguage.DropDownItems.
|
||||||
|
Add(Program.Translate(cultureInfo.EnglishName));
|
||||||
|
language.Click += Language_Click;
|
||||||
|
void Language_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
string twoLetter = cultureInfo.Name.Substring(0, 2);
|
||||||
|
Properties.Settings.Default.CurrentCultureInfoName =
|
||||||
|
twoLetter;
|
||||||
|
Properties.Settings.Default.Save();
|
||||||
|
ClickedRestart.Invoke();
|
||||||
|
}
|
||||||
|
if (cultureInfo.Name == Properties.Settings.Default.
|
||||||
|
CurrentCultureInfoName)
|
||||||
|
{
|
||||||
|
language.Image = Properties.Resources.Selected;
|
||||||
|
language.ImageScaling = ToolStripItemImageScaling.None;
|
||||||
|
language.Image = ResizeImage(language.Image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
menu.Items.Add(changeLanguage);
|
||||||
|
|
||||||
|
ToolStripMenuItem autostart = new ToolStripMenuItem();
|
||||||
|
autostart.Text = Program.Translate("Autostart");
|
||||||
|
//autostart.Image.HorizontalResolution.wi.c.sc.Select .ImageScaling = ToolStripItemImageScaling.None;
|
||||||
|
if (Properties.Settings.Default.IsAutostartActivated)
|
||||||
|
{
|
||||||
|
autostart.Image = Properties.Resources.Selected;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
autostart.Image = Properties.Resources.NotSelected;
|
||||||
|
}
|
||||||
|
autostart.ImageScaling = ToolStripItemImageScaling.None;
|
||||||
|
autostart.Image = ResizeImage(autostart.Image);
|
||||||
|
autostart.Click += Autostart_Click;
|
||||||
|
void Autostart_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (Properties.Settings.Default.IsAutostartActivated)
|
||||||
|
{
|
||||||
|
Microsoft.Win32.RegistryKey key =
|
||||||
|
Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
|
||||||
|
@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
|
||||||
|
true);
|
||||||
|
key.DeleteValue("SystemTrayMenu", false);
|
||||||
|
Properties.Settings.Default.IsAutostartActivated = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Microsoft.Win32.RegistryKey key =
|
||||||
|
Microsoft.Win32.Registry.CurrentUser.OpenSubKey(
|
||||||
|
@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
|
||||||
|
true);
|
||||||
|
key.SetValue(
|
||||||
|
Assembly.GetExecutingAssembly().GetName().Name,
|
||||||
|
Assembly.GetEntryAssembly().Location);
|
||||||
|
Properties.Settings.Default.IsAutostartActivated = true;
|
||||||
|
}
|
||||||
|
Properties.Settings.Default.Save();
|
||||||
|
ClickedRestart.Invoke();
|
||||||
|
}
|
||||||
|
menu.Items.Add(autostart);
|
||||||
|
|
||||||
|
ToolStripMenuItem hotKey = new ToolStripMenuItem();
|
||||||
|
string hotKeyText =
|
||||||
|
$"{Program.Translate("CTRL")} + " +
|
||||||
|
$"{Program.Translate("ALT")} + ";
|
||||||
|
|
||||||
|
hotKey.ImageScaling = ToolStripItemImageScaling.SizeToFit;
|
||||||
|
if (string.IsNullOrEmpty(Properties.Settings.Default.HotKey))
|
||||||
|
{
|
||||||
|
hotKey.Image = Properties.Resources.NotSelected;
|
||||||
|
hotKey.Text = hotKeyText + "? ";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hotKey.Image = Properties.Resources.Selected;
|
||||||
|
hotKey.Text = hotKeyText +
|
||||||
|
$"{Properties.Settings.Default.HotKey}";
|
||||||
|
}
|
||||||
|
hotKey.ImageScaling = ToolStripItemImageScaling.None;
|
||||||
|
hotKey.Image = ResizeImage(hotKey.Image);
|
||||||
|
hotKey.Click += HotKey_Click;
|
||||||
|
void HotKey_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
AskHotKeyForm askHotKey = new AskHotKeyForm();
|
||||||
|
if (askHotKey.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
Properties.Settings.Default.HotKey = askHotKey.NewHotKey;
|
||||||
|
Properties.Settings.Default.Save();
|
||||||
|
ClickedRestart?.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
menu.Items.Add(hotKey);
|
||||||
|
|
||||||
|
ToolStripSeparator seperator = new ToolStripSeparator();
|
||||||
|
seperator.BackColor = SystemColors.Control;
|
||||||
|
menu.Items.Add(seperator);
|
||||||
|
|
||||||
|
ToolStripMenuItem openLog = new ToolStripMenuItem();
|
||||||
|
openLog.Text = Program.Translate("Log File");
|
||||||
|
openLog.Click += OpenLog_Click;
|
||||||
|
void OpenLog_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ClickedOpenLog.Invoke();
|
||||||
|
}
|
||||||
|
menu.Items.Add(openLog);
|
||||||
|
|
||||||
|
menu.Items.Add(new ToolStripSeparator());
|
||||||
|
|
||||||
|
ToolStripMenuItem about = new ToolStripMenuItem();
|
||||||
|
about.Text = Program.Translate("About");
|
||||||
|
about.Click += About_Click;
|
||||||
|
void About_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(
|
||||||
|
Assembly.GetEntryAssembly().Location);
|
||||||
|
AboutBox ab = new AboutBox();
|
||||||
|
ab.AppTitle = versionInfo.ProductName;
|
||||||
|
ab.AppDescription = versionInfo.FileDescription;
|
||||||
|
ab.AppVersion = $"Version {versionInfo.FileVersion}";
|
||||||
|
ab.AppCopyright = versionInfo.LegalCopyright;
|
||||||
|
ab.AppMoreInfo = "SystemTrayMenu - An improved Windows Toolbar";
|
||||||
|
ab.AppMoreInfo += Environment.NewLine;
|
||||||
|
ab.AppMoreInfo += "Code from © 2019, TAMAHO, All Rights Reserved.";
|
||||||
|
ab.AppMoreInfo += Environment.NewLine;
|
||||||
|
ab.AppMoreInfo += "Developer:";
|
||||||
|
ab.AppMoreInfo += Environment.NewLine;
|
||||||
|
ab.AppMoreInfo += "Markus Hofknecht (mailto:Markus@Hofknecht.eu)";
|
||||||
|
ab.AppMoreInfo += Environment.NewLine;
|
||||||
|
ab.AppMoreInfo += "Tanja Kauth (Tanja@Hofknecht.eu)";
|
||||||
|
ab.AppMoreInfo += Environment.NewLine;
|
||||||
|
ab.AppMoreInfo += Environment.NewLine;
|
||||||
|
ab.AppMoreInfo += "http://www.hofknecht.eu/systemtraymenu/" + Environment.NewLine;
|
||||||
|
ab.AppDetailsButton = true;
|
||||||
|
ab.ShowDialog();
|
||||||
|
}
|
||||||
|
menu.Items.Add(about);
|
||||||
|
|
||||||
|
menu.Items.Add(new ToolStripSeparator());
|
||||||
|
|
||||||
|
ToolStripMenuItem restart = new ToolStripMenuItem();
|
||||||
|
restart.Text = Program.Translate("Restart");
|
||||||
|
restart.Click += Restart_Click;
|
||||||
|
void Restart_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ClickedRestart.Invoke();
|
||||||
|
}
|
||||||
|
menu.Items.Add(restart);
|
||||||
|
|
||||||
|
ToolStripMenuItem exit = new ToolStripMenuItem();
|
||||||
|
exit.Text = Program.Translate("Exit");
|
||||||
|
exit.Click += Exit_Click;
|
||||||
|
void Exit_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
ClickedExit.Invoke();
|
||||||
|
}
|
||||||
|
menu.Items.Add(exit);
|
||||||
|
|
||||||
|
return menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// https://www.codeproject.com/Tips/744914/
|
||||||
|
/// Sorted-list-of-available-cultures-in-NET
|
||||||
|
/// </summary>
|
||||||
|
public IEnumerable<CultureInfo> GetCultureList(
|
||||||
|
CultureTypes cultureType = CultureTypes.SpecificCultures)
|
||||||
|
{
|
||||||
|
var cultureList = CultureInfo.GetCultures(cultureType).ToList();
|
||||||
|
cultureList.Sort((p1, p2) => string.Compare(
|
||||||
|
p1.NativeName, p2.NativeName, true));
|
||||||
|
return cultureList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Resize the image to the specified width and height.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="image">The image to resize.</param>
|
||||||
|
/// <param name="width">The width to resize to.</param>
|
||||||
|
/// <param name="height">The height to resize to.</param>
|
||||||
|
/// <returns>The resized image.</returns>
|
||||||
|
public static Bitmap ResizeImage(Image image)
|
||||||
|
{
|
||||||
|
int length = (int)Math.Round(
|
||||||
|
16 * Program.ScalingFactor, 0,
|
||||||
|
MidpointRounding.AwayFromZero);
|
||||||
|
return ResizeImage(image, length, length);
|
||||||
|
}
|
||||||
|
public static Bitmap ResizeImage(Image image, int width, int height)
|
||||||
|
{
|
||||||
|
var destRect = new Rectangle(0, 0, width, height);
|
||||||
|
var destImage = new Bitmap(width, height);
|
||||||
|
|
||||||
|
destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
|
||||||
|
|
||||||
|
using (var graphics = Graphics.FromImage(destImage))
|
||||||
|
{
|
||||||
|
graphics.CompositingMode = CompositingMode.SourceCopy;
|
||||||
|
graphics.CompositingQuality = CompositingQuality.HighQuality;
|
||||||
|
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||||
|
graphics.SmoothingMode = SmoothingMode.HighQuality;
|
||||||
|
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
||||||
|
|
||||||
|
using (var wrapMode = new ImageAttributes())
|
||||||
|
{
|
||||||
|
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
|
||||||
|
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return destImage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
126
Controls/AppNotifyIcon.cs
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using SystemTrayMenu.Controls;
|
||||||
|
using R = SystemTrayMenu.Properties.Resources;
|
||||||
|
using Timer = System.Windows.Forms.Timer;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu
|
||||||
|
{
|
||||||
|
class MenuNotifyIcon : IDisposable
|
||||||
|
{
|
||||||
|
public event EventHandler HandleClick;
|
||||||
|
public event EventHandler ChangeFolder;
|
||||||
|
public event EventHandler OpenLog;
|
||||||
|
public event EventHandler Restart;
|
||||||
|
public event EventHandler Exit;
|
||||||
|
|
||||||
|
NotifyIcon notifyIcon = new NotifyIcon();
|
||||||
|
private DateTime timeLoadingStart;
|
||||||
|
int threadsLoading = 0;
|
||||||
|
Timer load = new Timer();
|
||||||
|
int loadCount = 0, indexLoad = 0;
|
||||||
|
List<Icon> bitmapsLoading = new List<Icon>() { R.L010, R.L020, R.L030,
|
||||||
|
R.L040, R.L050, R.L060, R.L070, R.L080, R.L090, R.L100, R.L110, R.L120,
|
||||||
|
R.L130, R.L140, R.L150, R.L160, R.L170, R.L180};
|
||||||
|
|
||||||
|
public MenuNotifyIcon()
|
||||||
|
{
|
||||||
|
indexLoad = bitmapsLoading.Count;
|
||||||
|
notifyIcon.Icon = bitmapsLoading.First();
|
||||||
|
load.Tick += Load_Tick;
|
||||||
|
load.Interval = MenuDefines.IntervalLoad;
|
||||||
|
|
||||||
|
notifyIcon.Text = "SystemTrayMenu";
|
||||||
|
notifyIcon.Visible = true;
|
||||||
|
notifyIcon.Icon = R.SystemTrayMenu;
|
||||||
|
AppContextMenu contextMenus = new AppContextMenu();
|
||||||
|
contextMenus.ClickedChangeFolder += ClickedChangeFolder;
|
||||||
|
void ClickedChangeFolder()
|
||||||
|
{
|
||||||
|
ChangeFolder.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
contextMenus.ClickedOpenLog += ClickedOpenLog;
|
||||||
|
void ClickedOpenLog()
|
||||||
|
{
|
||||||
|
OpenLog.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
contextMenus.ClickedRestart += ClickedRestart;
|
||||||
|
void ClickedRestart()
|
||||||
|
{
|
||||||
|
Restart.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
contextMenus.ClickedExit += ClickedExit;
|
||||||
|
void ClickedExit()
|
||||||
|
{
|
||||||
|
Exit.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
notifyIcon.ContextMenuStrip = contextMenus.Create();
|
||||||
|
notifyIcon.MouseClick += NotifyIcon_MouseClick;
|
||||||
|
void NotifyIcon_MouseClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Button == MouseButtons.Left)
|
||||||
|
{
|
||||||
|
HandleClick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
notifyIcon.MouseDoubleClick += NotifyIcon_MouseDoubleClick;
|
||||||
|
void NotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Button == MouseButtons.Left)
|
||||||
|
{
|
||||||
|
HandleClick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
notifyIcon.Icon = null;
|
||||||
|
notifyIcon.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadingStart()
|
||||||
|
{
|
||||||
|
timeLoadingStart = DateTime.Now;
|
||||||
|
threadsLoading++;
|
||||||
|
load.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadingStop()
|
||||||
|
{
|
||||||
|
threadsLoading--;
|
||||||
|
}
|
||||||
|
public void LoadWait()
|
||||||
|
{
|
||||||
|
notifyIcon.Icon = bitmapsLoading[loadCount++ % indexLoad];
|
||||||
|
}
|
||||||
|
public void LoadStop()
|
||||||
|
{
|
||||||
|
notifyIcon.Icon = R.SystemTrayMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Load_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (threadsLoading > 0)
|
||||||
|
{
|
||||||
|
if (DateTime.Now - timeLoadingStart > new TimeSpan(0, 0, 0, 0, 500))
|
||||||
|
{
|
||||||
|
notifyIcon.Icon = bitmapsLoading[loadCount++ % indexLoad];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
notifyIcon.Icon = R.SystemTrayMenu;
|
||||||
|
load.Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
139
Controls/AskHotKeyForm.Designer.cs
generated
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
namespace SystemTrayMenu.Controls
|
||||||
|
{
|
||||||
|
partial class AskHotKeyForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AskHotKeyForm));
|
||||||
|
this.tableLayoutPanelMain = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.labelText = new System.Windows.Forms.Label();
|
||||||
|
this.tableLayoutPanelBottom = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.buttonOk = new System.Windows.Forms.Button();
|
||||||
|
this.labelCaption = new System.Windows.Forms.Label();
|
||||||
|
this.tableLayoutPanelMain.SuspendLayout();
|
||||||
|
this.tableLayoutPanelBottom.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// tableLayoutPanelMain
|
||||||
|
//
|
||||||
|
this.tableLayoutPanelMain.AutoSize = true;
|
||||||
|
this.tableLayoutPanelMain.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.tableLayoutPanelMain.ColumnCount = 1;
|
||||||
|
this.tableLayoutPanelMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tableLayoutPanelMain.Controls.Add(this.labelText, 0, 1);
|
||||||
|
this.tableLayoutPanelMain.Controls.Add(this.tableLayoutPanelBottom, 0, 2);
|
||||||
|
this.tableLayoutPanelMain.Controls.Add(this.labelCaption, 0, 0);
|
||||||
|
this.tableLayoutPanelMain.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.tableLayoutPanelMain.Name = "tableLayoutPanelMain";
|
||||||
|
this.tableLayoutPanelMain.RowCount = 3;
|
||||||
|
this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanelMain.Size = new System.Drawing.Size(121, 77);
|
||||||
|
this.tableLayoutPanelMain.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// labelText
|
||||||
|
//
|
||||||
|
this.labelText.AutoSize = true;
|
||||||
|
this.labelText.Location = new System.Drawing.Point(3, 21);
|
||||||
|
this.labelText.Margin = new System.Windows.Forms.Padding(3, 8, 3, 8);
|
||||||
|
this.labelText.Name = "labelText";
|
||||||
|
this.labelText.Size = new System.Drawing.Size(67, 13);
|
||||||
|
this.labelText.TabIndex = 1;
|
||||||
|
this.labelText.Text = "Ctrl + Alt + ?)";
|
||||||
|
//
|
||||||
|
// tableLayoutPanelBottom
|
||||||
|
//
|
||||||
|
this.tableLayoutPanelBottom.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.tableLayoutPanelBottom.AutoSize = true;
|
||||||
|
this.tableLayoutPanelBottom.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.tableLayoutPanelBottom.ColumnCount = 3;
|
||||||
|
this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||||
|
this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||||
|
this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||||
|
this.tableLayoutPanelBottom.Controls.Add(this.buttonOk, 1, 0);
|
||||||
|
this.tableLayoutPanelBottom.Location = new System.Drawing.Point(3, 45);
|
||||||
|
this.tableLayoutPanelBottom.Name = "tableLayoutPanelBottom";
|
||||||
|
this.tableLayoutPanelBottom.RowCount = 1;
|
||||||
|
this.tableLayoutPanelBottom.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanelBottom.Size = new System.Drawing.Size(115, 29);
|
||||||
|
this.tableLayoutPanelBottom.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// buttonOk
|
||||||
|
//
|
||||||
|
this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
|
this.buttonOk.Location = new System.Drawing.Point(20, 3);
|
||||||
|
this.buttonOk.Name = "buttonOk";
|
||||||
|
this.buttonOk.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.buttonOk.TabIndex = 2;
|
||||||
|
this.buttonOk.Text = "OK";
|
||||||
|
this.buttonOk.UseVisualStyleBackColor = true;
|
||||||
|
this.buttonOk.Click += new System.EventHandler(this.ButtonOk_Click);
|
||||||
|
//
|
||||||
|
// labelCaption
|
||||||
|
//
|
||||||
|
this.labelCaption.AutoSize = true;
|
||||||
|
this.labelCaption.Location = new System.Drawing.Point(3, 0);
|
||||||
|
this.labelCaption.MaximumSize = new System.Drawing.Size(217, 0);
|
||||||
|
this.labelCaption.Name = "labelCaption";
|
||||||
|
this.labelCaption.Size = new System.Drawing.Size(115, 13);
|
||||||
|
this.labelCaption.TabIndex = 0;
|
||||||
|
this.labelCaption.Text = "Shortcut key (e.g. F12)";
|
||||||
|
//
|
||||||
|
// AskHotKeyForm
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
|
this.AutoSize = true;
|
||||||
|
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.ClientSize = new System.Drawing.Size(302, 221);
|
||||||
|
this.Controls.Add(this.tableLayoutPanelMain);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.MinimizeBox = false;
|
||||||
|
this.Name = "AskHotKeyForm";
|
||||||
|
this.Padding = new System.Windows.Forms.Padding(0, 0, 10, 0);
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
|
this.Text = "AskHotKeyForm";
|
||||||
|
this.tableLayoutPanelMain.ResumeLayout(false);
|
||||||
|
this.tableLayoutPanelMain.PerformLayout();
|
||||||
|
this.tableLayoutPanelBottom.ResumeLayout(false);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanelMain;
|
||||||
|
private System.Windows.Forms.Button buttonOk;
|
||||||
|
private System.Windows.Forms.Label labelCaption;
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBottom;
|
||||||
|
private System.Windows.Forms.Label labelText;
|
||||||
|
}
|
||||||
|
}
|
121
Controls/AskHotKeyForm.cs
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Controls
|
||||||
|
{
|
||||||
|
public partial class AskHotKeyForm : Form
|
||||||
|
{
|
||||||
|
public string NewHotKey;
|
||||||
|
|
||||||
|
public AskHotKeyForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
this.Text = Program.Translate("Shortcut key");
|
||||||
|
this.labelCaption.Text = $"{Program.Translate("Shortcut key")} " +
|
||||||
|
$"{Program.Translate("(e.g. F12)")}";
|
||||||
|
this.labelText.Text =
|
||||||
|
Program.Translate("CTRL") + " + " +
|
||||||
|
Program.Translate("ALT") + " + ?";
|
||||||
|
|
||||||
|
this.buttonOk.Text = Program.Translate("buttonOk");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ButtonOk_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.DialogResult = DialogResult.None;
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool ProcessCmdKey(ref Message msg, Keys keys)
|
||||||
|
{
|
||||||
|
switch (keys)
|
||||||
|
{
|
||||||
|
case Keys.Space:
|
||||||
|
case Keys.D0:
|
||||||
|
case Keys.D1:
|
||||||
|
case Keys.D2:
|
||||||
|
case Keys.D3:
|
||||||
|
case Keys.D4:
|
||||||
|
case Keys.D5:
|
||||||
|
case Keys.D6:
|
||||||
|
case Keys.D7:
|
||||||
|
case Keys.D8:
|
||||||
|
case Keys.D9:
|
||||||
|
case Keys.A:
|
||||||
|
case Keys.B:
|
||||||
|
case Keys.C:
|
||||||
|
case Keys.D:
|
||||||
|
case Keys.E:
|
||||||
|
case Keys.F:
|
||||||
|
case Keys.G:
|
||||||
|
case Keys.H:
|
||||||
|
case Keys.I:
|
||||||
|
case Keys.J:
|
||||||
|
case Keys.K:
|
||||||
|
case Keys.L:
|
||||||
|
case Keys.M:
|
||||||
|
case Keys.N:
|
||||||
|
case Keys.O:
|
||||||
|
case Keys.P:
|
||||||
|
case Keys.Q:
|
||||||
|
case Keys.R:
|
||||||
|
case Keys.S:
|
||||||
|
case Keys.T:
|
||||||
|
case Keys.U:
|
||||||
|
case Keys.V:
|
||||||
|
case Keys.W:
|
||||||
|
case Keys.X:
|
||||||
|
case Keys.Y:
|
||||||
|
case Keys.Z:
|
||||||
|
case Keys.NumPad0:
|
||||||
|
case Keys.NumPad1:
|
||||||
|
case Keys.NumPad2:
|
||||||
|
case Keys.NumPad3:
|
||||||
|
case Keys.NumPad4:
|
||||||
|
case Keys.NumPad5:
|
||||||
|
case Keys.NumPad6:
|
||||||
|
case Keys.NumPad7:
|
||||||
|
case Keys.NumPad8:
|
||||||
|
case Keys.NumPad9:
|
||||||
|
case Keys.F1:
|
||||||
|
case Keys.F2:
|
||||||
|
case Keys.F3:
|
||||||
|
case Keys.F4:
|
||||||
|
case Keys.F5:
|
||||||
|
case Keys.F6:
|
||||||
|
case Keys.F7:
|
||||||
|
case Keys.F8:
|
||||||
|
case Keys.F9:
|
||||||
|
case Keys.F10:
|
||||||
|
case Keys.F11:
|
||||||
|
case Keys.F12:
|
||||||
|
case Keys.F13:
|
||||||
|
case Keys.F14:
|
||||||
|
case Keys.F15:
|
||||||
|
case Keys.F16:
|
||||||
|
case Keys.F17:
|
||||||
|
case Keys.F18:
|
||||||
|
case Keys.F19:
|
||||||
|
case Keys.F20:
|
||||||
|
case Keys.F21:
|
||||||
|
case Keys.F22:
|
||||||
|
case Keys.F23:
|
||||||
|
case Keys.F24:
|
||||||
|
NewHotKey = keys.ToString();
|
||||||
|
this.DialogResult = DialogResult.OK;
|
||||||
|
this.Close();
|
||||||
|
break;
|
||||||
|
case Keys.Back:
|
||||||
|
case Keys.Delete:
|
||||||
|
NewHotKey = string.Empty;
|
||||||
|
this.DialogResult = DialogResult.OK;
|
||||||
|
this.Close();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.ProcessCmdKey(ref msg, keys);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
377
Controls/AskHotKeyForm.resx
Normal file
|
@ -0,0 +1,377 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA
|
||||||
|
AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAJAAAAcwEB
|
||||||
|
AXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAACQAA
|
||||||
|
AHMBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AAAAcwAAAAkAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAACQAAAHUAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAdQAA
|
||||||
|
AAkAAAABAAAAAQAAAAkAAABzAAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAA
|
||||||
|
AHMAAAAJAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAkAAABzAQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
|
||||||
|
AXsBAQF7AQEBewAAAHMAAAAJAAAAAQAAAAEAAAAJAAAAcwEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
|
||||||
|
AXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAHwAAANkBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AAAA2QAAAB8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAAAAIQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
|
||||||
|
ACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
|
||||||
|
ACUAAAAhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARsAAAC5AAAA0QAAANEAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAALkBAQEbAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAQEBGwEBAbkAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAANEAAADRAQEBuQEBARsAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAQEBIQEB
|
||||||
|
ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEB
|
||||||
|
ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQEhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAB8AAADZAQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QAAANkAAAAfAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEA
|
||||||
|
IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQAA
|
||||||
|
AHEBAQFxAQEBcQAAAHEBAQFxAQEBcQAAAHEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEB
|
||||||
|
AXEAAABxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAA
|
||||||
|
AHEAAABxAQEBcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEB
|
||||||
|
AS8AAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAA
|
||||||
|
AP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8BAQH/AAAA/wEBAf8AAAD/AAAA/wEB
|
||||||
|
Af8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQEBAS8AAADTAAAA/wEBAf8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AQEB/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wEB
|
||||||
|
Af8AAAD/AAAA/wEBAf8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQEBAXEBAQFxAQEBcQEBAXEBAQFxAQEBcQEB
|
||||||
|
AXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEAAABxAAAAcQEBAXEAAABxAQEBcQAA
|
||||||
|
AHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQEBAV0AAAAVAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAABcAAABhAQEBdwAAAHcBAQF3AAAAdwEBAXcBAQF3AAAAdwEBAXcAAAB3AAAAdwEB
|
||||||
|
AXcAAAB3AQEBdwAAAHcAAAB3AAAAdwEBAXcBAQF3AAAAdwAAAHcAAAB3AQEBdwAAAHcBAQF3AQEBdwAA
|
||||||
|
AHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAGEAAAAXAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAQEB+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QAA
|
||||||
|
APkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkBAQH5AAAA+QAA
|
||||||
|
APkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAc8AAAAvAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAAAA+QAAAPkAAAD5AQEB+QAA
|
||||||
|
APkAAAD5AQEB+QEBAfkAAAD5AQEB+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QEB
|
||||||
|
AfkBAQH5AAAA+QEBAfkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AQEB+QAAAPkBAQH5AQEB+QAA
|
||||||
|
AM8AAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARcAAABhAQEBdQEB
|
||||||
|
AXUBAQF1AAAAdQEBAXUBAQF1AAAAdQEBAXUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
|
||||||
|
AHUAAAB1AQEBdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
|
||||||
|
AHUAAAB1AAAAdQEBAWEBAQEXAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAA
|
||||||
|
AHEAAABxAQEBcQEBAXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEB
|
||||||
|
AXEAAABxAQEBcQAAAHEBAQFxAAAAcQAAAHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEB
|
||||||
|
AV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8BAQHTAAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AC8AAADTAQEB/wAAAP8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAdMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQEBAXEBAQFxAAAAcQAA
|
||||||
|
AHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAAAAcQAA
|
||||||
|
AHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
140
Controls/DragDropHintForm.Designer.cs
generated
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
namespace SystemTrayMenu.Controls
|
||||||
|
{
|
||||||
|
partial class DragDropHintForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DragDropHintForm));
|
||||||
|
this.tableLayoutPanelMain = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.tableLayoutPanelBottom = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
this.buttonOk = new System.Windows.Forms.Button();
|
||||||
|
this.labelHint = new System.Windows.Forms.Label();
|
||||||
|
this.pictureBoxHint = new System.Windows.Forms.PictureBox();
|
||||||
|
this.tableLayoutPanelMain.SuspendLayout();
|
||||||
|
this.tableLayoutPanelBottom.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureBoxHint)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// tableLayoutPanelMain
|
||||||
|
//
|
||||||
|
this.tableLayoutPanelMain.AutoSize = true;
|
||||||
|
this.tableLayoutPanelMain.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.tableLayoutPanelMain.ColumnCount = 1;
|
||||||
|
this.tableLayoutPanelMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||||
|
this.tableLayoutPanelMain.Controls.Add(this.tableLayoutPanelBottom, 0, 2);
|
||||||
|
this.tableLayoutPanelMain.Controls.Add(this.labelHint, 0, 0);
|
||||||
|
this.tableLayoutPanelMain.Controls.Add(this.pictureBoxHint, 0, 1);
|
||||||
|
this.tableLayoutPanelMain.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.tableLayoutPanelMain.Name = "tableLayoutPanelMain";
|
||||||
|
this.tableLayoutPanelMain.RowCount = 3;
|
||||||
|
this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanelMain.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanelMain.Size = new System.Drawing.Size(223, 149);
|
||||||
|
this.tableLayoutPanelMain.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// tableLayoutPanelBottom
|
||||||
|
//
|
||||||
|
this.tableLayoutPanelBottom.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.tableLayoutPanelBottom.AutoSize = true;
|
||||||
|
this.tableLayoutPanelBottom.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.tableLayoutPanelBottom.ColumnCount = 3;
|
||||||
|
this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||||
|
this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||||
|
this.tableLayoutPanelBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||||
|
this.tableLayoutPanelBottom.Controls.Add(this.buttonOk, 1, 0);
|
||||||
|
this.tableLayoutPanelBottom.Location = new System.Drawing.Point(3, 117);
|
||||||
|
this.tableLayoutPanelBottom.Name = "tableLayoutPanelBottom";
|
||||||
|
this.tableLayoutPanelBottom.RowCount = 1;
|
||||||
|
this.tableLayoutPanelBottom.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanelBottom.Size = new System.Drawing.Size(217, 29);
|
||||||
|
this.tableLayoutPanelBottom.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// buttonOk
|
||||||
|
//
|
||||||
|
this.buttonOk.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
|
this.buttonOk.Location = new System.Drawing.Point(71, 3);
|
||||||
|
this.buttonOk.Name = "buttonOk";
|
||||||
|
this.buttonOk.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.buttonOk.TabIndex = 2;
|
||||||
|
this.buttonOk.Text = "OK";
|
||||||
|
this.buttonOk.UseVisualStyleBackColor = true;
|
||||||
|
this.buttonOk.Click += new System.EventHandler(this.ButtonOk_Click);
|
||||||
|
//
|
||||||
|
// labelHint
|
||||||
|
//
|
||||||
|
this.labelHint.AutoSize = true;
|
||||||
|
this.labelHint.Location = new System.Drawing.Point(3, 0);
|
||||||
|
this.labelHint.MaximumSize = new System.Drawing.Size(217, 0);
|
||||||
|
this.labelHint.Name = "labelHint";
|
||||||
|
this.labelHint.Size = new System.Drawing.Size(41, 13);
|
||||||
|
this.labelHint.TabIndex = 0;
|
||||||
|
this.labelHint.Text = "Hint: ...";
|
||||||
|
//
|
||||||
|
// pictureBoxHint
|
||||||
|
//
|
||||||
|
this.pictureBoxHint.Image = global::SystemTrayMenu.Properties.Resources.hintDragDrop;
|
||||||
|
this.pictureBoxHint.Location = new System.Drawing.Point(3, 16);
|
||||||
|
this.pictureBoxHint.Name = "pictureBoxHint";
|
||||||
|
this.pictureBoxHint.Size = new System.Drawing.Size(217, 95);
|
||||||
|
this.pictureBoxHint.TabIndex = 1;
|
||||||
|
this.pictureBoxHint.TabStop = false;
|
||||||
|
//
|
||||||
|
// DragDropHintForm
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
|
this.AutoSize = true;
|
||||||
|
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.ClientSize = new System.Drawing.Size(302, 221);
|
||||||
|
this.Controls.Add(this.tableLayoutPanelMain);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.MinimizeBox = false;
|
||||||
|
this.Name = "DragDropHintForm";
|
||||||
|
this.Padding = new System.Windows.Forms.Padding(0, 0, 10, 0);
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
|
this.Text = "DragDropHintForm";
|
||||||
|
this.tableLayoutPanelMain.ResumeLayout(false);
|
||||||
|
this.tableLayoutPanelMain.PerformLayout();
|
||||||
|
this.tableLayoutPanelBottom.ResumeLayout(false);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureBoxHint)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanelMain;
|
||||||
|
private System.Windows.Forms.Button buttonOk;
|
||||||
|
private System.Windows.Forms.Label labelHint;
|
||||||
|
private System.Windows.Forms.PictureBox pictureBoxHint;
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanelBottom;
|
||||||
|
}
|
||||||
|
}
|
29
Controls/DragDropHintForm.cs
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Data;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Controls
|
||||||
|
{
|
||||||
|
public partial class DragDropHintForm : Form
|
||||||
|
{
|
||||||
|
public DragDropHintForm(string hintTitle, string hintText,
|
||||||
|
string buttonOk)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
this.Text = hintTitle;
|
||||||
|
this.labelHint.Text = hintText;
|
||||||
|
this.buttonOk.Text = buttonOk;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ButtonOk_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
377
Controls/DragDropHintForm.resx
Normal file
|
@ -0,0 +1,377 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA
|
||||||
|
AAAgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAJAAAAcwEB
|
||||||
|
AXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAACQAA
|
||||||
|
AHMBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AAAAcwAAAAkAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAACQAAAHUAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAdQAA
|
||||||
|
AAkAAAABAAAAAQAAAAkAAABzAAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAAAHsAAAB7AAAAewAA
|
||||||
|
AHMAAAAJAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAkAAABzAQEBewEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
|
||||||
|
AXsBAQF7AQEBewAAAHMAAAAJAAAAAQAAAAEAAAAJAAAAcwEBAXsBAQF7AQEBewEBAXsBAQF7AQEBewEB
|
||||||
|
AXsBAQF7AQEBewEBAXsAAABzAAAACQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAgAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAHwAAANkBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AAAA2QAAAB8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAAAAIQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
|
||||||
|
ACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAAACUAAAAlAAAAJQAA
|
||||||
|
ACUAAAAhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARsAAAC5AAAA0QAAANEAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAALkBAQEbAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAQEBGwEBAbkAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAAANEAAADRAAAA0QAA
|
||||||
|
ANEAAADRAAAA0QAAANEAAADRAQEBuQEBARsAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFAQEBIQEB
|
||||||
|
ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQElAQEBJQEB
|
||||||
|
ASUBAQElAQEBJQEBASUBAQElAQEBJQEBASUBAQEhAAAABQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAfAAAA2QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUAAADZAAAAHwAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAB8AAADZAQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEBAfUBAQH1AQEB9QEB
|
||||||
|
AfUBAQH1AQEB9QEBAfUBAQH1AQEB9QAAANkAAAAfAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEA
|
||||||
|
IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQAA
|
||||||
|
AHEBAQFxAQEBcQAAAHEBAQFxAQEBcQAAAHEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEB
|
||||||
|
AXEAAABxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAA
|
||||||
|
AHEAAABxAQEBcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEB
|
||||||
|
AS8AAADTAAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAA
|
||||||
|
AP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8BAQH/AAAA/wEBAf8AAAD/AAAA/wEB
|
||||||
|
Af8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQEBAS8AAADTAAAA/wEBAf8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AQEB/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wEB
|
||||||
|
Af8AAAD/AAAA/wEBAf8BAQH/AAAA/wEBAf8BAQH/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUAAABdAQEBcQEBAXEBAQFxAQEBcQEBAXEBAQFxAQEBcQEB
|
||||||
|
AXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEAAABxAAAAcQEBAXEAAABxAQEBcQAA
|
||||||
|
AHEBAQFxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQAAAHEAAABxAQEBcQEBAV0AAAAVAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAABcAAABhAQEBdwAAAHcBAQF3AAAAdwEBAXcBAQF3AAAAdwEBAXcAAAB3AAAAdwEB
|
||||||
|
AXcAAAB3AQEBdwAAAHcAAAB3AAAAdwEBAXcBAQF3AAAAdwAAAHcAAAB3AQEBdwAAAHcBAQF3AQEBdwAA
|
||||||
|
AHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAHcBAQF3AQEBdwAAAGEAAAAXAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAQEB+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QAA
|
||||||
|
APkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkBAQH5AAAA+QAA
|
||||||
|
APkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QEBAc8AAAAvAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8AAADPAAAA+QAAAPkAAAD5AQEB+QAA
|
||||||
|
APkAAAD5AQEB+QEBAfkAAAD5AQEB+QAAAPkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AAAA+QEB
|
||||||
|
AfkBAQH5AAAA+QEBAfkAAAD5AAAA+QEBAfkAAAD5AAAA+QEBAfkBAQH5AQEB+QAAAPkBAQH5AQEB+QAA
|
||||||
|
AM8AAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQEBARcAAABhAQEBdQEB
|
||||||
|
AXUBAQF1AAAAdQEBAXUBAQF1AAAAdQEBAXUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
|
||||||
|
AHUAAAB1AQEBdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAA
|
||||||
|
AHUAAAB1AAAAdQEBAWEBAQEXAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAA
|
||||||
|
AHEAAABxAQEBcQEBAXEBAQFxAAAAcQAAAHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEB
|
||||||
|
AXEAAABxAQEBcQAAAHEBAQFxAAAAcQAAAHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEB
|
||||||
|
AV0AAAAVAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAC8BAQHTAAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAANMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AC8AAADTAQEB/wAAAP8AAAD/AAAA/wEBAf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wAAAP8AAAD/AAAA/wAA
|
||||||
|
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAdMAAAAvAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAABUBAQFdAQEBcQAAAHEBAQFxAQEBcQAAAHEAAABxAQEBcQEBAXEBAQFxAAAAcQAA
|
||||||
|
AHEAAABxAQEBcQAAAHEBAQFxAAAAcQEBAXEBAQFxAAAAcQEBAXEAAABxAQEBcQAAAHEBAQFxAAAAcQAA
|
||||||
|
AHEBAQFxAQEBcQEBAXEBAQFxAQEBcQEBAXEAAABxAAAAcQEBAV0AAAAVAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA
|
||||||
|
AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
183
Controls/Menu.Designer.cs
generated
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
using SystemTrayMenu.Controls;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu
|
||||||
|
{
|
||||||
|
partial class Menu
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
FadeForm.Dispose();
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
this.labelTitle = new System.Windows.Forms.Label();
|
||||||
|
this.dgv = new System.Windows.Forms.DataGridView();
|
||||||
|
this.ColumnIcon = new System.Windows.Forms.DataGridViewImageColumn();
|
||||||
|
this.ColumnText = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
|
this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.dgv)).BeginInit();
|
||||||
|
this.tableLayoutPanel.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// labelTitle
|
||||||
|
//
|
||||||
|
this.labelTitle.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.labelTitle.AutoSize = true;
|
||||||
|
this.labelTitle.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(229)))), ((int)(((byte)(243)))), ((int)(((byte)(255)))));
|
||||||
|
this.labelTitle.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.labelTitle.ForeColor = System.Drawing.Color.Black;
|
||||||
|
this.labelTitle.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.labelTitle.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.labelTitle.Name = "labelTitle";
|
||||||
|
this.labelTitle.Padding = new System.Windows.Forms.Padding(3, 0, 0, 1);
|
||||||
|
this.labelTitle.Size = new System.Drawing.Size(361, 14);
|
||||||
|
this.labelTitle.TabIndex = 2;
|
||||||
|
this.labelTitle.Text = "STM";
|
||||||
|
this.labelTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
|
this.labelTitle.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.LabelTitle_MouseDoubleClick);
|
||||||
|
this.labelTitle.MouseEnter += new System.EventHandler(this.LabelTitle_MouseEnter);
|
||||||
|
this.labelTitle.MouseLeave += new System.EventHandler(this.LabelTitle_MouseLeave);
|
||||||
|
this.labelTitle.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dgv_MouseWheel);
|
||||||
|
//
|
||||||
|
// dgv
|
||||||
|
//
|
||||||
|
this.dgv.AllowUserToAddRows = false;
|
||||||
|
this.dgv.AllowUserToDeleteRows = false;
|
||||||
|
this.dgv.AllowUserToResizeColumns = false;
|
||||||
|
this.dgv.AllowUserToResizeRows = false;
|
||||||
|
this.dgv.BackgroundColor = System.Drawing.Color.White;
|
||||||
|
this.dgv.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.dgv.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
|
||||||
|
this.dgv.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.Disable;
|
||||||
|
this.dgv.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
|
||||||
|
this.dgv.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
|
||||||
|
this.dgv.ColumnHeadersVisible = false;
|
||||||
|
this.dgv.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||||
|
this.ColumnIcon,
|
||||||
|
this.ColumnText});
|
||||||
|
this.dgv.Location = new System.Drawing.Point(0, 14);
|
||||||
|
this.dgv.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.dgv.Name = "dgv";
|
||||||
|
this.dgv.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
|
||||||
|
this.dgv.RowHeadersVisible = false;
|
||||||
|
this.dgv.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
|
||||||
|
dataGridViewCellStyle3.Font = new System.Drawing.Font("Segoe UI", 7F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel, ((byte)(0)));
|
||||||
|
this.dgv.RowsDefaultCellStyle = dataGridViewCellStyle3;
|
||||||
|
this.dgv.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.dgv.RowTemplate.Height = 20;
|
||||||
|
this.dgv.RowTemplate.ReadOnly = true;
|
||||||
|
this.dgv.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||||
|
this.dgv.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
|
||||||
|
this.dgv.ShowCellErrors = false;
|
||||||
|
this.dgv.ShowCellToolTips = false;
|
||||||
|
this.dgv.ShowEditingIcon = false;
|
||||||
|
this.dgv.ShowRowErrors = false;
|
||||||
|
this.dgv.Size = new System.Drawing.Size(361, 390);
|
||||||
|
this.dgv.TabIndex = 4;
|
||||||
|
this.dgv.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dgv_MouseWheel);
|
||||||
|
//
|
||||||
|
// ColumnIcon
|
||||||
|
//
|
||||||
|
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
|
||||||
|
dataGridViewCellStyle1.NullValue = "System.Drawing.Icon";
|
||||||
|
dataGridViewCellStyle1.Padding = new System.Windows.Forms.Padding(3, 2, 6, 2);
|
||||||
|
this.ColumnIcon.DefaultCellStyle = dataGridViewCellStyle1;
|
||||||
|
this.ColumnIcon.Frozen = true;
|
||||||
|
this.ColumnIcon.HeaderText = "ColumnIcon";
|
||||||
|
this.ColumnIcon.ImageLayout = System.Windows.Forms.DataGridViewImageCellLayout.Zoom;
|
||||||
|
this.ColumnIcon.Name = "ColumnIcon";
|
||||||
|
this.ColumnIcon.ReadOnly = true;
|
||||||
|
this.ColumnIcon.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||||
|
this.ColumnIcon.Width = 25;
|
||||||
|
//
|
||||||
|
// ColumnText
|
||||||
|
//
|
||||||
|
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||||
|
dataGridViewCellStyle2.Padding = new System.Windows.Forms.Padding(0, 0, 3, 0);
|
||||||
|
this.ColumnText.DefaultCellStyle = dataGridViewCellStyle2;
|
||||||
|
this.ColumnText.Frozen = true;
|
||||||
|
this.ColumnText.HeaderText = "ColumnText";
|
||||||
|
this.ColumnText.MaxInputLength = 40;
|
||||||
|
this.ColumnText.Name = "ColumnText";
|
||||||
|
this.ColumnText.ReadOnly = true;
|
||||||
|
this.ColumnText.Resizable = System.Windows.Forms.DataGridViewTriState.False;
|
||||||
|
this.ColumnText.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Programmatic;
|
||||||
|
this.ColumnText.Width = 50;
|
||||||
|
//
|
||||||
|
// tableLayoutPanel
|
||||||
|
//
|
||||||
|
this.tableLayoutPanel.AutoScroll = true;
|
||||||
|
this.tableLayoutPanel.AutoSize = true;
|
||||||
|
this.tableLayoutPanel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.tableLayoutPanel.ColumnCount = 1;
|
||||||
|
this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
||||||
|
this.tableLayoutPanel.Controls.Add(this.dgv, 0, 1);
|
||||||
|
this.tableLayoutPanel.Controls.Add(this.labelTitle, 0, 0);
|
||||||
|
this.tableLayoutPanel.Location = new System.Drawing.Point(1, 1);
|
||||||
|
this.tableLayoutPanel.Margin = new System.Windows.Forms.Padding(0);
|
||||||
|
this.tableLayoutPanel.Name = "tableLayoutPanel";
|
||||||
|
this.tableLayoutPanel.RowCount = 2;
|
||||||
|
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle());
|
||||||
|
this.tableLayoutPanel.Size = new System.Drawing.Size(361, 404);
|
||||||
|
this.tableLayoutPanel.TabIndex = 3;
|
||||||
|
this.tableLayoutPanel.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.dgv_MouseWheel);
|
||||||
|
//
|
||||||
|
// Menu
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
|
this.AutoSize = true;
|
||||||
|
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||||
|
this.BackColor = System.Drawing.Color.Black;
|
||||||
|
this.ClientSize = new System.Drawing.Size(707, 611);
|
||||||
|
this.Controls.Add(this.tableLayoutPanel);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
||||||
|
this.Name = "Menu";
|
||||||
|
this.Opacity = 0.01D;
|
||||||
|
this.Padding = new System.Windows.Forms.Padding(1);
|
||||||
|
this.ShowInTaskbar = false;
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
||||||
|
this.Text = "SystemTrayMenu";
|
||||||
|
this.TopMost = true;
|
||||||
|
this.Deactivate += new System.EventHandler(this.Menu_Deactivate);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.dgv)).EndInit();
|
||||||
|
this.tableLayoutPanel.ResumeLayout(false);
|
||||||
|
this.tableLayoutPanel.PerformLayout();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
private System.Windows.Forms.Label labelTitle;
|
||||||
|
private System.Windows.Forms.DataGridView dgv;
|
||||||
|
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;
|
||||||
|
private System.Windows.Forms.DataGridViewImageColumn ColumnIcon;
|
||||||
|
private System.Windows.Forms.DataGridViewTextBoxColumn ColumnText;
|
||||||
|
}
|
||||||
|
}
|
313
Controls/Menu.cs
Normal file
|
@ -0,0 +1,313 @@
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using SystemTrayMenu.Controls;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu
|
||||||
|
{
|
||||||
|
public partial class Menu : Form, IDisposable
|
||||||
|
{
|
||||||
|
public new event EventHandler MouseWheel;
|
||||||
|
public event EventHandler Deactivated;
|
||||||
|
public event EventHandler UserClickedOpenFolder;
|
||||||
|
|
||||||
|
public event Action<Keys> CmdKeyProcessed;
|
||||||
|
|
||||||
|
public enum Type
|
||||||
|
{
|
||||||
|
Main,
|
||||||
|
Sub,
|
||||||
|
Empty,
|
||||||
|
MaxReached
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsFadingIn
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return FadeForm.IsFadingIn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsFadingOut
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return FadeForm.IsFadingOut;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int Level = 0;
|
||||||
|
FadeForm FadeForm = null;
|
||||||
|
|
||||||
|
public Menu()
|
||||||
|
{
|
||||||
|
FadeForm = new FadeForm(this);
|
||||||
|
InitializeComponent();
|
||||||
|
SetDoubleBuffer(dgv, true);
|
||||||
|
|
||||||
|
DataGridViewCellStyle dgvCellStyle = new DataGridViewCellStyle();
|
||||||
|
dgvCellStyle.SelectionBackColor = MenuDefines.FileHover;
|
||||||
|
dgvCellStyle.SelectionForeColor = Color.Black;
|
||||||
|
this.dgv.DefaultCellStyle = dgvCellStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SetDoubleBuffer(Control ctl, bool DoubleBuffered)
|
||||||
|
{
|
||||||
|
typeof(Control).InvokeMember("DoubleBuffered",
|
||||||
|
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty,
|
||||||
|
null, ctl, new object[] { DoubleBuffered });
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTypeSub()
|
||||||
|
{
|
||||||
|
SetType(Type.Sub);
|
||||||
|
}
|
||||||
|
public void SetTypeEmpty()
|
||||||
|
{
|
||||||
|
SetType(Type.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetType(Type type)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case Type.Sub:
|
||||||
|
if (!labelTitle.IsDisposed)
|
||||||
|
{
|
||||||
|
labelTitle.Dispose();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Type.Empty:
|
||||||
|
SetTitle(Program.Translate("Folder empty"));
|
||||||
|
labelTitle.BackColor = MenuDefines.Background;
|
||||||
|
break;
|
||||||
|
case Type.MaxReached:
|
||||||
|
SetTitle($"Max {MenuDefines.MenusMax - 1} Menus");
|
||||||
|
labelTitle.BackColor = MenuDefines.Background;
|
||||||
|
break;
|
||||||
|
case Type.Main:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsVisible()
|
||||||
|
{
|
||||||
|
return Visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsActive(Form activeForm)
|
||||||
|
{
|
||||||
|
bool isActive = (this == activeForm);
|
||||||
|
return isActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsMouseOn(Point mousePosition)
|
||||||
|
{
|
||||||
|
bool isMouseOn = Visible && Opacity >= MenuDefines.OpacityHalfValue
|
||||||
|
&& ClientRectangle.Contains(
|
||||||
|
PointToClient(mousePosition));
|
||||||
|
return isMouseOn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataGridView GetDataGridView()
|
||||||
|
{
|
||||||
|
return dgv;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTitle(string title)
|
||||||
|
{
|
||||||
|
if (title.Length > MenuDefines.LengthMax)
|
||||||
|
{
|
||||||
|
title = $"{title.Substring(0, MenuDefines.LengthMax)}...";
|
||||||
|
}
|
||||||
|
labelTitle.Text = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FadeIn()
|
||||||
|
{
|
||||||
|
FadeForm.FadeIn();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FadeHalf()
|
||||||
|
{
|
||||||
|
FadeForm.FadeHalf();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FadeOut()
|
||||||
|
{
|
||||||
|
FadeForm.FadeOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AdjustLocationAndSize(Screen screen)
|
||||||
|
{
|
||||||
|
DataGridViewElementStates states = DataGridViewElementStates.None;
|
||||||
|
dgv.AutoResizeRows();
|
||||||
|
int height = (int)(dgv.Rows.GetRowsHeight(states));
|
||||||
|
int heightMax = screen.Bounds.Height -
|
||||||
|
new Taskbar().Size.Height -
|
||||||
|
labelTitle.Height;
|
||||||
|
if (height > heightMax)
|
||||||
|
{
|
||||||
|
height = heightMax;
|
||||||
|
}
|
||||||
|
dgv.Height = height;
|
||||||
|
AdjustDataGridViewSize();
|
||||||
|
int x = screen.Bounds.Right - Width;
|
||||||
|
int y = heightMax - Height + labelTitle.Height;
|
||||||
|
|
||||||
|
Location = new Point(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AdjustLocationAndSize(int heightMax, int widthPredecessors,
|
||||||
|
Menu menuPredecessor)
|
||||||
|
{
|
||||||
|
DataGridViewElementStates states = DataGridViewElementStates.None;
|
||||||
|
this.dgv.AutoResizeRows();
|
||||||
|
int height = this.dgv.Rows.GetRowsHeight(states);
|
||||||
|
if (height > heightMax)
|
||||||
|
{
|
||||||
|
height = heightMax;
|
||||||
|
}
|
||||||
|
this.dgv.Height = height;
|
||||||
|
|
||||||
|
AdjustDataGridViewSize();
|
||||||
|
int x = menuPredecessor.Location.X - Width +
|
||||||
|
(int)Math.Round(Program.ScalingFactor, 0,
|
||||||
|
MidpointRounding.AwayFromZero);
|
||||||
|
|
||||||
|
RowData trigger = (RowData)Tag;
|
||||||
|
DataGridView dgv = menuPredecessor.GetDataGridView();
|
||||||
|
if (dgv.Rows.Count > trigger.RowIndex)
|
||||||
|
{
|
||||||
|
var cellRectangle = dgv.GetCellDisplayRectangle(
|
||||||
|
0, trigger.RowIndex, false);
|
||||||
|
int y = menuPredecessor.Location.Y +
|
||||||
|
menuPredecessor.dgv.Location.Y +
|
||||||
|
cellRectangle.Top;
|
||||||
|
if ((y + Height) > heightMax)
|
||||||
|
{
|
||||||
|
y = heightMax - Height;
|
||||||
|
}
|
||||||
|
|
||||||
|
Location = new Point(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AdjustDataGridViewSize()
|
||||||
|
{
|
||||||
|
dgv.AutoResizeColumns();
|
||||||
|
bool scrollbarShown = false;
|
||||||
|
foreach (var scroll in dgv.Controls.OfType<VScrollBar>())
|
||||||
|
{
|
||||||
|
if (scroll.Visible)
|
||||||
|
{
|
||||||
|
scroll.Width = 120;
|
||||||
|
scrollbarShown = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int newWidth = dgv.Columns[0].Width + dgv.Columns[1].Width;
|
||||||
|
if (scrollbarShown)
|
||||||
|
{
|
||||||
|
newWidth += SystemInformation.VerticalScrollBarWidth;
|
||||||
|
}
|
||||||
|
dgv.Width = newWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dgv_MouseWheel(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
((HandledMouseEventArgs)e).Handled = true;
|
||||||
|
int scrollspeed = MenuDefines.Scrollspeed;
|
||||||
|
if (e.Delta < 0)
|
||||||
|
{
|
||||||
|
if (dgv.FirstDisplayedScrollingRowIndex < dgv.Rows.Count - scrollspeed)
|
||||||
|
{
|
||||||
|
dgv.FirstDisplayedScrollingRowIndex += scrollspeed;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dgv.FirstDisplayedScrollingRowIndex = dgv.Rows.Count - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (dgv.FirstDisplayedScrollingRowIndex > 0 + scrollspeed)
|
||||||
|
{
|
||||||
|
dgv.FirstDisplayedScrollingRowIndex -= scrollspeed;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dgv.FirstDisplayedScrollingRowIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dgv.PerformLayout();
|
||||||
|
MouseWheel.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Menu_Deactivate(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Deactivated?.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTitleColorDeactive()
|
||||||
|
{
|
||||||
|
this.labelTitle.ForeColor = Color.LightGray;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetTitleColorActive()
|
||||||
|
{
|
||||||
|
this.labelTitle.ForeColor = Color.Black;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LabelTitle_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.Button == MouseButtons.Left)
|
||||||
|
{
|
||||||
|
UserClickedOpenFolder?.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LabelTitle_MouseEnter(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.labelTitle.BackColor = MenuDefines.FileHover;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LabelTitle_MouseLeave(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.labelTitle.BackColor = MenuDefines.Background;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override CreateParams CreateParams
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
var Params = base.CreateParams;
|
||||||
|
Params.ExStyle |= 0x80;
|
||||||
|
return Params;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool ProcessCmdKey(ref Message msg, Keys keys)
|
||||||
|
{
|
||||||
|
switch (keys)
|
||||||
|
{
|
||||||
|
case Keys.Enter:
|
||||||
|
case Keys.Up:
|
||||||
|
case Keys.Down:
|
||||||
|
case Keys.Left:
|
||||||
|
case Keys.Right:
|
||||||
|
case Keys.Escape:
|
||||||
|
CmdKeyProcessed.Invoke(keys);
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return base.ProcessCmdKey(ref msg, keys);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
126
Controls/Menu.resx
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<metadata name="ColumnIcon.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="ColumnText.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
</root>
|
24
Controls/MenuData.cs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
using Clearcove.Logging;
|
||||||
|
using IWshRuntimeLibrary;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using SystemTrayMenu.Helper;
|
||||||
|
using TAFactory.IconPack;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Controls
|
||||||
|
{
|
||||||
|
public struct MenuData
|
||||||
|
{
|
||||||
|
public List<RowData> RowDatas;
|
||||||
|
public bool Valid;
|
||||||
|
public int Level;
|
||||||
|
};
|
||||||
|
}
|
480
Controls/RowData.cs
Normal file
|
@ -0,0 +1,480 @@
|
||||||
|
using Clearcove.Logging;
|
||||||
|
using IWshRuntimeLibrary;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using SystemTrayMenu.Helper;
|
||||||
|
using TAFactory.IconPack;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Controls
|
||||||
|
{
|
||||||
|
public class RowData : IDisposable
|
||||||
|
{
|
||||||
|
public FileInfo FileInfo;
|
||||||
|
public Icon Icon;
|
||||||
|
public bool ContainsMenu;
|
||||||
|
public bool IsContextMenuOpen;
|
||||||
|
public bool ResolvedFileNotFound;
|
||||||
|
public string WorkingDirectory;
|
||||||
|
public string Arguments;
|
||||||
|
|
||||||
|
public bool IsResolvedLnk;
|
||||||
|
public string TargetFilePath;
|
||||||
|
public string Text;
|
||||||
|
|
||||||
|
|
||||||
|
public Menu SubMenu;
|
||||||
|
public int RowIndex;
|
||||||
|
|
||||||
|
public bool IsSelected;
|
||||||
|
public bool IsSelectedByKeyboard;
|
||||||
|
|
||||||
|
public bool ReadIcon(bool isDirectory, bool isResolvedLnk, ref string resolvedLnkPath)
|
||||||
|
{
|
||||||
|
bool isLnkDirectory = false;
|
||||||
|
|
||||||
|
Logger log = new Logger(nameof(RowData));
|
||||||
|
|
||||||
|
if (isResolvedLnk)
|
||||||
|
{
|
||||||
|
if (Icon == null)
|
||||||
|
{
|
||||||
|
Icon = IconReader.GetFolderIcon(TargetFilePath,
|
||||||
|
IconReader.FolderType.Open, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (isDirectory)
|
||||||
|
{
|
||||||
|
Icon = IconReader.GetFolderIcon(TargetFilePath,
|
||||||
|
IconReader.FolderType.Closed, false);
|
||||||
|
}
|
||||||
|
else if (!string.IsNullOrEmpty(TargetFilePath))
|
||||||
|
{
|
||||||
|
bool handled = false;
|
||||||
|
string fileExtension = Path.GetExtension(TargetFilePath);
|
||||||
|
|
||||||
|
if (fileExtension == ".lnk")
|
||||||
|
{
|
||||||
|
handled = SetLnk(log, ref isLnkDirectory,
|
||||||
|
ref resolvedLnkPath);
|
||||||
|
}
|
||||||
|
else if (fileExtension == ".url")
|
||||||
|
{
|
||||||
|
handled = SetUrl(log);
|
||||||
|
}
|
||||||
|
else if (fileExtension == ".sln")
|
||||||
|
{
|
||||||
|
handled = SetSln(log);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!handled)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Icon = IconReader.GetFileIcon(TargetFilePath, false);
|
||||||
|
|
||||||
|
// other project -> fails sometimes
|
||||||
|
//icon = IconHelper.ExtractIcon(TargetFilePath, 0);
|
||||||
|
|
||||||
|
// standard way -> fails sometimes
|
||||||
|
//icon = Icon.ExtractAssociatedIcon(filePath);
|
||||||
|
|
||||||
|
// API Code Pack -> fails sometimes
|
||||||
|
//ShellFile shellFile = ShellFile.FromFilePath(filePath);
|
||||||
|
//Bitmap shellThumb = shellFile.Thumbnail.ExtraLargeBitmap;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.Info($"TargetFilePath:'{TargetFilePath}'");
|
||||||
|
log.Error($"{ex.ToString()}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return isLnkDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool SetLnk(Logger log, ref bool isLnkDirectory,
|
||||||
|
ref string resolvedLnkPath)
|
||||||
|
{
|
||||||
|
bool handled = false;
|
||||||
|
resolvedLnkPath = LnkHelper.ResolveShortcut(TargetFilePath);
|
||||||
|
if (LnkHelper.IsDirectory(resolvedLnkPath))
|
||||||
|
{
|
||||||
|
Icon = IconReader.GetFolderIcon(TargetFilePath,
|
||||||
|
IconReader.FolderType.Open, true);
|
||||||
|
handled = true;
|
||||||
|
isLnkDirectory = true;
|
||||||
|
}
|
||||||
|
else if (string.IsNullOrEmpty(resolvedLnkPath))
|
||||||
|
{
|
||||||
|
ResolvedFileNotFound = true;
|
||||||
|
log.Info($"Resolve '{TargetFilePath}' not possible => no icon");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
IWshShell shell = new WshShell();
|
||||||
|
var lnk = shell.CreateShortcut(TargetFilePath)
|
||||||
|
as IWshShortcut;
|
||||||
|
Arguments = lnk.Arguments;
|
||||||
|
WorkingDirectory = lnk.WorkingDirectory;
|
||||||
|
string iconLocation = lnk.IconLocation;
|
||||||
|
if (iconLocation.Length > 2)
|
||||||
|
{
|
||||||
|
iconLocation = iconLocation.Substring(0,
|
||||||
|
iconLocation.Length - 2);
|
||||||
|
if (System.IO.File.Exists(iconLocation))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Icon = Icon.ExtractAssociatedIcon(iconLocation);
|
||||||
|
handled = true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.Info($"iconLocation:'{iconLocation}'");
|
||||||
|
log.Error($"{ex.ToString()}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TargetFilePath = resolvedLnkPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetText($"{FileInfo.Name.Substring(0, FileInfo.Name.Length - 4)}");
|
||||||
|
|
||||||
|
return handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool SetUrl(Logger log)
|
||||||
|
{
|
||||||
|
bool handled = false;
|
||||||
|
string iconFile = string.Empty;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FileIni file = new FileIni(TargetFilePath);
|
||||||
|
iconFile = file.Value("IconFile", string.Empty);
|
||||||
|
if (string.IsNullOrEmpty(iconFile))
|
||||||
|
{
|
||||||
|
string browserPath = FileUrl.GetDefaultBrowserPath();
|
||||||
|
if (string.IsNullOrEmpty(browserPath))
|
||||||
|
{
|
||||||
|
log.Info($"No default browser found!");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Icon = IconReader.GetFileIcon(browserPath, false);
|
||||||
|
handled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (System.IO.File.Exists(iconFile))
|
||||||
|
{
|
||||||
|
Icon = Icon.ExtractAssociatedIcon(iconFile);
|
||||||
|
handled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
log.Info($"Resolve '{TargetFilePath}' not possible => no icon");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.Info($"TargetFilePath:'{TargetFilePath}', " +
|
||||||
|
$"iconFile:'{iconFile}'");
|
||||||
|
log.Error($"{ex.ToString()}");
|
||||||
|
}
|
||||||
|
|
||||||
|
SetText($"{FileInfo.Name.Substring(0, FileInfo.Name.Length - 4)}");
|
||||||
|
|
||||||
|
return handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("shell32.dll")]
|
||||||
|
static extern int FindExecutable(string lpFile, string lpDirectory, [Out] StringBuilder lpResult);
|
||||||
|
private bool SetSln(Logger log)
|
||||||
|
{
|
||||||
|
bool handled = false;
|
||||||
|
var executable = new StringBuilder(1024);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FindExecutable(TargetFilePath, string.Empty, executable);
|
||||||
|
// icon = IconReader.GetFileIcon(executable, false);
|
||||||
|
// e.g. VS 2019 icon, need another icom in imagelist
|
||||||
|
List<Icon> extractedIcons = IconHelper.ExtractAllIcons(
|
||||||
|
executable.ToString());
|
||||||
|
Icon = extractedIcons.Last();
|
||||||
|
handled = true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.Info($"TargetFilePath:'{TargetFilePath}', " +
|
||||||
|
$"executable:'{executable.ToString()}'");
|
||||||
|
log.Error($"{ex.ToString()}");
|
||||||
|
}
|
||||||
|
|
||||||
|
return handled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetText(string text)
|
||||||
|
{
|
||||||
|
//text = $" {text}";
|
||||||
|
if (text.Length > MenuDefines.LengthMax)
|
||||||
|
{
|
||||||
|
text = $"{text.Substring(0, MenuDefines.LengthMax)}...";
|
||||||
|
}
|
||||||
|
Text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#warning sort this class and check for duplicated
|
||||||
|
|
||||||
|
public event Action<object, EventArgs> OpenMenu;
|
||||||
|
|
||||||
|
public bool IsLoading = false;
|
||||||
|
public bool RestartLoading = false;
|
||||||
|
public BackgroundWorker Reading = new BackgroundWorker();
|
||||||
|
|
||||||
|
Icon icon = null;
|
||||||
|
//FontFamily fontFamily = new FontFamily("Segoe UI");
|
||||||
|
//Font font = new Font(new FontFamily("Segoe UI"), 12F,
|
||||||
|
// FontStyle.Regular, GraphicsUnit.Pixel);
|
||||||
|
|
||||||
|
WaitMenuOpen waitMenuOpen = new WaitMenuOpen();
|
||||||
|
bool resolvedFileNotFound = false;
|
||||||
|
|
||||||
|
bool disposed = false;
|
||||||
|
Logger log = new Logger(nameof(RowData));
|
||||||
|
internal string TargetFilePathOrig;
|
||||||
|
|
||||||
|
public RowData()
|
||||||
|
{
|
||||||
|
Reading.WorkerSupportsCancellation = true;
|
||||||
|
|
||||||
|
Initialize();
|
||||||
|
void Initialize()
|
||||||
|
{
|
||||||
|
//Margin = new Padding(0, 0, 0, 0);
|
||||||
|
//FlatAppearance.BorderSize = 0;
|
||||||
|
//UseVisualStyleBackColor = true;
|
||||||
|
//FlatStyle = FlatStyle.Flat;
|
||||||
|
//BackColor = MenuDefines.File;
|
||||||
|
//FlatAppearance.BorderColor = MenuDefines.File;
|
||||||
|
//Anchor = (AnchorStyles.Left | AnchorStyles.Right);
|
||||||
|
//AutoSize = true;
|
||||||
|
//AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||||
|
//Font = new Font(fontFamily, 7, FontStyle.Regular, GraphicsUnit.Pixel);
|
||||||
|
//ForeColor = Color.Black;
|
||||||
|
waitMenuOpen.DoOpen += WaitMenuOpen_DoOpen;
|
||||||
|
|
||||||
|
//MouseLeave += MenuButton_MouseLeave;
|
||||||
|
//void MenuButton_MouseLeave(object sender, EventArgs e)
|
||||||
|
//{
|
||||||
|
// if (Tag == null &&
|
||||||
|
// !isContextMenuOpen &&
|
||||||
|
// !ContainsMenu)
|
||||||
|
// {
|
||||||
|
// BackColor = MenuDefines.File;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
//MouseEnter += Menubutton_MouseEnter;
|
||||||
|
//void Menubutton_MouseEnter(object sender, EventArgs e)
|
||||||
|
//{
|
||||||
|
// if (Tag == null &&
|
||||||
|
// !ContainsMenu)
|
||||||
|
// {
|
||||||
|
// BackColor = MenuDefines.FileHover;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
//BackColorChanged += MenuButton_BackColorChanged;
|
||||||
|
//void MenuButton_BackColorChanged(object sender, EventArgs e)
|
||||||
|
//{
|
||||||
|
// FlatAppearance.BorderColor = BackColor;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//DoubleClick += MenuButton_DoubleClick;
|
||||||
|
public void DoubleClick()
|
||||||
|
{
|
||||||
|
if (ContainsMenu)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Process.Start("explorer.exe", TargetFilePath);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.Info($"TargetFilePath:'{TargetFilePath}', " +
|
||||||
|
$"=>DirectoryNotFound?");
|
||||||
|
log.Error($"{ex.ToString()}");
|
||||||
|
ex = new DirectoryNotFoundException();
|
||||||
|
MessageBox.Show(ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//MouseDown += MenuButton_MouseDown;
|
||||||
|
public void MouseDown(DataGridView dgv, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
if (ContainsMenu)
|
||||||
|
{
|
||||||
|
TriggerMenuOpener(); // Touchscreen
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsLoading)
|
||||||
|
{
|
||||||
|
waitMenuOpen.Click();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e == null ||
|
||||||
|
e.Button == MouseButtons.Left &&
|
||||||
|
!ContainsMenu)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//https://stackoverflow.com/questions/31627801/
|
||||||
|
Process p = new Process();
|
||||||
|
p.StartInfo = new ProcessStartInfo(TargetFilePath);
|
||||||
|
p.StartInfo.Arguments = Arguments;
|
||||||
|
p.StartInfo.WorkingDirectory = WorkingDirectory;
|
||||||
|
p.StartInfo.CreateNoWindow = true;
|
||||||
|
p.Start();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.Info($"TargetFilePath:'{ TargetFilePath}', " +
|
||||||
|
$"=>FileNotFound?");
|
||||||
|
log.Error($"{ex.ToString()}");
|
||||||
|
if (resolvedFileNotFound)
|
||||||
|
{
|
||||||
|
ex = new FileNotFoundException();
|
||||||
|
}
|
||||||
|
MessageBox.Show(ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e != null &&
|
||||||
|
e.Button == MouseButtons.Right &&
|
||||||
|
FileInfo != null &&
|
||||||
|
dgv.Rows.Count > RowIndex)
|
||||||
|
{
|
||||||
|
IsContextMenuOpen = true;
|
||||||
|
|
||||||
|
#warning is there any other possiblity to raise selection changed event? dataGridView.ClearSelection(); seems to overwrite selected
|
||||||
|
IsSelected = true;
|
||||||
|
dgv.Rows[RowIndex].Selected = true;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ShellContextMenu ctxMnu = new ShellContextMenu();
|
||||||
|
Point location = dgv.FindForm().Location;
|
||||||
|
Point point = new Point(
|
||||||
|
e.X + location.X + dgv.Location.X,
|
||||||
|
e.Y + location.Y + dgv.Location.Y);
|
||||||
|
if (ContainsMenu)
|
||||||
|
{
|
||||||
|
DirectoryInfo[] dir = new DirectoryInfo[1];
|
||||||
|
dir[0] = new DirectoryInfo(TargetFilePathOrig);
|
||||||
|
ctxMnu.ShowContextMenu(dir, point);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FileInfo[] arrFI = new FileInfo[1];
|
||||||
|
arrFI[0] = new FileInfo(TargetFilePathOrig);
|
||||||
|
ctxMnu.ShowContextMenu(arrFI, point);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show(ex.ToString() + TargetFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dgv.IsDisposed)
|
||||||
|
{
|
||||||
|
IsSelected = false;
|
||||||
|
dgv.Rows[RowIndex].Selected = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
IsContextMenuOpen = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MenuLoaded()
|
||||||
|
{
|
||||||
|
waitMenuOpen.MenuLoaded();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartMenuOpener()
|
||||||
|
{
|
||||||
|
if (ContainsMenu)
|
||||||
|
{
|
||||||
|
IsLoading = true;
|
||||||
|
waitMenuOpen.Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TriggerMenuOpener()
|
||||||
|
{
|
||||||
|
if (ContainsMenu && IsLoading)
|
||||||
|
{
|
||||||
|
waitMenuOpen.Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StopLoadMenuAndStartWaitToOpenIt()
|
||||||
|
{
|
||||||
|
if (ContainsMenu)
|
||||||
|
{
|
||||||
|
waitMenuOpen.Stop();
|
||||||
|
//IsLoading = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WaitMenuOpen_DoOpen()
|
||||||
|
{
|
||||||
|
IsLoading = false;
|
||||||
|
OpenMenu?.Invoke(this, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetData(RowData data, DataGridView dgv)
|
||||||
|
{
|
||||||
|
data.RowIndex = dgv.Rows.Add();
|
||||||
|
DataGridViewRow row = dgv.Rows[data.RowIndex];
|
||||||
|
|
||||||
|
if (Icon == null)
|
||||||
|
{
|
||||||
|
Icon = Properties.Resources.SystemTrayMenu;
|
||||||
|
}
|
||||||
|
DataGridViewImageCell cellIcon =
|
||||||
|
(DataGridViewImageCell)row.Cells[0];
|
||||||
|
cellIcon.Value = data.Icon;
|
||||||
|
|
||||||
|
DataGridViewTextBoxCell cellName =
|
||||||
|
(DataGridViewTextBoxCell)row.Cells[1];
|
||||||
|
cellName.Value = data.Text;
|
||||||
|
|
||||||
|
row.Tag = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!disposed)
|
||||||
|
{
|
||||||
|
icon?.Dispose();
|
||||||
|
waitMenuOpen.Dispose();
|
||||||
|
}
|
||||||
|
disposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
62
Helper/BringWindowToTop.cs
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Helper
|
||||||
|
{
|
||||||
|
public class WindowToTop
|
||||||
|
{
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
static extern bool IsIconic(IntPtr hWnd);
|
||||||
|
|
||||||
|
//DLL's for ForceForgroundWindow
|
||||||
|
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||||
|
private static extern IntPtr GetForegroundWindow();
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);
|
||||||
|
[DllImport("kernel32.dll")]
|
||||||
|
public static extern uint GetCurrentThreadId();
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach);
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
public static extern bool BringWindowToTop(IntPtr hWnd);
|
||||||
|
//[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
//public static extern bool BringWindowToTop(HandleRef hWnd);
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
|
||||||
|
|
||||||
|
const int SW_RESTORE = 9;
|
||||||
|
|
||||||
|
public static void ForceProcessToForeground(string processName)
|
||||||
|
{
|
||||||
|
Process[] proc = Process.GetProcessesByName(processName);
|
||||||
|
ForceForegroundWindow(proc[0].MainWindowHandle);
|
||||||
|
}
|
||||||
|
public static void ForceForegroundWindow(IntPtr hWnd)
|
||||||
|
{
|
||||||
|
uint foreThread = GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero);
|
||||||
|
uint appThread = GetCurrentThreadId();
|
||||||
|
const int SW_SHOW = 5;
|
||||||
|
|
||||||
|
int cmdShow = SW_SHOW;
|
||||||
|
|
||||||
|
if (IsIconic(hWnd))
|
||||||
|
{
|
||||||
|
cmdShow = SW_RESTORE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (foreThread != appThread)
|
||||||
|
{
|
||||||
|
AttachThreadInput(foreThread, appThread, true);
|
||||||
|
BringWindowToTop(hWnd);
|
||||||
|
ShowWindow(hWnd, cmdShow);
|
||||||
|
AttachThreadInput(foreThread, appThread, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BringWindowToTop(hWnd);
|
||||||
|
ShowWindow(hWnd, cmdShow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
169
Helper/FadeForm.cs
Normal file
|
@ -0,0 +1,169 @@
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu
|
||||||
|
{
|
||||||
|
public class FadeForm : IDisposable
|
||||||
|
{
|
||||||
|
public bool IsFadingIn
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return timerFadeIn.Enabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsFadingOut
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return timerFadeOut.Enabled;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer timerFadeIn = new Timer();
|
||||||
|
Timer timerFadeOut = new Timer();
|
||||||
|
Timer timerFadeHalf = new Timer();
|
||||||
|
|
||||||
|
Form form = null;
|
||||||
|
bool stopFadeInByHalf = false;
|
||||||
|
|
||||||
|
public FadeForm(Form form)
|
||||||
|
{
|
||||||
|
this.form = form;
|
||||||
|
timerFadeIn.Interval = MenuDefines.IntervalFade;
|
||||||
|
timerFadeOut.Interval = MenuDefines.IntervalFade;
|
||||||
|
timerFadeHalf.Interval = MenuDefines.IntervalFade;
|
||||||
|
timerFadeIn.Tick += TimerFadeIn_Tick;
|
||||||
|
timerFadeOut.Tick += TimerFadeOut_Tick;
|
||||||
|
timerFadeHalf.Tick += TimerFadeHalf_Tick;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Dispose(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing)
|
||||||
|
{
|
||||||
|
timerFadeIn.Dispose();
|
||||||
|
timerFadeOut.Dispose();
|
||||||
|
timerFadeHalf.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FadeOut()
|
||||||
|
{
|
||||||
|
timerFadeHalf.Stop();
|
||||||
|
timerFadeIn.Stop();
|
||||||
|
timerFadeOut.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FadeHalf()
|
||||||
|
{
|
||||||
|
if (form.Visible &&
|
||||||
|
form.Opacity < MenuDefines.OpacityHalfValue)
|
||||||
|
{
|
||||||
|
stopFadeInByHalf = true;
|
||||||
|
timerFadeOut.Stop();
|
||||||
|
timerFadeHalf.Stop();
|
||||||
|
timerFadeIn.Start();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
timerFadeIn.Stop();
|
||||||
|
timerFadeOut.Stop();
|
||||||
|
timerFadeHalf.Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FadeIn()
|
||||||
|
{
|
||||||
|
stopFadeInByHalf = false;
|
||||||
|
if (form.Visible)
|
||||||
|
{
|
||||||
|
timerFadeOut.Stop();
|
||||||
|
timerFadeHalf.Stop();
|
||||||
|
timerFadeIn.Start();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowInactiveTopmost(form);
|
||||||
|
timerFadeOut.Stop();
|
||||||
|
timerFadeIn.Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TimerFadeIn_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (form.Opacity >= 1 ||
|
||||||
|
(stopFadeInByHalf && form.Opacity >= MenuDefines.OpacityHalfValue))
|
||||||
|
{
|
||||||
|
if (stopFadeInByHalf)
|
||||||
|
{
|
||||||
|
form.Opacity = MenuDefines.OpacityHalfValue;
|
||||||
|
stopFadeInByHalf = false;
|
||||||
|
}
|
||||||
|
timerFadeIn.Stop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
form.Opacity += MenuDefines.OpacityInStep;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TimerFadeOut_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (form.Opacity < 0.01)
|
||||||
|
{
|
||||||
|
form.Hide();
|
||||||
|
timerFadeOut.Stop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
form.Opacity -= MenuDefines.OpacityOutStep;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void TimerFadeHalf_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (form.Opacity <= MenuDefines.OpacityHalfValue)
|
||||||
|
{
|
||||||
|
form.Opacity = MenuDefines.OpacityHalfValue;
|
||||||
|
timerFadeHalf.Stop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
form.Opacity -= MenuDefines.OpacityHalfStep;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private const int SW_SHOWNOACTIVATE = 4;
|
||||||
|
private const int HWND_TOPMOST = -1;
|
||||||
|
private const uint SWP_NOACTIVATE = 0x0010;
|
||||||
|
|
||||||
|
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
|
||||||
|
static extern bool SetWindowPos(
|
||||||
|
int hWnd, // Window handle
|
||||||
|
int hWndInsertAfter, // Placement-order handle
|
||||||
|
int X, // Horizontal position
|
||||||
|
int Y, // Vertical position
|
||||||
|
int cx, // Width
|
||||||
|
int cy, // Height
|
||||||
|
uint uFlags); // Window positioning flags
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
|
||||||
|
|
||||||
|
static void ShowInactiveTopmost(Form frm)
|
||||||
|
{
|
||||||
|
ShowWindow(frm.Handle, SW_SHOWNOACTIVATE);
|
||||||
|
SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST,
|
||||||
|
frm.Left, frm.Top, frm.Width, frm.Height,
|
||||||
|
SWP_NOACTIVATE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
27
Helper/File/FileIni.cs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Helper
|
||||||
|
{
|
||||||
|
public class FileIni
|
||||||
|
{
|
||||||
|
Dictionary<string, string> values;
|
||||||
|
public FileIni(string path)
|
||||||
|
{
|
||||||
|
values = File.ReadLines(path)
|
||||||
|
.Where(line => (!String.IsNullOrWhiteSpace(line) && !line.StartsWith("#")))
|
||||||
|
.Select(line => line.Split(new char[] { '=' }, 2, 0))
|
||||||
|
.ToDictionary(parts => parts[0].Trim(), parts => parts.Length > 1 ? parts[1].Trim() : null);
|
||||||
|
}
|
||||||
|
public string Value(string name, string value = null)
|
||||||
|
{
|
||||||
|
if (values != null && values.ContainsKey(name))
|
||||||
|
{
|
||||||
|
return values[name];
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
218
Helper/File/FileLnk.cs
Normal file
|
@ -0,0 +1,218 @@
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu
|
||||||
|
{
|
||||||
|
class LnkHelper
|
||||||
|
{
|
||||||
|
#region Signitures imported from http://pinvoke.net
|
||||||
|
|
||||||
|
[DllImport("shfolder.dll", CharSet = CharSet.Auto)]
|
||||||
|
internal static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);
|
||||||
|
|
||||||
|
[Flags()]
|
||||||
|
enum SLGP_FLAGS
|
||||||
|
{
|
||||||
|
/// <summary>Retrieves the standard short (8.3 format) file name</summary>
|
||||||
|
SLGP_SHORTPATH = 0x1,
|
||||||
|
/// <summary>Retrieves the Universal Naming Convention (UNC) path name of the file</summary>
|
||||||
|
SLGP_UNCPRIORITY = 0x2,
|
||||||
|
/// <summary>Retrieves the raw path name. A raw path is something that might not exist and may include environment variables that need to be expanded</summary>
|
||||||
|
SLGP_RAWPATH = 0x4
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
||||||
|
struct WIN32_FIND_DATAW
|
||||||
|
{
|
||||||
|
public uint dwFileAttributes;
|
||||||
|
public long ftCreationTime;
|
||||||
|
public long ftLastAccessTime;
|
||||||
|
public long ftLastWriteTime;
|
||||||
|
public uint nFileSizeHigh;
|
||||||
|
public uint nFileSizeLow;
|
||||||
|
public uint dwReserved0;
|
||||||
|
public uint dwReserved1;
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
|
||||||
|
public string cFileName;
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 14)]
|
||||||
|
public string cAlternateFileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags()]
|
||||||
|
enum SLR_FLAGS
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Do not display a dialog box if the link cannot be resolved. When SLR_NO_UI is set,
|
||||||
|
/// the high-order word of fFlags can be set to a time-out value that specifies the
|
||||||
|
/// maximum amount of time to be spent resolving the link. The function returns if the
|
||||||
|
/// link cannot be resolved within the time-out duration. If the high-order word is set
|
||||||
|
/// to zero, the time-out duration will be set to the default value of 3,000 milliseconds
|
||||||
|
/// (3 seconds). To specify a value, set the high word of fFlags to the desired time-out
|
||||||
|
/// duration, in milliseconds.
|
||||||
|
/// </summary>
|
||||||
|
SLR_NO_UI = 0x1,
|
||||||
|
/// <summary>Obsolete and no longer used</summary>
|
||||||
|
SLR_ANY_MATCH = 0x2,
|
||||||
|
/// <summary>If the link object has changed, update its path and list of identifiers.
|
||||||
|
/// If SLR_UPDATE is set, you do not need to call IPersistFile::IsDirty to determine
|
||||||
|
/// whether or not the link object has changed.</summary>
|
||||||
|
SLR_UPDATE = 0x4,
|
||||||
|
/// <summary>Do not update the link information</summary>
|
||||||
|
SLR_NOUPDATE = 0x8,
|
||||||
|
/// <summary>Do not execute the search heuristics</summary>
|
||||||
|
SLR_NOSEARCH = 0x10,
|
||||||
|
/// <summary>Do not use distributed link tracking</summary>
|
||||||
|
SLR_NOTRACK = 0x20,
|
||||||
|
/// <summary>Disable distributed link tracking. By default, distributed link tracking tracks
|
||||||
|
/// removable media across multiple devices based on the volume name. It also uses the
|
||||||
|
/// Universal Naming Convention (UNC) path to track remote file systems whose drive letter
|
||||||
|
/// has changed. Setting SLR_NOLINKINFO disables both types of tracking.</summary>
|
||||||
|
SLR_NOLINKINFO = 0x40,
|
||||||
|
/// <summary>Call the Microsoft Windows Installer</summary>
|
||||||
|
SLR_INVOKE_MSI = 0x80
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>The IShellLink interface allows Shell links to be created, modified, and resolved</summary>
|
||||||
|
[ComImport(), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("000214F9-0000-0000-C000-000000000046")]
|
||||||
|
interface IShellLinkW
|
||||||
|
{
|
||||||
|
/// <summary>Retrieves the path and file name of a Shell link object</summary>
|
||||||
|
void GetPath([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszFile, int cchMaxPath, out WIN32_FIND_DATAW pfd, SLGP_FLAGS fFlags);
|
||||||
|
/// <summary>Retrieves the list of item identifiers for a Shell link object</summary>
|
||||||
|
void GetIDList(out IntPtr ppidl);
|
||||||
|
/// <summary>Sets the pointer to an item identifier list (PIDL) for a Shell link object.</summary>
|
||||||
|
void SetIDList(IntPtr pidl);
|
||||||
|
/// <summary>Retrieves the description string for a Shell link object</summary>
|
||||||
|
void GetDescription([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszName, int cchMaxName);
|
||||||
|
/// <summary>Sets the description for a Shell link object. The description can be any application-defined string</summary>
|
||||||
|
void SetDescription([MarshalAs(UnmanagedType.LPWStr)] string pszName);
|
||||||
|
/// <summary>Retrieves the name of the working directory for a Shell link object</summary>
|
||||||
|
void GetWorkingDirectory([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszDir, int cchMaxPath);
|
||||||
|
/// <summary>Sets the name of the working directory for a Shell link object</summary>
|
||||||
|
void SetWorkingDirectory([MarshalAs(UnmanagedType.LPWStr)] string pszDir);
|
||||||
|
/// <summary>Retrieves the command-line arguments associated with a Shell link object</summary>
|
||||||
|
void GetArguments([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszArgs, int cchMaxPath);
|
||||||
|
/// <summary>Sets the command-line arguments for a Shell link object</summary>
|
||||||
|
void SetArguments([MarshalAs(UnmanagedType.LPWStr)] string pszArgs);
|
||||||
|
/// <summary>Retrieves the hot key for a Shell link object</summary>
|
||||||
|
void GetHotkey(out short pwHotkey);
|
||||||
|
/// <summary>Sets a hot key for a Shell link object</summary>
|
||||||
|
void SetHotkey(short wHotkey);
|
||||||
|
/// <summary>Retrieves the show command for a Shell link object</summary>
|
||||||
|
void GetShowCmd(out int piShowCmd);
|
||||||
|
/// <summary>Sets the show command for a Shell link object. The show command sets the initial show state of the window.</summary>
|
||||||
|
void SetShowCmd(int iShowCmd);
|
||||||
|
/// <summary>Retrieves the location (path and index) of the icon for a Shell link object</summary>
|
||||||
|
void GetIconLocation([Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pszIconPath,
|
||||||
|
int cchIconPath, out int piIcon);
|
||||||
|
/// <summary>Sets the location (path and index) of the icon for a Shell link object</summary>
|
||||||
|
void SetIconLocation([MarshalAs(UnmanagedType.LPWStr)] string pszIconPath, int iIcon);
|
||||||
|
/// <summary>Sets the relative path to the Shell link object</summary>
|
||||||
|
void SetRelativePath([MarshalAs(UnmanagedType.LPWStr)] string pszPathRel, int dwReserved);
|
||||||
|
/// <summary>Attempts to find the target of a Shell link, even if it has been moved or renamed</summary>
|
||||||
|
void Resolve(IntPtr hwnd, SLR_FLAGS fFlags);
|
||||||
|
/// <summary>Sets the path and file name of a Shell link object</summary>
|
||||||
|
void SetPath([MarshalAs(UnmanagedType.LPWStr)] string pszFile);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[ComImport, Guid("0000010c-0000-0000-c000-000000000046"),
|
||||||
|
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||||
|
public interface IPersist
|
||||||
|
{
|
||||||
|
[PreserveSig]
|
||||||
|
void GetClassID(out Guid pClassID);
|
||||||
|
}
|
||||||
|
|
||||||
|
[ComImport, Guid("0000010b-0000-0000-C000-000000000046"),
|
||||||
|
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
||||||
|
public interface IPersistFile : IPersist
|
||||||
|
{
|
||||||
|
new void GetClassID(out Guid pClassID);
|
||||||
|
[PreserveSig]
|
||||||
|
int IsDirty();
|
||||||
|
|
||||||
|
[PreserveSig]
|
||||||
|
void Load([In, MarshalAs(UnmanagedType.LPWStr)]
|
||||||
|
string pszFileName, uint dwMode);
|
||||||
|
|
||||||
|
[PreserveSig]
|
||||||
|
void Save([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName,
|
||||||
|
[In, MarshalAs(UnmanagedType.Bool)] bool fRemember);
|
||||||
|
|
||||||
|
[PreserveSig]
|
||||||
|
void SaveCompleted([In, MarshalAs(UnmanagedType.LPWStr)] string pszFileName);
|
||||||
|
|
||||||
|
[PreserveSig]
|
||||||
|
void GetCurFile([In, MarshalAs(UnmanagedType.LPWStr)] string ppszFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint STGM_READ = 0;
|
||||||
|
const int MAX_PATH = 260;
|
||||||
|
|
||||||
|
// CLSID_ShellLink from ShlGuid.h
|
||||||
|
[
|
||||||
|
ComImport(),
|
||||||
|
Guid("00021401-0000-0000-C000-000000000046")
|
||||||
|
]
|
||||||
|
public class ShellLink
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public static string ResolveShortcut(string filename)
|
||||||
|
{
|
||||||
|
ShellLink link = new ShellLink();
|
||||||
|
((IPersistFile)link).Load(filename, STGM_READ);
|
||||||
|
// TODO: if I can get hold of the hwnd call resolve first. This handles moved and renamed files.
|
||||||
|
// ((IShellLinkW)link).Resolve(hwnd, 0)
|
||||||
|
StringBuilder sb = new StringBuilder(MAX_PATH);
|
||||||
|
WIN32_FIND_DATAW data = new WIN32_FIND_DATAW();
|
||||||
|
((IShellLinkW)link).GetPath(sb, sb.Capacity, out data, 0);
|
||||||
|
string resolvedPath = sb.ToString();
|
||||||
|
if (!IsDirectory(resolvedPath) &&
|
||||||
|
!File.Exists(resolvedPath))
|
||||||
|
{
|
||||||
|
//For some lnk e.g. WinRar SkypeForBuisness
|
||||||
|
//resolved path wrong to Program Files (x86)
|
||||||
|
resolvedPath = ReplaceFirst(resolvedPath,
|
||||||
|
@"\Program Files (x86)\",
|
||||||
|
@"\Program Files\");
|
||||||
|
if (!File.Exists(resolvedPath))
|
||||||
|
{
|
||||||
|
resolvedPath = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resolvedPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsDirectory(string filePath)
|
||||||
|
{
|
||||||
|
bool isDirectory = false;
|
||||||
|
if (Directory.Exists(filePath))
|
||||||
|
{
|
||||||
|
FileAttributes attr = File.GetAttributes(filePath);
|
||||||
|
if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
|
||||||
|
{
|
||||||
|
isDirectory = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return isDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ReplaceFirst(string text, string search, string replace)
|
||||||
|
{
|
||||||
|
int pos = text.IndexOf(search);
|
||||||
|
if (pos < 0)
|
||||||
|
{
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
return text.Substring(0, pos) + replace +
|
||||||
|
text.Substring(pos + search.Length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
65
Helper/File/FileUrl.cs
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
using Microsoft.Win32;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Helper
|
||||||
|
{
|
||||||
|
public class FileUrl
|
||||||
|
{
|
||||||
|
private static string browserPath = string.Empty;
|
||||||
|
public static string GetDefaultBrowserPath()
|
||||||
|
{
|
||||||
|
string urlAssociation = @"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http";
|
||||||
|
string browserPathKey = @"$BROWSER$\shell\open\command";
|
||||||
|
|
||||||
|
RegistryKey userChoiceKey = null;
|
||||||
|
string browserPath = FileUrl.browserPath;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(browserPath))
|
||||||
|
{
|
||||||
|
//Read default browser path from userChoiceLKey
|
||||||
|
userChoiceKey = Registry.CurrentUser.OpenSubKey(urlAssociation + @"\UserChoice", false);
|
||||||
|
|
||||||
|
//If user choice was not found, try machine default
|
||||||
|
if (userChoiceKey == null)
|
||||||
|
{
|
||||||
|
//Read default browser path from Win XP registry key
|
||||||
|
var browserKey = Registry.ClassesRoot.OpenSubKey(@"HTTP\shell\open\command", false);
|
||||||
|
|
||||||
|
//If browser path wasn’t found, try Win Vista (and newer) registry key
|
||||||
|
if (browserKey == null)
|
||||||
|
{
|
||||||
|
browserKey =
|
||||||
|
Registry.CurrentUser.OpenSubKey(
|
||||||
|
urlAssociation, false);
|
||||||
|
}
|
||||||
|
var path = CleanifyBrowserPath(browserKey.GetValue(null) as string);
|
||||||
|
browserKey.Close();
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// user defined browser choice was found
|
||||||
|
string progId = (userChoiceKey.GetValue("ProgId").ToString());
|
||||||
|
userChoiceKey.Close();
|
||||||
|
|
||||||
|
// now look up the path of the executable
|
||||||
|
string concreteBrowserKey = browserPathKey.Replace("$BROWSER$", progId);
|
||||||
|
var kp = Registry.ClassesRoot.OpenSubKey(concreteBrowserKey, false);
|
||||||
|
browserPath = CleanifyBrowserPath(kp.GetValue(null) as string);
|
||||||
|
kp.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
FileUrl.browserPath = browserPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
return browserPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string CleanifyBrowserPath(string p)
|
||||||
|
{
|
||||||
|
string[] url = p.Split('"');
|
||||||
|
string clean = url[1];
|
||||||
|
return clean;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
299
Helper/File/IconReader.cs
Normal file
|
@ -0,0 +1,299 @@
|
||||||
|
using Clearcove.Logging;
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Helper
|
||||||
|
{
|
||||||
|
// from https://www.codeproject.com/Articles/2532/Obtaining-and-managing-file-and-folder-icons-using
|
||||||
|
// added ImageList_GetIcon
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Provides static methods to read system icons for both folders and files.
|
||||||
|
/// </summary>
|
||||||
|
/// <example>
|
||||||
|
/// <code>IconReader.GetFileIcon("c:\\general.xls");</code>
|
||||||
|
/// </example>
|
||||||
|
public class IconReader
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Options to specify the size of icons to return.
|
||||||
|
/// </summary>
|
||||||
|
public enum IconSize
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Specify large icon - 32 pixels by 32 pixels.
|
||||||
|
/// </summary>
|
||||||
|
Large = 0,
|
||||||
|
/// <summary>
|
||||||
|
/// Specify small icon - 16 pixels by 16 pixels.
|
||||||
|
/// </summary>
|
||||||
|
Small = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Options to specify whether folders should be in the open or closed state.
|
||||||
|
/// </summary>
|
||||||
|
public enum FolderType
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Specify open folder.
|
||||||
|
/// </summary>
|
||||||
|
Open = 0,
|
||||||
|
/// <summary>
|
||||||
|
/// Specify closed folder.
|
||||||
|
/// </summary>
|
||||||
|
Closed = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns an icon for a given file - indicated by the name parameter.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>System.Drawing.Icon</returns>
|
||||||
|
public static Icon GetFileIcon(string filePath, bool linkOverlay,
|
||||||
|
IconSize size = IconSize.Small)
|
||||||
|
{
|
||||||
|
Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO();
|
||||||
|
uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_SYSICONINDEX;
|
||||||
|
|
||||||
|
//MH: Removed, otherwise wrong icon
|
||||||
|
// | Shell32.SHGFI_USEFILEATTRIBUTES ;
|
||||||
|
|
||||||
|
if (true == linkOverlay) flags += Shell32.SHGFI_LINKOVERLAY;
|
||||||
|
|
||||||
|
/* Check the size specified for return. */
|
||||||
|
if (IconSize.Small == size)
|
||||||
|
{
|
||||||
|
flags += Shell32.SHGFI_SMALLICON;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flags += Shell32.SHGFI_LARGEICON;
|
||||||
|
}
|
||||||
|
|
||||||
|
IntPtr hImageList = Shell32.SHGetFileInfo(filePath,
|
||||||
|
Shell32.FILE_ATTRIBUTE_NORMAL,
|
||||||
|
ref shfi,
|
||||||
|
(uint)System.Runtime.InteropServices.Marshal.SizeOf(shfi),
|
||||||
|
flags);
|
||||||
|
|
||||||
|
Icon icon = null;
|
||||||
|
if (linkOverlay)
|
||||||
|
{
|
||||||
|
//MH: Added try catch, FromHandle can fail
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Copy (clone) the returned icon to a new object, thus allowing us to clean-up properly
|
||||||
|
icon = (Icon)Icon.FromHandle(shfi.hIcon).Clone();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger log = new Logger(nameof(IconReader));
|
||||||
|
log.Info($"filePath:'{filePath}'");
|
||||||
|
log.Error($"{ex.ToString()}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//MH: Added ImageList_GetIcon, to get the correct icon from .ink without overlay
|
||||||
|
IntPtr hIcon = Shell32.ImageList_GetIcon(hImageList, shfi.iIcon, Shell32.ILD_TRANSPARENT);
|
||||||
|
|
||||||
|
//MH: Added try catch, FromHandle can fail
|
||||||
|
try
|
||||||
|
{
|
||||||
|
icon = (Icon)Icon.FromHandle(hIcon).Clone();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger log = new Logger(nameof(IconReader));
|
||||||
|
log.Info($"filePath:'{filePath}'");
|
||||||
|
log.Error($"{ex.ToString()}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Additionally Cleanup
|
||||||
|
User32.DestroyIcon(hIcon);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cleanup
|
||||||
|
User32.DestroyIcon(shfi.hIcon);
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Icon GetFolderIcon(string directoryPath,
|
||||||
|
FolderType folderType, bool linkOverlay,
|
||||||
|
IconSize size = IconSize.Small)
|
||||||
|
{
|
||||||
|
// Need to add size check, although errors generated at present!
|
||||||
|
//uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES;
|
||||||
|
|
||||||
|
//MH: Removed SHGFI_USEFILEATTRIBUTES, otherwise was wrong folder icon
|
||||||
|
uint flags = Shell32.SHGFI_ICON; // | Shell32.SHGFI_USEFILEATTRIBUTES;
|
||||||
|
|
||||||
|
if (true == linkOverlay) flags += Shell32.SHGFI_LINKOVERLAY;
|
||||||
|
|
||||||
|
if (FolderType.Open == folderType)
|
||||||
|
{
|
||||||
|
flags += Shell32.SHGFI_OPENICON;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IconSize.Small == size)
|
||||||
|
{
|
||||||
|
flags += Shell32.SHGFI_SMALLICON;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flags += Shell32.SHGFI_LARGEICON;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the folder icon
|
||||||
|
Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO();
|
||||||
|
Shell32.SHGetFileInfo(directoryPath,
|
||||||
|
Shell32.FILE_ATTRIBUTE_DIRECTORY,
|
||||||
|
ref shfi,
|
||||||
|
(uint)Marshal.SizeOf(shfi),
|
||||||
|
flags);
|
||||||
|
|
||||||
|
//MH: Added try catch, FromHandle can fail
|
||||||
|
Icon icon = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Icon.FromHandle(shfi.hIcon); // Load the icon from an HICON handle
|
||||||
|
|
||||||
|
// Now clone the icon, so that it can be successfully stored in an ImageList
|
||||||
|
icon = (Icon)Icon.FromHandle(shfi.hIcon).Clone();
|
||||||
|
|
||||||
|
User32.DestroyIcon(shfi.hIcon); // Cleanup
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger log = new Logger(nameof(IconReader));
|
||||||
|
log.Info($"directoryPath:'{directoryPath}'");
|
||||||
|
log.Error($"{ex.ToString()}");
|
||||||
|
}
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Wraps necessary Shell32.dll structures and functions required to retrieve Icon Handles using SHGetFileInfo. Code
|
||||||
|
/// courtesy of MSDN Cold Rooster Consulting case study.
|
||||||
|
/// </summary>
|
||||||
|
///
|
||||||
|
|
||||||
|
// This code has been left largely untouched from that in the CRC example. The main changes have been moving
|
||||||
|
// the icon reading code over to the IconReader type.
|
||||||
|
public class Shell32
|
||||||
|
{
|
||||||
|
|
||||||
|
public const int MAX_PATH = 256;
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct SHITEMID
|
||||||
|
{
|
||||||
|
public ushort cb;
|
||||||
|
[MarshalAs(UnmanagedType.LPArray)]
|
||||||
|
public byte[] abID;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct ITEMIDLIST
|
||||||
|
{
|
||||||
|
public SHITEMID mkid;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct BROWSEINFO
|
||||||
|
{
|
||||||
|
public IntPtr hwndOwner;
|
||||||
|
public IntPtr pidlRoot;
|
||||||
|
public IntPtr pszDisplayName;
|
||||||
|
[MarshalAs(UnmanagedType.LPTStr)]
|
||||||
|
public string lpszTitle;
|
||||||
|
public uint ulFlags;
|
||||||
|
public IntPtr lpfn;
|
||||||
|
public int lParam;
|
||||||
|
public IntPtr iImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Browsing for directory.
|
||||||
|
public const uint BIF_RETURNONLYFSDIRS = 0x0001;
|
||||||
|
public const uint BIF_DONTGOBELOWDOMAIN = 0x0002;
|
||||||
|
public const uint BIF_STATUSTEXT = 0x0004;
|
||||||
|
public const uint BIF_RETURNFSANCESTORS = 0x0008;
|
||||||
|
public const uint BIF_EDITBOX = 0x0010;
|
||||||
|
public const uint BIF_VALIDATE = 0x0020;
|
||||||
|
public const uint BIF_NEWDIALOGSTYLE = 0x0040;
|
||||||
|
public const uint BIF_USENEWUI = (BIF_NEWDIALOGSTYLE | BIF_EDITBOX);
|
||||||
|
public const uint BIF_BROWSEINCLUDEURLS = 0x0080;
|
||||||
|
public const uint BIF_BROWSEFORCOMPUTER = 0x1000;
|
||||||
|
public const uint BIF_BROWSEFORPRINTER = 0x2000;
|
||||||
|
public const uint BIF_BROWSEINCLUDEFILES = 0x4000;
|
||||||
|
public const uint BIF_SHAREABLE = 0x8000;
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct SHFILEINFO
|
||||||
|
{
|
||||||
|
public const int NAMESIZE = 80;
|
||||||
|
public IntPtr hIcon;
|
||||||
|
public int iIcon;
|
||||||
|
public uint dwAttributes;
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
|
||||||
|
public string szDisplayName;
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = NAMESIZE)]
|
||||||
|
public string szTypeName;
|
||||||
|
};
|
||||||
|
|
||||||
|
public const uint SHGFI_ICON = 0x000000100; // get icon
|
||||||
|
public const uint SHGFI_DISPLAYNAME = 0x000000200; // get display name
|
||||||
|
public const uint SHGFI_TYPENAME = 0x000000400; // get type name
|
||||||
|
public const uint SHGFI_ATTRIBUTES = 0x000000800; // get attributes
|
||||||
|
public const uint SHGFI_ICONLOCATION = 0x000001000; // get icon location
|
||||||
|
public const uint SHGFI_EXETYPE = 0x000002000; // return exe type
|
||||||
|
public const uint SHGFI_SYSICONINDEX = 0x000004000; // get system icon index
|
||||||
|
public const uint SHGFI_LINKOVERLAY = 0x000008000; // put a link overlay on icon
|
||||||
|
public const uint SHGFI_SELECTED = 0x000010000; // show icon in selected state
|
||||||
|
public const uint SHGFI_ATTR_SPECIFIED = 0x000020000; // get only specified attributes
|
||||||
|
public const uint SHGFI_LARGEICON = 0x000000000; // get large icon
|
||||||
|
public const uint SHGFI_SMALLICON = 0x000000001; // get small icon
|
||||||
|
public const uint SHGFI_OPENICON = 0x000000002; // get open icon
|
||||||
|
public const uint SHGFI_SHELLICONSIZE = 0x000000004; // get shell size icon
|
||||||
|
public const uint SHGFI_PIDL = 0x000000008; // pszPath is a pidl
|
||||||
|
public const uint SHGFI_USEFILEATTRIBUTES = 0x000000010; // use passed dwFileAttribute
|
||||||
|
public const uint SHGFI_ADDOVERLAYS = 0x000000020; // apply the appropriate overlays
|
||||||
|
public const uint SHGFI_OVERLAYINDEX = 0x000000040; // Get the index of the overlay
|
||||||
|
|
||||||
|
public const uint FILE_ATTRIBUTE_DIRECTORY = 0x00000010;
|
||||||
|
public const uint FILE_ATTRIBUTE_NORMAL = 0x00000080;
|
||||||
|
|
||||||
|
public const int ILD_TRANSPARENT = 0x00000001;
|
||||||
|
|
||||||
|
[DllImport("Shell32.dll")]
|
||||||
|
public static extern IntPtr SHGetFileInfo(
|
||||||
|
string pszPath,
|
||||||
|
uint dwFileAttributes,
|
||||||
|
ref SHFILEINFO psfi,
|
||||||
|
uint cbFileInfo,
|
||||||
|
uint uFlags
|
||||||
|
);
|
||||||
|
|
||||||
|
[DllImport("comctl32")]
|
||||||
|
internal static extern IntPtr ImageList_GetIcon(
|
||||||
|
IntPtr himl,
|
||||||
|
int i,
|
||||||
|
int flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Wraps necessary functions imported from User32.dll. Code courtesy of MSDN Cold Rooster Consulting example.
|
||||||
|
/// </summary>
|
||||||
|
public class User32
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Provides access to function required to delete handle. This method is used internally
|
||||||
|
/// and is not required to be called separately.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="hIcon">Pointer to icon handle.</param>
|
||||||
|
/// <returns>N/A</returns>
|
||||||
|
[DllImport("User32.dll")]
|
||||||
|
public static extern int DestroyIcon(IntPtr hIcon);
|
||||||
|
}
|
||||||
|
}
|
148
Helper/KeyboardHook.cs
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Helper
|
||||||
|
{
|
||||||
|
public sealed class KeyboardHook : IDisposable
|
||||||
|
{
|
||||||
|
// Registers a hot key with Windows.
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
|
||||||
|
// Unregisters the hot key with Windows.
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents the window that is used internally to get the messages.
|
||||||
|
/// </summary>
|
||||||
|
private class Window : NativeWindow, IDisposable
|
||||||
|
{
|
||||||
|
private static int WM_HOTKEY = 0x0312;
|
||||||
|
|
||||||
|
public Window()
|
||||||
|
{
|
||||||
|
// create the handle for the window.
|
||||||
|
this.CreateHandle(new CreateParams());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overridden to get the notifications.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="m"></param>
|
||||||
|
protected override void WndProc(ref Message m)
|
||||||
|
{
|
||||||
|
base.WndProc(ref m);
|
||||||
|
|
||||||
|
// check if we got a hot key pressed.
|
||||||
|
if (m.Msg == WM_HOTKEY)
|
||||||
|
{
|
||||||
|
// get the keys.
|
||||||
|
Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
|
||||||
|
KeyboardHookModifierKeys modifier = (KeyboardHookModifierKeys)((int)m.LParam & 0xFFFF);
|
||||||
|
|
||||||
|
// invoke the event to notify the parent.
|
||||||
|
if (KeyPressed != null)
|
||||||
|
KeyPressed(this, new KeyPressedEventArgs(modifier, key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public event EventHandler<KeyPressedEventArgs> KeyPressed;
|
||||||
|
|
||||||
|
#region IDisposable Members
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
this.DestroyHandle();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
private Window _window = new Window();
|
||||||
|
private int _currentId;
|
||||||
|
|
||||||
|
public KeyboardHook()
|
||||||
|
{
|
||||||
|
// register the event of the inner native window.
|
||||||
|
_window.KeyPressed += delegate (object sender, KeyPressedEventArgs args)
|
||||||
|
{
|
||||||
|
if (KeyPressed != null)
|
||||||
|
KeyPressed(this, args);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Registers a hot key in the system.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="modifier">The modifiers that are associated with the hot key.</param>
|
||||||
|
/// <param name="key">The key itself that is associated with the hot key.</param>
|
||||||
|
public void RegisterHotKey(KeyboardHookModifierKeys modifier, Keys key)
|
||||||
|
{
|
||||||
|
// increment the counter.
|
||||||
|
_currentId = _currentId + 1;
|
||||||
|
|
||||||
|
// register the hot key.
|
||||||
|
if (!RegisterHotKey(_window.Handle, _currentId, (uint)modifier, (uint)key))
|
||||||
|
throw new InvalidOperationException("Couldn’t register the hot key.");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A hot key has been pressed.
|
||||||
|
/// </summary>
|
||||||
|
public event EventHandler<KeyPressedEventArgs> KeyPressed;
|
||||||
|
|
||||||
|
#region IDisposable Members
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
// unregister all the registered hot keys.
|
||||||
|
for (int i = _currentId; i > 0; i--)
|
||||||
|
{
|
||||||
|
UnregisterHotKey(_window.Handle, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
// dispose the inner native window.
|
||||||
|
_window.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event Args for the event that is fired after the hot key has been pressed.
|
||||||
|
/// </summary>
|
||||||
|
public class KeyPressedEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
private KeyboardHookModifierKeys _modifier;
|
||||||
|
private Keys _key;
|
||||||
|
|
||||||
|
internal KeyPressedEventArgs(KeyboardHookModifierKeys modifier, Keys key)
|
||||||
|
{
|
||||||
|
_modifier = modifier;
|
||||||
|
_key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public KeyboardHookModifierKeys Modifier
|
||||||
|
{
|
||||||
|
get { return _modifier; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public Keys Key
|
||||||
|
{
|
||||||
|
get { return _key; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The enumeration of possible modifiers.
|
||||||
|
/// </summary>
|
||||||
|
[Flags]
|
||||||
|
public enum KeyboardHookModifierKeys : uint
|
||||||
|
{
|
||||||
|
Alt = 1,
|
||||||
|
Control = 2,
|
||||||
|
Shift = 4,
|
||||||
|
Win = 8
|
||||||
|
}
|
||||||
|
}
|
33
Helper/MessageFilter.cs
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu
|
||||||
|
{
|
||||||
|
public delegate void EventHandler();
|
||||||
|
|
||||||
|
class MessageFilter : IMessageFilter
|
||||||
|
{
|
||||||
|
const int WM_MOUSELEAVE = 0x02A3;
|
||||||
|
const int WM_MOUSEMOVE = 0x0200;
|
||||||
|
const int WM_NCMOUSEMOVE = 0x00A0;
|
||||||
|
public event EventHandler MouseLeave;
|
||||||
|
public event EventHandler MouseMove;
|
||||||
|
public event EventHandler ScrollBarMouseMove;
|
||||||
|
|
||||||
|
public bool PreFilterMessage(ref Message message)
|
||||||
|
{
|
||||||
|
if (message.Msg == WM_MOUSELEAVE)
|
||||||
|
{
|
||||||
|
MouseLeave?.Invoke();
|
||||||
|
}
|
||||||
|
else if (message.Msg == WM_MOUSEMOVE)
|
||||||
|
{
|
||||||
|
MouseMove?.Invoke();
|
||||||
|
}
|
||||||
|
else if (message.Msg == WM_NCMOUSEMOVE)
|
||||||
|
{
|
||||||
|
ScrollBarMouseMove?.Invoke();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
30
Helper/ScreenMouse.cs
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Helper
|
||||||
|
{
|
||||||
|
public class ScreenMouse
|
||||||
|
{
|
||||||
|
public static Screen GetScreen()
|
||||||
|
{
|
||||||
|
return Screen.PrimaryScreen;
|
||||||
|
// Maybe we need for later feature
|
||||||
|
// Show on mouse position
|
||||||
|
//return GetScreenFromMousePosition(
|
||||||
|
// Cursor.Position.X, Cursor.Position.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
//public static Screen GetScreenFromMousePosition(int x, int y)
|
||||||
|
//{
|
||||||
|
// Screen clickedScreen = null;
|
||||||
|
// foreach (Screen screen in Screen.AllScreens)
|
||||||
|
// {
|
||||||
|
// if (screen.Bounds.Contains(new Point(x, y)))
|
||||||
|
// {
|
||||||
|
// clickedScreen = screen;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return clickedScreen;
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
1640
Helper/ShellContextMenu.cs
Normal file
143
Helper/Taskbar.cs
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu
|
||||||
|
{
|
||||||
|
public enum TaskbarPosition
|
||||||
|
{
|
||||||
|
Unknown = -1,
|
||||||
|
Left,
|
||||||
|
Top,
|
||||||
|
Right,
|
||||||
|
Bottom,
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed class Taskbar
|
||||||
|
{
|
||||||
|
private const string ClassName = "Shell_TrayWnd";
|
||||||
|
|
||||||
|
public Rectangle Bounds
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
public TaskbarPosition Position
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
public Point Location
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Bounds.Location;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public Size Size
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Bounds.Size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Always returns false under Windows 7
|
||||||
|
public bool AlwaysOnTop
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
public bool AutoHide
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Taskbar()
|
||||||
|
{
|
||||||
|
IntPtr taskbarHandle = User32.FindWindow(Taskbar.ClassName, null);
|
||||||
|
|
||||||
|
APPBARDATA data = new APPBARDATA();
|
||||||
|
data.cbSize = (uint)Marshal.SizeOf(typeof(APPBARDATA));
|
||||||
|
data.hWnd = taskbarHandle;
|
||||||
|
IntPtr result = Shell32.SHAppBarMessage(ABM.GetTaskbarPos, ref data);
|
||||||
|
if (result == IntPtr.Zero)
|
||||||
|
{
|
||||||
|
//throw new InvalidOperationException();
|
||||||
|
Bounds = new Rectangle(20, 20, 20, 20);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Position = (TaskbarPosition)data.uEdge;
|
||||||
|
Bounds = Rectangle.FromLTRB(data.rc.left, data.rc.top, data.rc.right, data.rc.bottom);
|
||||||
|
|
||||||
|
data.cbSize = (uint)Marshal.SizeOf(typeof(APPBARDATA));
|
||||||
|
result = Shell32.SHAppBarMessage(ABM.GetState, ref data);
|
||||||
|
int state = result.ToInt32();
|
||||||
|
this.AlwaysOnTop = (state & ABS.AlwaysOnTop) == ABS.AlwaysOnTop;
|
||||||
|
this.AutoHide = (state & ABS.Autohide) == ABS.Autohide;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum ABM : uint
|
||||||
|
{
|
||||||
|
New = 0x00000000,
|
||||||
|
Remove = 0x00000001,
|
||||||
|
QueryPos = 0x00000002,
|
||||||
|
SetPos = 0x00000003,
|
||||||
|
GetState = 0x00000004,
|
||||||
|
GetTaskbarPos = 0x00000005,
|
||||||
|
Activate = 0x00000006,
|
||||||
|
GetAutoHideBar = 0x00000007,
|
||||||
|
SetAutoHideBar = 0x00000008,
|
||||||
|
WindowPosChanged = 0x00000009,
|
||||||
|
SetState = 0x0000000A,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum ABE : uint
|
||||||
|
{
|
||||||
|
Left = 0,
|
||||||
|
Top = 1,
|
||||||
|
Right = 2,
|
||||||
|
Bottom = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ABS
|
||||||
|
{
|
||||||
|
public const int Autohide = 0x0000001;
|
||||||
|
public const int AlwaysOnTop = 0x0000002;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Shell32
|
||||||
|
{
|
||||||
|
[DllImport("shell32.dll", SetLastError = true)]
|
||||||
|
public static extern IntPtr SHAppBarMessage(ABM dwMessage, [In] ref APPBARDATA pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class User32
|
||||||
|
{
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct APPBARDATA
|
||||||
|
{
|
||||||
|
public uint cbSize;
|
||||||
|
public IntPtr hWnd;
|
||||||
|
public uint uCallbackMessage;
|
||||||
|
public ABE uEdge;
|
||||||
|
public RECT rc;
|
||||||
|
public int lParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct RECT
|
||||||
|
{
|
||||||
|
public int left;
|
||||||
|
public int top;
|
||||||
|
public int right;
|
||||||
|
public int bottom;
|
||||||
|
}
|
||||||
|
}
|
39
Helper/WaitFastLeave.cs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
using System;
|
||||||
|
using Timer = System.Windows.Forms.Timer;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Helper
|
||||||
|
{
|
||||||
|
class WaitFastLeave : IDisposable
|
||||||
|
{
|
||||||
|
public event EventHandler Leave;
|
||||||
|
|
||||||
|
Timer timerSecondLeaveCheck = new Timer();
|
||||||
|
|
||||||
|
public WaitFastLeave()
|
||||||
|
{
|
||||||
|
timerSecondLeaveCheck.Interval = 200;
|
||||||
|
timerSecondLeaveCheck.Tick += LeaveWorkaround_Tick;
|
||||||
|
}
|
||||||
|
|
||||||
|
// When menu not activated and mouse leaves menu very fast,
|
||||||
|
// mouse still on menu but we not get leave event again
|
||||||
|
// as workaround we call the check again (200ms later)
|
||||||
|
public void Start()
|
||||||
|
{
|
||||||
|
Leave.Invoke();
|
||||||
|
timerSecondLeaveCheck.Stop();
|
||||||
|
timerSecondLeaveCheck.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LeaveWorkaround_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
timerSecondLeaveCheck.Stop();
|
||||||
|
Leave.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
timerSecondLeaveCheck.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
75
Helper/WaitMenuOpen.cs
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
using System;
|
||||||
|
using Timer = System.Windows.Forms.Timer;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Helper
|
||||||
|
{
|
||||||
|
class WaitMenuOpen : IDisposable
|
||||||
|
{
|
||||||
|
public event EventHandler DoOpen;
|
||||||
|
|
||||||
|
Timer waitOpen = new Timer();
|
||||||
|
bool waitedDone = false;
|
||||||
|
bool clicked = false;
|
||||||
|
bool menuLoaded = false;
|
||||||
|
|
||||||
|
public WaitMenuOpen()
|
||||||
|
{
|
||||||
|
waitOpen.Interval = MenuDefines.WaitMenuOpen;
|
||||||
|
waitOpen.Tick += WaitOpen_Tick;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WaitOpen_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
waitOpen.Stop();
|
||||||
|
waitedDone = true;
|
||||||
|
CheckConditionsToOpenMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckConditionsToOpenMenu()
|
||||||
|
{
|
||||||
|
if ((waitedDone || clicked) &&
|
||||||
|
menuLoaded)
|
||||||
|
{
|
||||||
|
Stop();
|
||||||
|
DoOpen?.Invoke();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// When mouse on menu, wait x ms until open it
|
||||||
|
// meanwhile load content, click opens when loaded
|
||||||
|
// (to not interrupt user when he moves into a submenu)
|
||||||
|
public void Start()
|
||||||
|
{
|
||||||
|
if (!waitedDone)
|
||||||
|
{
|
||||||
|
waitOpen.Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Stop()
|
||||||
|
{
|
||||||
|
clicked = false;
|
||||||
|
waitedDone = false;
|
||||||
|
menuLoaded = false;
|
||||||
|
waitOpen.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Click()
|
||||||
|
{
|
||||||
|
clicked = true;
|
||||||
|
CheckConditionsToOpenMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MenuLoaded()
|
||||||
|
{
|
||||||
|
menuLoaded = true;
|
||||||
|
CheckConditionsToOpenMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Stop();
|
||||||
|
waitOpen.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
41
MenuDefines.cs
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu
|
||||||
|
{
|
||||||
|
public static class MenuDefines
|
||||||
|
{
|
||||||
|
// windows explorer background white
|
||||||
|
public static Color File = Color.White;
|
||||||
|
public static Color Folder = Color.White;
|
||||||
|
|
||||||
|
// windows explorer selected text
|
||||||
|
public static Color FileHover = Color.FromArgb(204, 232, 255);
|
||||||
|
|
||||||
|
// windows explorer highlighted text
|
||||||
|
public static Color FolderOpen = Color.FromArgb(229, 243, 255);
|
||||||
|
public static Color Background = Color.FromArgb(229, 243, 255);
|
||||||
|
internal static Color KeyBoardSelection = Color.Yellow;
|
||||||
|
internal static int KeySearchInterval = 1000;
|
||||||
|
public const int MenuRowsHeight = 18;
|
||||||
|
public const int LengthMax = 37;
|
||||||
|
public const int ButtonTextPaddingLeft = 18;
|
||||||
|
public const int ButtonTextPaddingRight= 12;
|
||||||
|
|
||||||
|
public const int Scrollspeed = 4;
|
||||||
|
|
||||||
|
public const int WaitMenuOpen = 200;
|
||||||
|
|
||||||
|
// 60 fps => 1000ms/60fps =~ 16.6ms
|
||||||
|
public const int IntervalFade = 16;
|
||||||
|
|
||||||
|
// 60 fps => 1000ms/60fps =~ 16.6ms
|
||||||
|
public const int IntervalLoad = 16;
|
||||||
|
|
||||||
|
public const double OpacityHalfValue = 0.80;
|
||||||
|
public const double OpacityInStep = 0.20;
|
||||||
|
public const double OpacityOutStep = 0.05;
|
||||||
|
public const double OpacityHalfStep = 0.01;
|
||||||
|
|
||||||
|
public const int MenusMax = 50;
|
||||||
|
}
|
||||||
|
}
|
183
Program.cs
Normal file
|
@ -0,0 +1,183 @@
|
||||||
|
using Clearcove.Logging;
|
||||||
|
using Microsoft.Win32;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Resources;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace SystemTrayMenu
|
||||||
|
{
|
||||||
|
static class Program
|
||||||
|
{
|
||||||
|
public static readonly List<string> Languages =
|
||||||
|
new List<string>() { "en", "de" };
|
||||||
|
public static CultureInfo Culture;
|
||||||
|
public static float ScalingFactor = 1;
|
||||||
|
|
||||||
|
private const string IconDir = "Icons\\";
|
||||||
|
|
||||||
|
|
||||||
|
[System.Runtime.InteropServices.DllImport("user32.dll")]
|
||||||
|
private static extern bool SetProcessDPIAware();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The main entry point for the application.
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
Application.EnableVisualStyles();
|
||||||
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
|
||||||
|
if (IsAppAlreadyRunning("SystemTrayMenu"))
|
||||||
|
{
|
||||||
|
KillOtherSystemTrayMenus();
|
||||||
|
}
|
||||||
|
|
||||||
|
GetDefaultLanguage();
|
||||||
|
|
||||||
|
ScalingFactor = GetScalingFactor();
|
||||||
|
if (Environment.OSVersion.Version.Major >= 6)
|
||||||
|
{
|
||||||
|
SetProcessDPIAware();
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger log = new Logger(nameof(Program));
|
||||||
|
Logger.Start(new FileInfo(GetLogFilePath()));
|
||||||
|
try
|
||||||
|
{
|
||||||
|
bool cancelAppRun = false;
|
||||||
|
using (SystemTrayMenuHandler stm =
|
||||||
|
new SystemTrayMenuHandler(ref cancelAppRun))
|
||||||
|
{
|
||||||
|
if (!cancelAppRun)
|
||||||
|
{
|
||||||
|
Application.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
log.Error($"{ex.ToString()}");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Logger.ShutDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool KillOtherSystemTrayMenus()
|
||||||
|
{
|
||||||
|
bool killedAProcess = false;
|
||||||
|
int ownPID = Process.GetCurrentProcess().Id;
|
||||||
|
|
||||||
|
foreach (Process p in Process.GetProcessesByName("SystemTrayMenu").
|
||||||
|
Where(p => p.Id != ownPID))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
p.Kill();
|
||||||
|
p.WaitForExit();
|
||||||
|
killedAProcess = true;
|
||||||
|
}
|
||||||
|
catch (Win32Exception winException)
|
||||||
|
{
|
||||||
|
Logger log = new Logger(nameof(Program));
|
||||||
|
log.Error($"{winException.ToString()}");
|
||||||
|
MessageBox.Show(winException.ToString());
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException invalidException)
|
||||||
|
{
|
||||||
|
Logger log = new Logger(nameof(Program));
|
||||||
|
log.Error($"{invalidException.ToString()}");
|
||||||
|
MessageBox.Show(invalidException.ToString());
|
||||||
|
Application.Exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return killedAProcess;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool IsAppAlreadyRunning(string processName)
|
||||||
|
{
|
||||||
|
foreach (Process p in Process.GetProcessesByName(processName).
|
||||||
|
Where(s => s.Id != Process.GetCurrentProcess().Id))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static string GetLogFilePath()
|
||||||
|
{
|
||||||
|
return Path.Combine(Path.GetDirectoryName(
|
||||||
|
System.Reflection.Assembly.GetExecutingAssembly().Location),
|
||||||
|
$"log-{System.Environment.MachineName}.txt");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void GetDefaultLanguage()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(Properties.Settings.Default.
|
||||||
|
CurrentCultureInfoName))
|
||||||
|
{
|
||||||
|
Properties.Settings.Default.CurrentCultureInfoName = "en";
|
||||||
|
CultureInfo currentCulture = Thread.CurrentThread.
|
||||||
|
CurrentCulture;
|
||||||
|
foreach (string language in Languages)
|
||||||
|
{
|
||||||
|
string twoLetter = currentCulture.Name.Substring(0, 2);
|
||||||
|
if (language == currentCulture.Name ||
|
||||||
|
language == twoLetter)
|
||||||
|
{
|
||||||
|
Properties.Settings.Default.CurrentCultureInfoName =
|
||||||
|
language;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Properties.Settings.Default.Save();
|
||||||
|
}
|
||||||
|
|
||||||
|
Culture = CultureInfo.CreateSpecificCulture(
|
||||||
|
Properties.Settings.Default.CurrentCultureInfoName);
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("gdi32.dll")]
|
||||||
|
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
|
||||||
|
public enum DeviceCap
|
||||||
|
{
|
||||||
|
VERTRES = 10,
|
||||||
|
DESKTOPVERTRES = 117,
|
||||||
|
|
||||||
|
// http://pinvoke.net/default.aspx/gdi32/GetDeviceCaps.html
|
||||||
|
}
|
||||||
|
|
||||||
|
static float GetScalingFactor()
|
||||||
|
{
|
||||||
|
Graphics g = Graphics.FromHwnd(IntPtr.Zero);
|
||||||
|
IntPtr desktop = g.GetHdc();
|
||||||
|
int LogicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.VERTRES);
|
||||||
|
int PhysicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES);
|
||||||
|
|
||||||
|
float ScreenScalingFactor = (float)PhysicalScreenHeight / (float)LogicalScreenHeight;
|
||||||
|
|
||||||
|
return ScreenScalingFactor; // 1.25 = 125%
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static string Translate(string id)
|
||||||
|
{
|
||||||
|
ResourceManager rm = new ResourceManager(
|
||||||
|
"SystemTrayMenu.Resources.lang",
|
||||||
|
typeof(Menu).Assembly);
|
||||||
|
return rm.GetString(id, Culture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("SystemTrayMenu")]
|
||||||
|
[assembly: AssemblyDescription("AN IMPROVED WINDOWS TOOLBAR")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("TAMAHO")]
|
||||||
|
[assembly: AssemblyProduct("TAMAHO SystemTrayMenu")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2019, TAMAHO")]
|
||||||
|
[assembly: AssemblyTrademark("TAMAHO")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("116c8741-a9b0-4560-8e82-7cf412894340")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("0.9.1.233")]
|
||||||
|
[assembly: AssemblyFileVersion("0.9.1.233")]
|
293
Properties/Resources.Designer.cs
generated
Normal file
|
@ -0,0 +1,293 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// Dieser Code wurde von einem Tool generiert.
|
||||||
|
// Laufzeitversion:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||||
|
// der Code erneut generiert wird.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Properties {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
|
||||||
|
/// </summary>
|
||||||
|
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
|
||||||
|
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
|
||||||
|
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
|
||||||
|
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
public class Resources {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
public static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SystemTrayMenu.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
|
||||||
|
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
public static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Bitmap hintDragDrop {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("hintDragDrop", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L010 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L010", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L020 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L020", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L030 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L030", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L040 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L040", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L050 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L050", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L060 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L060", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L070 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L070", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L080 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L080", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L090 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L090", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L100 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L100", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L110 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L110", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L120 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L120", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L130 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L130", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L140 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L140", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L150 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L150", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L160 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L160", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L170 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L170", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon L180 {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("L180", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Bitmap NotSelected {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("NotSelected", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Bitmap Selected {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("Selected", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Bitmap STM {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("STM", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
|
||||||
|
/// </summary>
|
||||||
|
public static System.Drawing.Icon SystemTrayMenu {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("SystemTrayMenu", resourceCulture);
|
||||||
|
return ((System.Drawing.Icon)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
190
Properties/Resources.resx
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="SystemTrayMenu" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\SystemTrayMenu.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="STM" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\STM.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="Selected" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\resources\Selected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="hintDragDrop" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\hintDragDrop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L010" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L010.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L020" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L020.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L030" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L030.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L040" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L040.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L050" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L050.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L060" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L060.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L070" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L070.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L080" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L080.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L090" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L090.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L100" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L100.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L110" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L110.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L120" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L120.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L130" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L130.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L140" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L140.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L150" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L150.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L160" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L160.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L170" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L170.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="L180" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\L180.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="NotSelected" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\NotSelected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
74
Properties/Settings.Designer.cs
generated
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// Dieser Code wurde von einem Tool generiert.
|
||||||
|
// Laufzeitversion:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||||
|
// der Code erneut generiert wird.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Properties {
|
||||||
|
|
||||||
|
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.0.0.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default {
|
||||||
|
get {
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||||
|
public string CurrentCultureInfoName {
|
||||||
|
get {
|
||||||
|
return ((string)(this["CurrentCultureInfoName"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["CurrentCultureInfoName"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||||
|
public string PathDirectory {
|
||||||
|
get {
|
||||||
|
return ((string)(this["PathDirectory"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["PathDirectory"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||||
|
public bool IsAutostartActivated {
|
||||||
|
get {
|
||||||
|
return ((bool)(this["IsAutostartActivated"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["IsAutostartActivated"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||||
|
public string HotKey {
|
||||||
|
get {
|
||||||
|
return ((string)(this["HotKey"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["HotKey"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
18
Properties/Settings.settings
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="SystemTrayMenu.Properties" GeneratedClassName="Settings">
|
||||||
|
<Profiles />
|
||||||
|
<Settings>
|
||||||
|
<Setting Name="CurrentCultureInfoName" Type="System.String" Scope="User">
|
||||||
|
<Value Profile="(Default)" />
|
||||||
|
</Setting>
|
||||||
|
<Setting Name="PathDirectory" Type="System.String" Scope="User">
|
||||||
|
<Value Profile="(Default)" />
|
||||||
|
</Setting>
|
||||||
|
<Setting Name="IsAutostartActivated" Type="System.Boolean" Scope="User">
|
||||||
|
<Value Profile="(Default)">False</Value>
|
||||||
|
</Setting>
|
||||||
|
<Setting Name="HotKey" Type="System.String" Scope="User">
|
||||||
|
<Value Profile="(Default)" />
|
||||||
|
</Setting>
|
||||||
|
</Settings>
|
||||||
|
</SettingsFile>
|
BIN
Resources/L010.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L020.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L030.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L040.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L050.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L060.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L070.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L080.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L090.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L100.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L110.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L120.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L130.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L140.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L150.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L160.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L170.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/L180.ico
Normal file
After Width: | Height: | Size: 102 KiB |
BIN
Resources/NotSelected.png
Normal file
After Width: | Height: | Size: 8.7 KiB |
BIN
Resources/STM.ico
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
Resources/STM_black.ico
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
Resources/Selected.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
Resources/SystemTrayMenu.ico
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
Resources/hintDragDrop.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
243
Resources/lang.Designer.cs
generated
Normal file
|
@ -0,0 +1,243 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// Dieser Code wurde von einem Tool generiert.
|
||||||
|
// Laufzeitversion:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||||
|
// der Code erneut generiert wird.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace SystemTrayMenu.Resources {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
|
||||||
|
/// </summary>
|
||||||
|
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
|
||||||
|
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
|
||||||
|
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
|
||||||
|
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class lang {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal lang() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SystemTrayMenu.Resources.lang", typeof(lang).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
|
||||||
|
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die (e.g. F12) ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string _e_g__F12_ {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("(e.g. F12)", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die About ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string About {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("About", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Activate autostart ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Activate_autostart {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Activate autostart", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die ALT ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string ALT {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ALT", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Autostart ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Autostart {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Autostart", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Details ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string buttonDetails {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("buttonDetails", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die OK ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string buttonOk {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("buttonOk", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die System Info ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string buttonSystemInfo {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("buttonSystemInfo", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die CTRL ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string CTRL {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("CTRL", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die English ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string English {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("English", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Exit ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Exit {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Exit", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Folder ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Folder {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Folder", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Folder empty ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Folder_empty {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Folder empty", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Deutsch ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string German {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("German", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Move the NotifyIcon per DragDrop from the SystemTray into the Taskbar ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string HintDragDropText {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("HintDragDropText", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die SystemTrayMenu - Hint ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string HintDragDropTitle {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("HintDragDropTitle", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Language ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Language {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Language", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Log File ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Log_File {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Log File", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Restart ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Restart {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Restart", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Shortcut key ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Shortcut_key {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Shortcut key", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
0
Resources/lang.de-DE.Designer.cs
generated
Normal file
180
Resources/lang.de-DE.resx
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="About" xml:space="preserve">
|
||||||
|
<value>Über</value>
|
||||||
|
</data>
|
||||||
|
<data name="Activate autostart" xml:space="preserve">
|
||||||
|
<value>Autostart aktivieren</value>
|
||||||
|
</data>
|
||||||
|
<data name="buttonOk" xml:space="preserve">
|
||||||
|
<value>OK</value>
|
||||||
|
</data>
|
||||||
|
<data name="Autostart" xml:space="preserve">
|
||||||
|
<value>Autostart</value>
|
||||||
|
</data>
|
||||||
|
<data name="Exit" xml:space="preserve">
|
||||||
|
<value>Beenden</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder" xml:space="preserve">
|
||||||
|
<value>Ordner</value>
|
||||||
|
</data>
|
||||||
|
<data name="HintDragDropText" xml:space="preserve">
|
||||||
|
<value>Ziehe das Notify-Icon per DragDrop vom SystemTray in die Taskleiste</value>
|
||||||
|
</data>
|
||||||
|
<data name="HintDragDropTitle" xml:space="preserve">
|
||||||
|
<value>SystemTrayMenu - Hinweis</value>
|
||||||
|
</data>
|
||||||
|
<data name="Language" xml:space="preserve">
|
||||||
|
<value>Sprache</value>
|
||||||
|
</data>
|
||||||
|
<data name="Log File" xml:space="preserve">
|
||||||
|
<value>Log Datei</value>
|
||||||
|
</data>
|
||||||
|
<data name="Restart" xml:space="preserve">
|
||||||
|
<value>Neustart</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder empty" xml:space="preserve">
|
||||||
|
<value>Ordner leer</value>
|
||||||
|
</data>
|
||||||
|
<data name="ALT" xml:space="preserve">
|
||||||
|
<value>ALT</value>
|
||||||
|
</data>
|
||||||
|
<data name="CTRL" xml:space="preserve">
|
||||||
|
<value>STRG</value>
|
||||||
|
</data>
|
||||||
|
<data name="Shortcut key" xml:space="preserve">
|
||||||
|
<value>Tastenkombination</value>
|
||||||
|
</data>
|
||||||
|
<data name="English" xml:space="preserve">
|
||||||
|
<value>English</value>
|
||||||
|
</data>
|
||||||
|
<data name="German" xml:space="preserve">
|
||||||
|
<value>Deutsch</value>
|
||||||
|
</data>
|
||||||
|
<data name="(e.g. F12)" xml:space="preserve">
|
||||||
|
<value>(z.B. F12)</value>
|
||||||
|
</data>
|
||||||
|
<data name="buttonDetails" xml:space="preserve">
|
||||||
|
<value>Details</value>
|
||||||
|
</data>
|
||||||
|
<data name="buttonSystemInfo" xml:space="preserve">
|
||||||
|
<value>System Info</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
180
Resources/lang.resx
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="About" xml:space="preserve">
|
||||||
|
<value>About</value>
|
||||||
|
</data>
|
||||||
|
<data name="Activate autostart" xml:space="preserve">
|
||||||
|
<value>Activate autostart</value>
|
||||||
|
</data>
|
||||||
|
<data name="buttonOk" xml:space="preserve">
|
||||||
|
<value>OK</value>
|
||||||
|
</data>
|
||||||
|
<data name="Autostart" xml:space="preserve">
|
||||||
|
<value>Autostart</value>
|
||||||
|
</data>
|
||||||
|
<data name="English" xml:space="preserve">
|
||||||
|
<value>English</value>
|
||||||
|
</data>
|
||||||
|
<data name="Exit" xml:space="preserve">
|
||||||
|
<value>Exit</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder" xml:space="preserve">
|
||||||
|
<value>Folder</value>
|
||||||
|
</data>
|
||||||
|
<data name="German" xml:space="preserve">
|
||||||
|
<value>Deutsch</value>
|
||||||
|
</data>
|
||||||
|
<data name="HintDragDropText" xml:space="preserve">
|
||||||
|
<value>Move the NotifyIcon per DragDrop from the SystemTray into the Taskbar</value>
|
||||||
|
</data>
|
||||||
|
<data name="HintDragDropTitle" xml:space="preserve">
|
||||||
|
<value>SystemTrayMenu - Hint</value>
|
||||||
|
</data>
|
||||||
|
<data name="Language" xml:space="preserve">
|
||||||
|
<value>Language</value>
|
||||||
|
</data>
|
||||||
|
<data name="Log File" xml:space="preserve">
|
||||||
|
<value>Log File</value>
|
||||||
|
</data>
|
||||||
|
<data name="Restart" xml:space="preserve">
|
||||||
|
<value>Restart</value>
|
||||||
|
</data>
|
||||||
|
<data name="Folder empty" xml:space="preserve">
|
||||||
|
<value>Folder empty</value>
|
||||||
|
</data>
|
||||||
|
<data name="ALT" xml:space="preserve">
|
||||||
|
<value>ALT</value>
|
||||||
|
</data>
|
||||||
|
<data name="CTRL" xml:space="preserve">
|
||||||
|
<value>CTRL</value>
|
||||||
|
</data>
|
||||||
|
<data name="Shortcut key" xml:space="preserve">
|
||||||
|
<value>Shortcut key</value>
|
||||||
|
</data>
|
||||||
|
<data name="(e.g. F12)" xml:space="preserve">
|
||||||
|
<value>(e.g. F12)</value>
|
||||||
|
</data>
|
||||||
|
<data name="buttonDetails" xml:space="preserve">
|
||||||
|
<value>Details</value>
|
||||||
|
</data>
|
||||||
|
<data name="buttonSystemInfo" xml:space="preserve">
|
||||||
|
<value>System Info</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
59
STM Request Norton.txt
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
Hello Symantec Team,
|
||||||
|
|
||||||
|
I am the owner/ developer of my software TAMAHO SystemTrayMenu / systemtraymenu.exe
|
||||||
|
|
||||||
|
My software is a improved windows toolbar.
|
||||||
|
Please find more informations on my website:
|
||||||
|
http://www.hofknecht.eu/systemtraymenu/
|
||||||
|
(There i am frequently providing updates during beta phase)
|
||||||
|
|
||||||
|
It not contains any other functionalities, no hidden doors.
|
||||||
|
My software exactly only makes what described on website.
|
||||||
|
|
||||||
|
Current version is 0.9.1.224
|
||||||
|
Later versions will be released under same homepage. Links look then like (current version):
|
||||||
|
http://hofknecht.eu/systemtraymenu/0.9.1.224/SystemTrayMenu-0.9.1.224-beta.zip
|
||||||
|
|
||||||
|
It will probably become Open Source as soon it is good enough ;)
|
||||||
|
|
||||||
|
A user reported, that Norton detects systemtraymenu.exe as unsafe and he needs to allow it explicitly.
|
||||||
|
|
||||||
|
Here my product clipboard:
|
||||||
|
------------------------------
|
||||||
|
SystemTrayMenu - An improved Windows Toolbar
|
||||||
|
Code from © 2019, TAMAHO, All Rights Reserved. Developer:
|
||||||
|
Markus Hofknecht (mailto:Markus@Hofknecht.eu)
|
||||||
|
Tanja Kauth (Tanja@Hofknecht.eu)
|
||||||
|
|
||||||
|
http://www.hofknecht.eu/systemtraymenu/
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
If you have any questions please don't hesitate to contact me.
|
||||||
|
|
||||||
|
Best Regards
|
||||||
|
|
||||||
|
Markus Hofknecht
|
||||||
|
Software Engineer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Was sent to Norton:
|
||||||
|
------------------------------
|
||||||
|
CONFIRMATION
|
||||||
|
Your submission has been sent Fri Jun 21 21:10:37 UTC 2019. To make another submission, click here.
|
||||||
|
|
||||||
|
Sincerely,
|
||||||
|
|
||||||
|
Symantec Security Response
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Was sent to AVAST:
|
||||||
|
------------------------------
|
||||||
|
Thank you! We have received the URL you submitted.
|
||||||
|
|
||||||
|
If we need any further information we will contact you. Otherwise, we will reply when the analysis is complete to let you know what action we’ve taken.
|
||||||
|
|
||||||
|
Kind regards,
|
||||||
|
The Support Team
|
||||||
|
AVAST Software
|
||||||
|
------------------------------
|
236
SystemTrayMenu.csproj
Normal file
|
@ -0,0 +1,236 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
|
||||||
|
<ProductVersion>8.0.30703</ProductVersion>
|
||||||
|
<SchemaVersion>2.0</SchemaVersion>
|
||||||
|
<ProjectGuid>{F317AF2E-9704-4A2A-BDAE-B4662ED9483B}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>SystemTrayMenu</RootNamespace>
|
||||||
|
<AssemblyName>SystemTrayMenu</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<TargetFrameworkProfile>
|
||||||
|
</TargetFrameworkProfile>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<PublishUrl>publish\</PublishUrl>
|
||||||
|
<Install>true</Install>
|
||||||
|
<InstallFrom>Disk</InstallFrom>
|
||||||
|
<UpdateEnabled>false</UpdateEnabled>
|
||||||
|
<UpdateMode>Foreground</UpdateMode>
|
||||||
|
<UpdateInterval>7</UpdateInterval>
|
||||||
|
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||||
|
<UpdatePeriodically>false</UpdatePeriodically>
|
||||||
|
<UpdateRequired>false</UpdateRequired>
|
||||||
|
<MapFileExtensions>true</MapFileExtensions>
|
||||||
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
|
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||||
|
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||||
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||||
|
<PlatformTarget>x86</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<StartupObject>SystemTrayMenu.Program</StartupObject>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationIcon>Resources\SystemTrayMenu.ico</ApplicationIcon>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Clearcove.Logging">
|
||||||
|
<HintPath>..\CodeProjects\SimpleLogger\SimpleLogger\Clearcove.Logging\bin\Debug\Clearcove.Logging.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Microsoft.WindowsAPICodePack.Shell">
|
||||||
|
<HintPath>..\ThirdParty\Windows-API-Code-Pack-1.1-master\source\WindowsAPICodePack\Shell\bin\Debug\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Deployment" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="TAFactory.IconPack">
|
||||||
|
<HintPath>..\CodeProjects\IconPack\TAFactory.IconPack.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Config.cs" />
|
||||||
|
<Compile Include="Controls\AboutBox.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Controls\AboutBox.Designer.cs">
|
||||||
|
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Controls\AskHotKeyForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Controls\AskHotKeyForm.Designer.cs">
|
||||||
|
<DependentUpon>AskHotKeyForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Controls\DragDropHintForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Controls\DragDropHintForm.Designer.cs">
|
||||||
|
<DependentUpon>DragDropHintForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Controls\MenuData.cs" />
|
||||||
|
<Compile Include="Controls\RowData.cs" />
|
||||||
|
<Compile Include="Controls\AppContextMenu.cs" />
|
||||||
|
<Compile Include="Helper\BringWindowToTop.cs" />
|
||||||
|
<Compile Include="Helper\File\IconReader.cs" />
|
||||||
|
<Compile Include="Helper\File\FileIni.cs" />
|
||||||
|
<Compile Include="Helper\File\FileLnk.cs" />
|
||||||
|
<Compile Include="Helper\KeyboardHook.cs" />
|
||||||
|
<Compile Include="Helper\MessageFilter.cs" />
|
||||||
|
<Compile Include="Helper\ShellContextMenu.cs" />
|
||||||
|
<Compile Include="Helper\File\FileUrl.cs" />
|
||||||
|
<Compile Include="Helper\WaitFastLeave.cs" />
|
||||||
|
<Compile Include="Helper\WaitMenuOpen.cs" />
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Resources\lang.de-DE.Designer.cs">
|
||||||
|
<DependentUpon>lang.de-DE.resx</DependentUpon>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Resources\lang.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>lang.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="MenuDefines.cs" />
|
||||||
|
<Compile Include="Helper\FadeForm.cs" />
|
||||||
|
<Compile Include="Helper\Taskbar.cs" />
|
||||||
|
<Compile Include="Controls\Menu.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Controls\Menu.Designer.cs">
|
||||||
|
<DependentUpon>Menu.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Controls\AppNotifyIcon.cs" />
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Helper\ScreenMouse.cs" />
|
||||||
|
<Compile Include="SystemTrayMenuHandler.cs" />
|
||||||
|
<EmbeddedResource Include="Controls\AboutBox.resx">
|
||||||
|
<DependentUpon>AboutBox.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Controls\AskHotKeyForm.resx">
|
||||||
|
<DependentUpon>AskHotKeyForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Controls\DragDropHintForm.resx">
|
||||||
|
<DependentUpon>DragDropHintForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Controls\Menu.resx">
|
||||||
|
<DependentUpon>Menu.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Resources\lang.de-DE.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>lang.de-DE.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Resources\lang.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>lang.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<None Include="app.config" />
|
||||||
|
<None Include="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="Resources\STM.ico" />
|
||||||
|
<None Include="Resources\STM_black.ico" />
|
||||||
|
<None Include="Resources\Selected.png" />
|
||||||
|
<None Include="Resources\hintDragDrop.png" />
|
||||||
|
<None Include="Resources\L010.ico" />
|
||||||
|
<None Include="Resources\L020.ico" />
|
||||||
|
<None Include="Resources\L030.ico" />
|
||||||
|
<None Include="Resources\L040.ico" />
|
||||||
|
<None Include="Resources\L050.ico" />
|
||||||
|
<None Include="Resources\L060.ico" />
|
||||||
|
<None Include="Resources\L070.ico" />
|
||||||
|
<None Include="Resources\L080.ico" />
|
||||||
|
<None Include="Resources\L090.ico" />
|
||||||
|
<None Include="Resources\L100.ico" />
|
||||||
|
<None Include="Resources\L110.ico" />
|
||||||
|
<None Include="Resources\L120.ico" />
|
||||||
|
<None Include="Resources\L130.ico" />
|
||||||
|
<None Include="Resources\L140.ico" />
|
||||||
|
<None Include="Resources\L150.ico" />
|
||||||
|
<None Include="Resources\L160.ico" />
|
||||||
|
<None Include="Resources\L170.ico" />
|
||||||
|
<None Include="Resources\L180.ico" />
|
||||||
|
<None Include="Resources\NotSelected.png" />
|
||||||
|
<Content Include="Resources\SystemTrayMenu.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<COMReference Include="IWshRuntimeLibrary">
|
||||||
|
<Guid>{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}</Guid>
|
||||||
|
<VersionMajor>1</VersionMajor>
|
||||||
|
<VersionMinor>0</VersionMinor>
|
||||||
|
<Lcid>0</Lcid>
|
||||||
|
<WrapperTool>tlbimp</WrapperTool>
|
||||||
|
<Isolated>False</Isolated>
|
||||||
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
</COMReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<BootstrapperPackage Include=".NETFramework,Version=v4.7.2">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
<ProductName>Microsoft .NET Framework 4.7.2 %28x86 und x64%29</ProductName>
|
||||||
|
<Install>true</Install>
|
||||||
|
</BootstrapperPackage>
|
||||||
|
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||||
|
<Install>false</Install>
|
||||||
|
</BootstrapperPackage>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
25
SystemTrayMenu.sln
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 15
|
||||||
|
VisualStudioVersion = 15.0.28010.2046
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SystemTrayMenu", "SystemTrayMenu.csproj", "{F317AF2E-9704-4A2A-BDAE-B4662ED9483B}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{F317AF2E-9704-4A2A-BDAE-B4662ED9483B}.Debug|x86.ActiveCfg = Debug|x86
|
||||||
|
{F317AF2E-9704-4A2A-BDAE-B4662ED9483B}.Debug|x86.Build.0 = Debug|x86
|
||||||
|
{F317AF2E-9704-4A2A-BDAE-B4662ED9483B}.Release|x86.ActiveCfg = Release|x86
|
||||||
|
{F317AF2E-9704-4A2A-BDAE-B4662ED9483B}.Release|x86.Build.0 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {ECA870FE-709A-4EC0-9F28-206977283A13}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
1098
SystemTrayMenuHandler.cs
Normal file
37
app.config
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
|
||||||
|
<section name="SystemTrayMenu.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||||
|
</sectionGroup>
|
||||||
|
</configSections>
|
||||||
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/></startup><userSettings>
|
||||||
|
<SystemTrayMenu.Properties.Settings>
|
||||||
|
<setting name="CurrentCultureInfoName" serializeAs="String">
|
||||||
|
<value />
|
||||||
|
</setting>
|
||||||
|
<setting name="PathDirectory" serializeAs="String">
|
||||||
|
<value />
|
||||||
|
</setting>
|
||||||
|
<setting name="IsAutostartActivated" serializeAs="String">
|
||||||
|
<value>False</value>
|
||||||
|
</setting>
|
||||||
|
<setting name="HotKey" serializeAs="String">
|
||||||
|
<value />
|
||||||
|
</setting>
|
||||||
|
</SystemTrayMenu.Properties.Settings>
|
||||||
|
</userSettings>
|
||||||
|
<!--
|
||||||
|
todo 1: 4k
|
||||||
|
https://docs.microsoft.com/de-de/dotnet/framework/winforms/high-dpi-support-in-windows-forms
|
||||||
|
https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/winforms/
|
||||||
|
<System.Windows.Forms.ApplicationConfigurationSection>
|
||||||
|
<add key="DpiAwareness" value="PerMonitorV2" />
|
||||||
|
</System.Windows.Forms.ApplicationConfigurationSection>
|
||||||
|
|
||||||
|
todo 2: antivirus dedects stm as risk
|
||||||
|
https://softwareengineering.stackexchange.com/questions/191003/how-to-prevent-my-executable-being-treated-from-av-like-bad-or-virus
|
||||||
|
https://stackoverflow.com/questions/16673086/how-to-correctly-sign-an-executable
|
||||||
|
https://blogs.msdn.microsoft.com/ieinternals/2011/03/22/everything-you-need-to-know-about-authenticode-code-signing/
|
||||||
|
-->
|
||||||
|
</configuration>
|