FastGithub/FastGithub.UI/MainWindow.xaml.cs
xingyuan55 4d9d97f871 start
2022-11-16 08:01:03 +08:00

90 lines
2.9 KiB
C#

using System;
using System.Diagnostics;
using System.Reflection;
using System.Windows;
using System.Windows.Interop;
namespace FastGithub.UI
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
private readonly System.Windows.Forms.NotifyIcon notifyIcon;
private const string FASTGITHUB_UI = "FastGithub.UI";
private const string RELEASES_URI = "https://github.com/dotnetcore/FastGithub/releases";
public MainWindow()
{
InitializeComponent();
var upgrade = new System.Windows.Forms.MenuItem("检测更新(&U)");
upgrade.Click += (s, e) => Process.Start(RELEASES_URI);
var exit = new System.Windows.Forms.MenuItem("关闭应用(&C)");
exit.Click += (s, e) => this.Close();
var version = this.GetType().Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion;
this.Title = $"{FASTGITHUB_UI} v{version}";
this.notifyIcon = new System.Windows.Forms.NotifyIcon
{
Visible = true,
Text = FASTGITHUB_UI,
ContextMenu = new System.Windows.Forms.ContextMenu(new[] { upgrade, exit }),
Icon = System.Drawing.Icon.ExtractAssociatedIcon(System.Windows.Forms.Application.ExecutablePath)
};
this.notifyIcon.MouseClick += (s, e) =>
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
this.Show();
this.Activate();
this.WindowState = WindowState.Normal;
}
};
}
/// <summary>
/// 拦截最小化事件
/// </summary>
/// <param name="e"></param>
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
var hwndSource = (HwndSource)PresentationSource.FromVisual(this);
hwndSource.AddHook(WndProc);
IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
const int WM_SYSCOMMAND = 0x112;
const int SC_MINIMIZE = 0xf020;
const int SC_CLOSE = 0xf060;
if (msg == WM_SYSCOMMAND)
{
if (wParam.ToInt32() == SC_MINIMIZE || wParam.ToInt32() == SC_CLOSE)
{
this.Hide();
handled = true;
}
}
return IntPtr.Zero;
}
}
/// <summary>
/// 关闭时
/// </summary>
/// <param name="e"></param>
protected override void OnClosed(EventArgs e)
{
this.notifyIcon.Icon = null;
this.notifyIcon.Dispose();
base.OnClosed(e);
}
}
}