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
|
||||
|
||||
# SVN
|
||||
.svn*
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.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>
|