1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 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);
- }
- }
- }
|