Skip to content

Commit 6f40c2c

Browse files
committed
Windows XP support
1 parent 2276ae9 commit 6f40c2c

File tree

7 files changed

+173
-33
lines changed

7 files changed

+173
-33
lines changed

AeroShot.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@
9696
<EmbeddedResource Include="Main.resx">
9797
<DependentUpon>Main.cs</DependentUpon>
9898
</EmbeddedResource>
99+
<EmbeddedResource Include="Tray.resx">
100+
<DependentUpon>Tray.cs</DependentUpon>
101+
</EmbeddedResource>
99102
</ItemGroup>
100103
<ItemGroup>
101104
<None Include="app.config" />

Hotkeys.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public Hotkeys()
3939
WindowsApi.RegisterHotKey(Handle, _windowId[0], MOD_ALT, (int)Keys.PrintScreen);
4040
WindowsApi.RegisterHotKey(Handle, _windowId[1], MOD_ALT | MOD_CONTROL, (int)Keys.PrintScreen);
4141

42-
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormClose);
42+
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormClose);
4343
}
4444

4545
private void FormClose(object sender, FormClosingEventArgs e)

Main.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ public MainForm()
8989

9090
private static bool GlassAvailable()
9191
{
92-
if (Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor > 1) return false;
92+
if ((Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor > 1) || Environment.OSVersion.Version.Major >= 10 || Environment.OSVersion.Version.Major < 6) return false;
9393

94-
bool aeroEnabled;
94+
bool aeroEnabled = true;
9595
WindowsApi.DwmIsCompositionEnabled(out aeroEnabled);
9696
return aeroEnabled;
9797
}

Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ internal static class Program
3636
[STAThread]
3737
private static void Main()
3838
{
39-
if (Environment.OSVersion.Version.Major < 6)
39+
/*if (Environment.OSVersion.Version.Major < 6)
4040
{
4141
MessageBox.Show("Windows Vista or newer is required.", Application.ProductName);
4242
return;
43-
}
43+
}*/
4444

4545
bool isFirstInstance;
4646

Screenshot.cs

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -122,28 +122,33 @@ internal static void CaptureWindow(ref ScreenshotTask data)
122122
}
123123
WindowsApi.SetForegroundWindow(data.WindowHandle);
124124

125-
bool AeroColorToggled = false;
126-
WindowsApi.DWM_COLORIZATION_PARAMS originalParameters;
127-
WindowsApi.DwmGetColorizationParameters(out originalParameters);
128-
if (data.CustomGlass && AeroEnabled())
129-
{
130-
// Original colorization parameters
131-
originalParameters.clrGlassReflectionIntensity = 50;
132-
133-
// Custom colorization parameters
134-
WindowsApi.DWM_COLORIZATION_PARAMS parameters;
135-
WindowsApi.DwmGetColorizationParameters(out parameters);
136-
parameters.clrAfterGlowBalance = 2;
137-
parameters.clrBlurBalance = 29;
138-
parameters.clrColor = ColorToBgra(data.AeroColor);
139-
parameters.nIntensity = 69;
140-
141-
// Call the DwmSetColorizationParameters to make the change take effect.
142-
WindowsApi.DwmSetColorizationParameters(ref parameters, false);
143-
AeroColorToggled = true;
144-
}
125+
bool AeroColorToggled = false;
126+
WindowsApi.DWM_COLORIZATION_PARAMS originalParameters = new WindowsApi.DWM_COLORIZATION_PARAMS();
127+
//TODO: reenable
128+
if (Environment.OSVersion.Version.Major >= 6)
129+
{
130+
WindowsApi.DwmGetColorizationParameters(out originalParameters);
131+
if (data.CustomGlass && AeroEnabled())
132+
{
133+
// Original colorization parameters
134+
originalParameters.clrGlassReflectionIntensity = 50;
135+
136+
// Custom colorization parameters
137+
WindowsApi.DWM_COLORIZATION_PARAMS parameters;
138+
WindowsApi.DwmGetColorizationParameters(out parameters);
139+
parameters.clrAfterGlowBalance = 2;
140+
parameters.clrBlurBalance = 29;
141+
parameters.clrColor = ColorToBgra(data.AeroColor);
142+
parameters.nIntensity = 69;
143+
144+
// Call the DwmSetColorizationParameters to make the change take effect.
145+
WindowsApi.DwmSetColorizationParameters(ref parameters, false);
146+
AeroColorToggled = true;
147+
}
148+
}
149+
145150

