using System.Runtime.InteropServices; namespace InverterMonWindow; public partial class Main : Form { [LibraryImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static partial bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk); [LibraryImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static partial bool UnregisterHotKey(IntPtr hWnd, int id); public Main() { InitializeComponent(); TrayIcon.Click += TrayIcon_Click; Load += Main_Load; FormClosed += Main_FormClosed; Resize += Main_Resize; if (!RegisterHotKey(Handle, 1, (int)KeyModifier.Alt, (int)Keys.I)) MessageBox.Show("Failed to register hotkey!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } void Main_Resize(object? sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) { WindowState = FormWindowState.Normal; Hide(); TrayIcon.Visible = true; } } void Main_FormClosed(object? sender, FormClosedEventArgs e) { Properties.Settings.Default.WindowPosition = Location; Properties.Settings.Default.Save(); UnregisterHotKey(Handle, 1); } void Main_Load(object? sender, EventArgs e) { Location = Properties.Settings.Default.WindowPosition; } void TrayIcon_Click(object? sender, EventArgs e) { Show(); WindowState = FormWindowState.Normal; TrayIcon.Visible = false; } protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == 0x0312) { switch (m.WParam.ToInt32()) { case 1: // Alt+I hotkey if (WindowState == FormWindowState.Normal) { WindowState = FormWindowState.Minimized; } else { TrayIcon_Click(null, null!); } break; } } } } [Flags] public enum KeyModifier { None = 0, Alt = 0x0001, Control = 0x0002, Shift = 0x0004, Winkey = 0x0008 }