-
Notifications
You must be signed in to change notification settings - Fork 1
/
Program.cs
83 lines (76 loc) · 3.42 KB
/
Program.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
namespace MandelZoom
{
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using Properties;
internal static class Program
{
private static Point mousePosition;
[STAThread]
private static void Main(string[] args)
{
if (args.Length == 0) RunConfig();
else if (args.Length == 1 && args[0].Length > 3 && args[0].Substring(0, 3).Equals("/c:", StringComparison.OrdinalIgnoreCase)) RunConfig(args[0].Substring(3));
else if (args.Length == 2 && args[0].Equals("/p", StringComparison.OrdinalIgnoreCase)) RunPreview(args[1]);
else if (args.Length == 1 && args[0].Equals("/s", StringComparison.OrdinalIgnoreCase)) RunScreenSaver();
}
private static void RunConfig(string owner = null)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var settingsForm = new SettingsForm();
long ownerHandle;
if (owner != null && long.TryParse(owner, out ownerHandle))
{
NativeMethods.SetFormOwner(settingsForm, (IntPtr)ownerHandle);
}
settingsForm.ShowDialog();
settingsForm.Dispose();
}
private static void RunPreview(string parent)
{
long parentHandle;
if (!long.TryParse(parent, out parentHandle)) return;
var previewForm = new ScreenSaverForm();
if (!NativeMethods.TrySetFormChildWindowStyle(previewForm)) return;
if (!NativeMethods.TrySetFormBoundsToMatchParent(previewForm, (IntPtr)parentHandle)) return;
NativeMethods.USER32.SetParent(previewForm.Handle, (IntPtr)parentHandle);
Application.Run(previewForm);
}
private static void RunScreenSaver()
{
var random = new Random();
var viewports = Settings.Default.SpanScreens
? new List<Rectangle> { Screen.AllScreens.Select(s => s.Bounds).Aggregate(Rectangle.Union) }
: Screen.AllScreens.Select(s => s.Bounds);
foreach (var view in viewports)
{
var screenSaverForm = new ScreenSaverForm
{
Bounds = view,
TopMost = true,
Opacity = Settings.Default.RandomOpacity ? (random.NextDouble() * 0.75D) + 0.25D : Settings.Default.OpacityPercent / 100D
};
screenSaverForm.KeyDown += (sender, e) => ShutDownScreenSaver();
screenSaverForm.MouseDown += (sender, e) => ShutDownScreenSaver();
screenSaverForm.MouseMove += (sender, e) =>
{
// Don't end the screen saver if the mouse only moved a tiny bit
if (mousePosition != Point.Empty && (e.X - mousePosition.X > 5 || e.X - mousePosition.X < -5 || e.Y - mousePosition.Y > 5 || e.Y - mousePosition.Y < -5)) ShutDownScreenSaver(); else mousePosition = e.Location;
};
screenSaverForm.Show();
}
Cursor.Hide();
Application.Run();
}
private static void ShutDownScreenSaver()
{
foreach (ScreenSaverForm screenSaverForm in Application.OpenForms) screenSaverForm.Hide();
Cursor.Show();
Application.Exit();
}
}
}