-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
106 lines (93 loc) · 2.7 KB
/
Program.cs
File metadata and controls
106 lines (93 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using BetterCtrlW;
using System.Drawing;
using System.Windows.Forms;
ApplicationConfiguration.Initialize();
var configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.json");
var config = AppConfig.Load(configPath);
// Sync auto-startup state on launch
if (config.AutoStartupEnabled && !StartupManager.IsEnabled())
{
StartupManager.Enable();
}
else if (!config.AutoStartupEnabled && StartupManager.IsEnabled())
{
StartupManager.Disable();
}
var hook = new KeyboardHook(config);
hook.Install();
// Load icon from embedded resource (works with single-file publish)
Icon appIcon;
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
using var iconStream = assembly.GetManifestResourceStream("BetterCtrlW.app.ico");
if (iconStream != null)
{
appIcon = new Icon(iconStream);
}
else
{
appIcon = SystemIcons.Application;
}
using var trayIcon = new NotifyIcon
{
Icon = appIcon,
Visible = true,
Text = "Better Ctrl+W"
};
var contextMenu = new ContextMenuStrip();
// Reload Config menu item
contextMenu.Items.Add("Reload Config", null, (s, e) =>
{
var newConfig = AppConfig.Load(configPath);
hook.UpdateConfig(newConfig);
config = newConfig;
MessageBox.Show("Configuration reloaded!", "Better Ctrl+W", MessageBoxButtons.OK, MessageBoxIcon.Information);
});
// Start with Windows menu item
var startupMenuItem = new ToolStripMenuItem("Start with Windows")
{
Checked = StartupManager.IsEnabled(),
CheckOnClick = true
};
startupMenuItem.Click += (s, e) =>
{
var menuItem = (ToolStripMenuItem)s!;
if (menuItem.Checked)
{
if (StartupManager.Enable())
{
config.AutoStartupEnabled = true;
AppConfig.Save(configPath, config);
}
else
{
menuItem.Checked = false;
MessageBox.Show("Failed to enable auto-startup. Please run as administrator.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
if (StartupManager.Disable())
{
config.AutoStartupEnabled = false;
AppConfig.Save(configPath, config);
}
else
{
menuItem.Checked = true;
MessageBox.Show("Failed to disable auto-startup.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
};
contextMenu.Items.Add(startupMenuItem);
// Separator and Exit
contextMenu.Items.Add(new ToolStripSeparator());
contextMenu.Items.Add("Exit", null, (s, e) =>
{
hook.Dispose();
Application.Exit();
});
trayIcon.ContextMenuStrip = contextMenu;
trayIcon.BalloonTipTitle = "Better Ctrl+W";
trayIcon.BalloonTipText = "Universal Ctrl+W, because Microsoft didn't.";
trayIcon.ShowBalloonTip(500);
Application.Run();