-
Notifications
You must be signed in to change notification settings - Fork 0
/
Main.cs
152 lines (140 loc) · 5.92 KB
/
Main.cs
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
using System;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
namespace SimpleTrayRunner
{
static class Settings
{
public static string Name = "SimpleTrayRunner";
public static string Ini = Name + ".ini";
public static string Log = Name + ".log";
public static bool Enabled = false;
public static bool EnableWinStart = false;
public static bool EnableLogs = false;
public static bool RunAtStart = false;
public static string RunAtStartPath = @"C:\Example\runAtStart.exe";
public static bool RunAtPower = false;
public static string RunAtPowerPath = @"C:\Example\runAtPowerChange.exe";
}
static class Main
{
public static void Log(string text)
{
if (!Settings.EnableLogs) { return; }
using (StreamWriter logFile = new StreamWriter(Settings.Log, true))
{
logFile.WriteLine("[" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "] " + text);
}
}
public static string GetOpenFileDialogPath()
{
OpenFileDialog dialog = new OpenFileDialog
{
InitialDirectory = AppDomain.CurrentDomain.BaseDirectory
};
dialog.ShowDialog();
return dialog.FileName;
}
public static void WriteIni(string IniPath)
{
IniFile ini = new IniFile(IniPath);
ini.Write("Enabled", Settings.Enabled ? "1" : "0");
ini.Write("EnableWinStart", Settings.EnableWinStart ? "1" : "0");
ini.Write("EnableLogs", Settings.EnableLogs ? "1" : "0");
ini.Write("RunAtStart", Settings.RunAtStart ? "1" : "0");
ini.Write("RunAtStartPath", Settings.RunAtStartPath);
ini.Write("RunAtPower", Settings.RunAtPower ? "1" : "0");
ini.Write("RunAtPowerPath", Settings.RunAtPowerPath);
}
public static void ReadIni(string IniPath)
{
if (!File.Exists(IniPath)) { return; }
IniFile ini = new IniFile(IniPath);
Settings.Enabled = ini.Read("Enabled") == "1";
Settings.EnableWinStart = ini.Read("EnableWinStart") == "1";
Settings.EnableLogs = ini.Read("EnableLogs") == "1";
Settings.RunAtStart = ini.Read("RunAtStart") == "1";
Settings.RunAtStartPath = ini.Read("RunAtStartPath");
Settings.RunAtPower = ini.Read("RunAtPower") == "1";
Settings.RunAtPowerPath = ini.Read("RunAtPowerPath");
}
public static void SetWinStartShortcut(bool Create = true)
{
string shortcutDestination = Path.Combine(
Environment.GetEnvironmentVariable("APPDATA"),
@"Microsoft\Windows\Start Menu\Programs\Startup\SimpleTrayRunner.lnk");
if (File.Exists(shortcutDestination)) { File.Delete(shortcutDestination); }
if (!Create) { return; }
Shortcut lnk = new Shortcut(Settings.Name + ".exe")
{
Destination = shortcutDestination,
Description = "Start STR at Windows startup"
};
lnk.Save();
}
public static void Job(string ItemPath)
{
if (!File.Exists(ItemPath)) { return; }
bool isPS1 = Path.GetExtension(ItemPath) == ".ps1";
Process.Start(new ProcessStartInfo
{
FileName = isPS1 ? "powershell.exe" : ItemPath,
Arguments = isPS1 ? $"-ep bypass -f \"{ItemPath}\"" : "",
WorkingDirectory = Path.GetDirectoryName(ItemPath),
});
}
}
static class PowerMode
{
public static void TriggerEnable() => Microsoft.Win32.SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
public static void TriggerDisable() => Microsoft.Win32.SystemEvents.PowerModeChanged -= SystemEvents_PowerModeChanged;
public static void SystemEvents_PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs e)
{
if (e.Mode == Microsoft.Win32.PowerModes.StatusChange)
{
if (SystemInformation.PowerStatus.BatteryLifePercent == 1.0)
{
Main.Log("(Event) PowerModes.StatusChange: 99~100%");
return;
}
Main.Log($"(Event) PowerModes.StatusChange: '{Settings.RunAtPowerPath}'");
if (Settings.Enabled) { Main.Job(Settings.RunAtPowerPath); }
}
else { Main.Log("(Event) PowerModes.Resume/Suspend: ~"); }
}
}
class Shortcut
{
public string TargetPath { get; private set; }
public string Destination;
public string WorkingDirectory;
public string Description;
public string Hotkey;
public string IconLocation;
public Shortcut(string Target) => TargetPath = Path.GetFullPath(Target);
public void Resolve()
{
if (Destination == null)
{
Destination = Path.Combine(
Path.GetDirectoryName(TargetPath),
Path.GetFileNameWithoutExtension(TargetPath) + ".lnk");
}
if (WorkingDirectory == null) { WorkingDirectory = Path.GetDirectoryName(TargetPath); }
if (IconLocation == null) { IconLocation = TargetPath; }
}
public void Save()
{
Resolve();
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
IWshRuntimeLibrary.IWshShortcut shortcut = shell.CreateShortcut(Destination);
shortcut.TargetPath = TargetPath;
shortcut.WorkingDirectory = WorkingDirectory;
shortcut.IconLocation = IconLocation;
if (Description != null) { shortcut.Description = Description; }
if (Hotkey != null) { shortcut.Hotkey = Hotkey; }
shortcut.Save();
}
}
}