146-
bool ShadowToggled = false;
151+
bool ShadowToggled = false;
147152
if (data.DisableShadow && ShadowEnabled())
148153
{
149154
WindowsApi.SystemParametersInfo(SPI_SETDROPSHADOW, 0, false, 0);
@@ -167,8 +172,8 @@ internal static void CaptureWindow(ref ScreenshotTask data)
167172
name = name.Replace(inv.ToString(), string.Empty);
168173

169174
Bitmap[] s = CaptureCompositeScreenshot(ref data);
170-
171-
if (AeroColorToggled)
175+
176+
if (AeroColorToggled && Environment.OSVersion.Version.Major >= 6)
172177
{
173178
WindowsApi.DwmSetColorizationParameters(ref originalParameters, false);
174179
}
@@ -263,14 +268,14 @@ internal static void CaptureWindow(ref ScreenshotTask data)
263268
}
264269
}
265270
}
266-
catch (Exception)
271+
catch (Exception e)
267272
{
268273
if (data.WindowHandle != start && data.WindowHandle != taskbar)
269274
{
270275
WindowsApi.ShowWindow(start, 1);
271276
WindowsApi.ShowWindow(taskbar, 1);
272277
}
273-
MessageBox.Show("An error occurred while trying to take a screenshot.\r\n\r\nPlease make sure you have selected a valid window.",
278+
MessageBox.Show("An error occurred while trying to take a screenshot.\r\n\r\nPlease make sure you have selected a valid window.\r\n\r\n" + e.ToString(),
274279
"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
275280
}
276281
}
@@ -283,7 +288,7 @@ internal static void CaptureWindow(ref ScreenshotTask data)
283288

284289
private static bool AeroEnabled()
285290
{
286-
bool aeroEnabled;
291+
bool aeroEnabled = true;
287292
WindowsApi.DwmIsCompositionEnabled(out aeroEnabled);
288293
return aeroEnabled;
289294
}
@@ -389,7 +394,7 @@ private static unsafe Bitmap[] CaptureCompositeScreenshot(ref ScreenshotTask dat
389394
WindowsApi.SetWindowPos(backdrop.Handle, data.WindowHandle, rct.Left, rct.Top, rct.Right - rct.Left, rct.Bottom - rct.Top, SWP_NOACTIVATE);
390395
backdrop.Opacity = 1;
391396
Application.DoEvents();
392-
SendKeys.SendWait("%{F16}");
397+
//SendKeys.SendWait("%{F16}");
393398

394399
// Capture screenshot with white background
395400
Bitmap whiteShot = CaptureScreenRegion(new Rectangle(rct.Left, rct.Top, rct.Right - rct.Left, rct.Bottom - rct.Top));

Tray.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,5 +105,17 @@ protected override void Dispose(bool disposing)
105105

106106
base.Dispose(disposing);
107107
}
108-
}
108+
109+
private void InitializeComponent()
110+
{
111+
this.SuspendLayout();
112+
//
113+
// SysTray
114+
//
115+
this.ClientSize = new System.Drawing.Size(284, 261);
116+
this.Name = "SysTray";
117+
this.ResumeLayout(false);
118+
119+
}
120+
}
109121
}

Tray.resx

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<root>
3+
<!--
4+
Microsoft ResX Schema
5+
6+
Version 2.0
7+
8+
The primary goals of this format is to allow a simple XML format
9+
that is mostly human readable. The generation and parsing of the
10+
various data types are done through the TypeConverter classes
11+
associated with the data types.
12+
13+
Example:
14+
15+
... ado.net/XML headers & schema ...
16+
<resheader name="resmimetype">text/microsoft-resx</resheader>
17+
<resheader name="version">2.0</resheader>
18+
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
19+
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
20+
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
21+
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
22+
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
23+
<value>[base64 mime encoded serialized .NET Framework object]</value>
24+
</data>
25+
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
26+
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
27+
<comment>This is a comment</comment>
28+
</data>
29+
30+
There are any number of "resheader" rows that contain simple
31+
name/value pairs.
32+
33+
Each data row contains a name, and value. The row also contains a
34+
type or mimetype. Type corresponds to a .NET class that support
35+
text/value conversion through the TypeConverter architecture.
36+
Classes that don't support this are serialized and stored with the
37+
mimetype set.
38+
39+
The mimetype is used for serialized objects, and tells the
40+
ResXResourceReader how to depersist the object. This is currently not
41+
extensible. For a given mimetype the value must be set accordingly:
42+
43+
Note - application/x-microsoft.net.object.binary.base64 is the format
44+
that the ResXResourceWriter will generate, however the reader can
45+
read any of the formats listed below.
46+
47+
mimetype: application/x-microsoft.net.object.binary.base64
48+
value : The object must be serialized with
49+
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
50+
: and then encoded with base64 encoding.
51+
52+
mimetype: application/x-microsoft.net.object.soap.base64
53+
value : The object must be serialized with
54+
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
55+
: and then encoded with base64 encoding.
56+
57+
mimetype: application/x-microsoft.net.object.bytearray.base64
58+
value : The object must be serialized into a byte array
59+
: using a System.ComponentModel.TypeConverter
60+
: and then encoded with base64 encoding.
61+
-->
62+
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
63+
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
64+
<xsd:element name="root" msdata:IsDataSet="true">
65+
<xsd:complexType>
66+
<xsd:choice maxOccurs="unbounded">
67+
<xsd:element name="metadata">
68+
<xsd:complexType>
69+
<xsd:sequence>
70+
<xsd:element name="value" type="xsd:string" minOccurs="0" />
71+
</xsd:sequence>
72+
<xsd:attribute name="name" use="required" type="xsd:string" />
73+
<xsd:attribute name="type" type="xsd:string" />
74+
<xsd:attribute name="mimetype" type="xsd:string" />
75+
<xsd:attribute ref="xml:space" />
76+
</xsd:complexType>
77+
</xsd:element>
78+
<xsd:element name="assembly">
79+
<xsd:complexType>
80+
<xsd:attribute name="alias" type="xsd:string" />
81+
<xsd:attribute name="name" type="xsd:string" />
82+
</xsd:complexType>
83+
</xsd:element>
84+
<xsd:element name="data">
85+
<xsd:complexType>
86+
<xsd:sequence>
87+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
88+
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
89+
</xsd:sequence>
90+
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
91+
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
92+
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
93+
<xsd:attribute ref="xml:space" />
94+
</xsd:complexType>
95+
</xsd:element>
96+
<xsd:element name="resheader">
97+
<xsd:complexType>
98+
<xsd:sequence>
99+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
100+
</xsd:sequence>
101+
<xsd:attribute name="name" type="xsd:string" use="required" />
102+
</xsd:complexType>
103+
</xsd:element>
104+
</xsd:choice>
105+
</xsd:complexType>
106+
</xsd:element>
107+
</xsd:schema>
108+
<resheader name="resmimetype">
109+
<value>text/microsoft-resx</value>
110+
</resheader>
111+
<resheader name="version">
112+
<value>2.0</value>
113+
</resheader>
114+
<resheader name="reader">
115+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
116+
</resheader>
117+
<resheader name="writer">
118+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119+
</resheader>
120+
</root>

0 commit comments

Comments
 (0)