Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
421d3b2fb2 | ||
|
|
2f2b2b2a17 | ||
|
|
88fa2c6efb | ||
|
|
cfed49d76d | ||
|
|
9c7dbaa938 | ||
|
|
8f57b0e66e | ||
|
|
0eda51cd73 | ||
|
|
49f8b087cd | ||
|
|
dee378192c | ||
|
|
967f674c4c | ||
|
|
feecd81887 | ||
|
|
30778a3533 | ||
|
|
5dedf5183f | ||
|
|
8deda19617 | ||
|
|
d0e739e2cf | ||
|
|
b65392fbc7 | ||
|
|
bc6049fc39 | ||
|
|
3059c290c4 | ||
|
|
43f3299e03 | ||
|
|
415c009e8a | ||
|
|
bf026d3d81 | ||
|
|
acc7c036e9 | ||
|
|
4dca01dc99 | ||
|
|
8f55e160ba | ||
|
|
dca537457a | ||
|
|
964ed87f76 | ||
|
|
d91cc98021 | ||
|
|
cd535d0840 | ||
|
|
9bd91b4c11 | ||
|
|
0cf681f443 | ||
|
|
b2fe7db07a | ||
|
|
fa324dc48c | ||
|
|
c752d9cb37 | ||
|
|
6f39ffb3bc | ||
|
|
3ae83bda73 |
No files matched your search
Binary file not shown.
@@ -115,6 +115,7 @@
|
|||||||
<ConformanceMode>true</ConformanceMode>
|
<ConformanceMode>true</ConformanceMode>
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
@@ -144,6 +145,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="framework.h" />
|
<ClInclude Include="framework.h" />
|
||||||
<ClInclude Include="pch.h" />
|
<ClInclude Include="pch.h" />
|
||||||
|
<ClInclude Include="resource.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="dllmain.cpp" />
|
<ClCompile Include="dllmain.cpp" />
|
||||||
@@ -155,6 +157,9 @@
|
|||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="PopcntCheck.cpp" />
|
<ClCompile Include="PopcntCheck.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="CpuCheckNative.rc" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
|||||||
@@ -21,6 +21,9 @@
|
|||||||
<ClInclude Include="pch.h">
|
<ClInclude Include="pch.h">
|
||||||
<Filter>Headerdateien</Filter>
|
<Filter>Headerdateien</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="resource.h">
|
||||||
|
<Filter>Headerdateien</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="dllmain.cpp">
|
<ClCompile Include="dllmain.cpp">
|
||||||
@@ -33,4 +36,9 @@
|
|||||||
<Filter>Quelldateien</Filter>
|
<Filter>Quelldateien</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="CpuCheckNative.rc">
|
||||||
|
<Filter>Ressourcendateien</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
//{{NO_DEPENDENCIES}}
|
||||||
|
// Microsoft Visual C++ generated include file.
|
||||||
|
// Used by CpuCheckNative.rc
|
||||||
|
|
||||||
|
// Nächste Standardwerte für neue Objekte
|
||||||
|
//
|
||||||
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
#define _APS_NEXT_RESOURCE_VALUE 101
|
||||||
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
+26
@@ -5,16 +5,42 @@ VisualStudioVersion = 17.12.35527.113
|
|||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Flyby11", "FlybyScript\Flyby11.csproj", "{503AF34B-7544-4C43-A099-2B948C3FF49A}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Flyby11", "FlybyScript\Flyby11.csproj", "{503AF34B-7544-4C43-A099-2B948C3FF49A}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CpuCheckNative", "CpuCheckNative\CpuCheckNative.vcxproj", "{A2038E07-E21F-4B05-B811-3052A2B014BC}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Release|Any CPU.Build.0 = Release|Any CPU
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{503AF34B-7544-4C43-A099-2B948C3FF49A}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Debug|Any CPU.Build.0 = Debug|x64
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Release|Any CPU.ActiveCfg = Release|x64
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Release|Any CPU.Build.0 = Release|x64
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Release|x64.Build.0 = Release|x64
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{A2038E07-E21F-4B05-B811-3052A2B014BC}.Release|x86.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
namespace Flyby11
|
||||||
|
{
|
||||||
|
partial class CompatibilityForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// CompatibilityForm
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.AutoScroll = true;
|
||||||
|
this.ClientSize = new System.Drawing.Size(530, 304);
|
||||||
|
this.Name = "CompatibilityForm";
|
||||||
|
this.ShowIcon = false;
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace Flyby11
|
||||||
|
{
|
||||||
|
public partial class CompatibilityForm : Form
|
||||||
|
{
|
||||||
|
|
||||||
|
public CompatibilityForm(bool hasPopcnt, bool hasSse42)
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
InitLayout(hasPopcnt, hasSse42);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InitLayout(bool hasPopcnt, bool hasSse42)
|
||||||
|
{
|
||||||
|
this.Text = "Flyby11 - Windows 11 Compatibility Check via CpuCheckNative.dll";
|
||||||
|
this.StartPosition = FormStartPosition.CenterScreen;
|
||||||
|
this.Font = new Font("Segoe UI", 10);
|
||||||
|
|
||||||
|
// icon font for check marks
|
||||||
|
var iconFont = new Font("Segoe MDL2 Assets", 18);
|
||||||
|
|
||||||
|
// Label for CPU POPCNT Support
|
||||||
|
var lblPopcnt = new Label { Text = "CPU POPCNT:", Location = new Point(30, 30), AutoSize = true };
|
||||||
|
var iconPopcnt = new Label
|
||||||
|
{
|
||||||
|
Text = hasPopcnt ? "\uE73D" : "\uE10A", // ✔ or ❌
|
||||||
|
Font = iconFont,
|
||||||
|
ForeColor = hasPopcnt ? Color.ForestGreen : Color.Crimson,
|
||||||
|
Location = new Point(280, 30),
|
||||||
|
AutoSize = true
|
||||||
|
};
|
||||||
|
|
||||||
|
// Label for SSE4.2 Support
|
||||||
|
var lblSse42 = new Label { Text = "SSE4.2:", Location = new Point(30, 70), AutoSize = true };
|
||||||
|
var iconSse42 = new Label
|
||||||
|
{
|
||||||
|
Text = hasSse42 ? "\uE73D" : "\uE10A",
|
||||||
|
Font = iconFont,
|
||||||
|
ForeColor = hasSse42 ? Color.ForestGreen : Color.Crimson,
|
||||||
|
Location = new Point(280, 70),
|
||||||
|
AutoSize = true
|
||||||
|
};
|
||||||
|
|
||||||
|
// Label for Upgrade Probability
|
||||||
|
var lblProb = new Label
|
||||||
|
{
|
||||||
|
Text = "Upgrade Probability:",
|
||||||
|
Location = new Point(30, 120),
|
||||||
|
AutoSize = true,
|
||||||
|
Font = new Font("Segoe UI", 10, FontStyle.Bold)
|
||||||
|
};
|
||||||
|
|
||||||
|
var result = new Label
|
||||||
|
{
|
||||||
|
Text = (hasPopcnt && hasSse42) ? "Very High" : "Low",
|
||||||
|
Location = new Point(250, 120),
|
||||||
|
ForeColor = (hasPopcnt && hasSse42) ? Color.ForestGreen : Color.Crimson,
|
||||||
|
AutoSize = true
|
||||||
|
};
|
||||||
|
|
||||||
|
// Adding the info about upgrade status
|
||||||
|
var infoLabel = new Label
|
||||||
|
{
|
||||||
|
Text = "Note: If both POPCNT and SSE4.2 are supported, your upgrade chances are very high.\n" +
|
||||||
|
"Otherwise, you may face issues while upgrading.",
|
||||||
|
Location = new Point(30, 160),
|
||||||
|
AutoSize = true,
|
||||||
|
Font = new Font("Segoe UI", 9, FontStyle.Italic),
|
||||||
|
ForeColor = Color.Gray
|
||||||
|
};
|
||||||
|
|
||||||
|
// additional info
|
||||||
|
var additionalInfoLabel = new Label
|
||||||
|
{
|
||||||
|
Text = "This app successfully helped upgrade over half a million PCs to Windows 11!\n" +
|
||||||
|
"Fewer e-waste, lower costs, and no need for a new setup. " +
|
||||||
|
"Stay updated. Best wishes, Belim. ",
|
||||||
|
Dock = DockStyle.Bottom,
|
||||||
|
AutoSize = true,
|
||||||
|
Font = new Font("Segoe UI", 9, FontStyle.Italic),
|
||||||
|
ForeColor = Color.DimGray
|
||||||
|
};
|
||||||
|
|
||||||
|
// W10 support-end countdown
|
||||||
|
var supportEndDate = new DateTime(2025, 10, 14);
|
||||||
|
var daysLeft = (supportEndDate - DateTime.Today).Days;
|
||||||
|
|
||||||
|
var countdownLabel = new Label
|
||||||
|
{
|
||||||
|
Text = $"⚠️ Windows 10 support ends in {daysLeft} days – on October 14, 2025!",
|
||||||
|
Dock = DockStyle.Bottom,
|
||||||
|
AutoSize = true,
|
||||||
|
Font = new Font("Segoe UI", 9.5f, FontStyle.Bold),
|
||||||
|
ForeColor = Color.Red,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Button Upgrade
|
||||||
|
var upgradeButton = new Button
|
||||||
|
{
|
||||||
|
Text = "Start Upgrade Now!",
|
||||||
|
Dock = DockStyle.Bottom,
|
||||||
|
AutoSize = true,
|
||||||
|
Size = new Size(180, 40),
|
||||||
|
BackColor = Color.ForestGreen,
|
||||||
|
ForeColor = Color.White,
|
||||||
|
Font = new Font("Segoe UI", 12, FontStyle.Bold),
|
||||||
|
FlatStyle = FlatStyle.Flat
|
||||||
|
};
|
||||||
|
upgradeButton.FlatAppearance.BorderSize = 0;
|
||||||
|
upgradeButton.Click += UpgradeButton_Click;
|
||||||
|
|
||||||
|
|
||||||
|
this.Controls.Add(lblPopcnt);
|
||||||
|
this.Controls.Add(iconPopcnt);
|
||||||
|
this.Controls.Add(lblSse42);
|
||||||
|
this.Controls.Add(iconSse42);
|
||||||
|
this.Controls.Add(lblProb);
|
||||||
|
this.Controls.Add(result);
|
||||||
|
this.Controls.Add(infoLabel);
|
||||||
|
|
||||||
|
this.Controls.Add(upgradeButton);
|
||||||
|
this.Controls.Add(countdownLabel);
|
||||||
|
// this.Controls.Add(additionalInfoLabel);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void UpgradeButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
//MessageBox.Show("You are good to go! Proceeding with the upgrade...", "Upgrade Started", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
this.Close();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
+133
-57
@@ -18,7 +18,7 @@ namespace Flyby11
|
|||||||
|
|
||||||
private FlowLayoutPanel _faqContentPanel;
|
private FlowLayoutPanel _faqContentPanel;
|
||||||
|
|
||||||
// List of individual FAQ entry steps (to add one by one)
|
// List of individual FAQ entry steps
|
||||||
private readonly List<Action<FlowLayoutPanel>> _faqSteps = new List<Action<FlowLayoutPanel>>();
|
private readonly List<Action<FlowLayoutPanel>> _faqSteps = new List<Action<FlowLayoutPanel>>();
|
||||||
|
|
||||||
private int _currentFaqStep = 0;
|
private int _currentFaqStep = 0;
|
||||||
@@ -68,8 +68,8 @@ namespace Flyby11
|
|||||||
var last = _faqContentPanel.Controls[_faqContentPanel.Controls.Count - 1];
|
var last = _faqContentPanel.Controls[_faqContentPanel.Controls.Count - 1];
|
||||||
_faqContentPanel.ScrollControlIntoView(last);
|
_faqContentPanel.ScrollControlIntoView(last);
|
||||||
// Add some space below the last element
|
// Add some space below the last element
|
||||||
var m =last.Margin;
|
var m = last.Margin;
|
||||||
last.Margin = new Padding(m.Left, m.Top, m.Right, 20);
|
last.Margin = new Padding(m.Left, m.Top, m.Right, 20);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -103,68 +103,57 @@ namespace Flyby11
|
|||||||
AddLabel(parent, Locales.Strings.faq_q1, new Font("Segoe UI Variable Display", 10.5f, FontStyle.Bold), ContentAlignment.TopLeft, 11);
|
AddLabel(parent, Locales.Strings.faq_q1, new Font("Segoe UI Variable Display", 10.5f, FontStyle.Bold), ContentAlignment.TopLeft, 11);
|
||||||
AddLabel(parent, Locales.Strings.faq_a1, new Font("Segoe UI Variable Display", 11), ContentAlignment.TopLeft, 11);
|
AddLabel(parent, Locales.Strings.faq_a1, new Font("Segoe UI Variable Display", 11), ContentAlignment.TopLeft, 11);
|
||||||
|
|
||||||
// Links below the answer
|
|
||||||
var linkPanel = new FlowLayoutPanel
|
var downloadOptions = new ComboBox
|
||||||
{
|
{
|
||||||
AutoSize = true,
|
DropDownStyle = ComboBoxStyle.DropDownList,
|
||||||
FlowDirection = FlowDirection.LeftToRight,
|
Font = new Font("Segoe UI Variable Display", 10.5f),
|
||||||
WrapContents = true
|
Width = 300,
|
||||||
|
Padding = new Padding(5)
|
||||||
};
|
};
|
||||||
|
|
||||||
AddFAQItem(linkPanel, Locales.Strings.faq_downloadMS, "https://www.microsoft.com/software-download/windows11");
|
downloadOptions.Items.Add("Select Download Source"); // Add default placeholder item
|
||||||
AddFAQItemWithScript(linkPanel, Locales.Strings.faq_downloadFido, "or", "https://raw.githubusercontent.com/pbatard/Fido/refs/heads/master/Fido.ps1");
|
downloadOptions.Items.Add(Locales.Strings.faq_downloadMS); // Index 1
|
||||||
|
downloadOptions.Items.Add(Locales.Strings.faq_downloadFido); // Index 2
|
||||||
|
downloadOptions.Items.Add("Media Creation Tool (Beginner-Friendly)"); // Index 3
|
||||||
|
|
||||||
parent.Controls.Add(linkPanel);
|
downloadOptions.SelectedIndex = 0; // Set default selection
|
||||||
}
|
|
||||||
|
|
||||||
|
downloadOptions.SelectedIndexChanged += (s, e) =>
|
||||||
// Simple link-only FAQ entry
|
|
||||||
private void AddFAQItem(FlowLayoutPanel parent, string linkText, string linkUrl)
|
|
||||||
{
|
|
||||||
var linkLabel = new LinkLabel
|
|
||||||
{
|
{
|
||||||
Text = linkText,
|
switch (downloadOptions.SelectedIndex)
|
||||||
Font = new Font("Segoe UI Variable Display", 10.5f, FontStyle.Underline),
|
{
|
||||||
LinkColor = Color.Blue,
|
case 1:
|
||||||
AutoSize = true,
|
// Open Microsoft ISO download page
|
||||||
Padding = new Padding(10),
|
Process.Start("https://www.microsoft.com/software-download/windows11");
|
||||||
TextAlign = ContentAlignment.TopLeft,
|
break;
|
||||||
UseCompatibleTextRendering = true
|
case 2:
|
||||||
|
// Download and run Fido script
|
||||||
|
DownloadAndRunFidoScript("https://raw.githubusercontent.com/pbatard/Fido/refs/heads/master/Fido.ps1");
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
// Handle Media Creation Tool download process
|
||||||
|
HandleMediaCreationToolDownload();
|
||||||
|
break;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
linkLabel.LinkClicked += (sender, e) => Process.Start(linkUrl);
|
parent.Controls.Add(downloadOptions);
|
||||||
parent.Controls.Add(linkLabel);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adds a downloadable script link (e.g., Fido.ps1)
|
/// <summary>
|
||||||
private void AddFAQItemWithScript(FlowLayoutPanel parent, string linkText, string description, string scriptUrl)
|
/// Downloads and executes the Fido PowerShell script.
|
||||||
{
|
/// </summary>
|
||||||
AddLabel(parent, description, new Font("Segoe UI Variable Display", 9), ContentAlignment.TopLeft, 11);
|
void DownloadAndRunFidoScript(string scriptUrl)
|
||||||
|
|
||||||
var linkLabel = new LinkLabel
|
|
||||||
{
|
|
||||||
Text = linkText,
|
|
||||||
Font = new Font("Segoe UI Variable Display", 10.5f, FontStyle.Underline),
|
|
||||||
LinkColor = Color.Blue,
|
|
||||||
AutoSize = true,
|
|
||||||
Padding = new Padding(10),
|
|
||||||
TextAlign = ContentAlignment.TopLeft,
|
|
||||||
UseCompatibleTextRendering = true
|
|
||||||
};
|
|
||||||
|
|
||||||
linkLabel.Click += (sender, e) =>
|
|
||||||
{
|
{
|
||||||
string tempScriptPath = Path.Combine(Path.GetTempPath(), "Fido.ps1");
|
string tempScriptPath = Path.Combine(Path.GetTempPath(), "Fido.ps1");
|
||||||
|
|
||||||
try
|
using (var client = new WebClient())
|
||||||
{
|
{
|
||||||
using (var client = new WebClient())
|
try
|
||||||
{
|
{
|
||||||
// Download script to temp folder
|
client.DownloadFile(scriptUrl, tempScriptPath);
|
||||||
client.DownloadFile(new Uri(scriptUrl), tempScriptPath);
|
_updateStatus("Fido script downloaded successfully. Running it now...");
|
||||||
_updateStatus("Fido downloaded successfully! Now running the script...");
|
|
||||||
|
|
||||||
// Run script using elevated PowerShell
|
|
||||||
Process.Start(new ProcessStartInfo
|
Process.Start(new ProcessStartInfo
|
||||||
{
|
{
|
||||||
FileName = "powershell.exe",
|
FileName = "powershell.exe",
|
||||||
@@ -174,16 +163,59 @@ namespace Flyby11
|
|||||||
UseShellExecute = true
|
UseShellExecute = true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_updateStatus("Error downloading or running Fido: " + ex.Message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Handles download, optional tutorial, and execution of the Media Creation Tool.
|
||||||
|
/// </summary>
|
||||||
|
void HandleMediaCreationToolDownload()
|
||||||
|
{
|
||||||
|
var infoResult = MessageBox.Show(
|
||||||
|
"With the Media Creation Tool, you can either upgrade your PC or create an ISO file.\n\nImportant: In the step 'Choose which media to use', make sure to select 'ISO file'.\n\nIf you're unsure, would you like to watch a recommended YouTube tutorial on how to do this?",
|
||||||
|
"Media Creation Tool Information",
|
||||||
|
MessageBoxButtons.YesNo,
|
||||||
|
MessageBoxIcon.Information);
|
||||||
|
|
||||||
|
if (infoResult == DialogResult.Yes)
|
||||||
{
|
{
|
||||||
_updateStatus("Error downloading or running the script: " + ex.Message);
|
Process.Start("https://www.youtube.com/watch?v=dNl1FHajW9w");
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
parent.Controls.Add(linkLabel);
|
using (var saveDialog = new SaveFileDialog())
|
||||||
|
{
|
||||||
|
saveDialog.Title = "Save Media Creation Tool";
|
||||||
|
saveDialog.Filter = "Executable|*.exe";
|
||||||
|
saveDialog.FileName = "MediaCreationTool.exe";
|
||||||
|
|
||||||
|
if (saveDialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
using (var client = new WebClient())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
client.DownloadFile("https://go.microsoft.com/fwlink/?linkid=2156295", saveDialog.FileName);
|
||||||
|
MessageBox.Show("Media Creation Tool downloaded successfully!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
|
||||||
|
var runResult = MessageBox.Show("Do you want to run the Media Creation Tool now?", "Run Tool", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
||||||
|
if (runResult == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
Process.Start(saveDialog.FileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Error downloading the Media Creation Tool: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adds any generic label to the flow panel
|
// Adds any generic label to the flow panel
|
||||||
private void AddLabel(FlowLayoutPanel parent, string text, Font font, ContentAlignment alignment, int padding = 0)
|
private void AddLabel(FlowLayoutPanel parent, string text, Font font, ContentAlignment alignment, int padding = 0)
|
||||||
{
|
{
|
||||||
@@ -237,10 +269,54 @@ namespace Flyby11
|
|||||||
}
|
}
|
||||||
|
|
||||||
// -- Individual FAQ entries --
|
// -- Individual FAQ entries --
|
||||||
|
// Donation
|
||||||
private void AddFaq2(FlowLayoutPanel panel)
|
private void AddFaq2(FlowLayoutPanel panel)
|
||||||
{
|
{
|
||||||
AddFAQItem(panel, Locales.Strings.faq_q2, Locales.Strings.faq_a2, Locales.Strings.faq_a2Link, "https://www.paypal.com/donate?hosted_button_id=MY7HX4QLYR4KG");
|
var donateContainer = new FlowLayoutPanel
|
||||||
|
{
|
||||||
|
FlowDirection = FlowDirection.TopDown,
|
||||||
|
AutoSize = true,
|
||||||
|
AutoSizeMode = AutoSizeMode.GrowAndShrink,
|
||||||
|
BackColor = Color.FromArgb(255, 182, 193),
|
||||||
|
Padding = new Padding(10),
|
||||||
|
Margin = new Padding(0, 10, 0, 10),
|
||||||
|
WrapContents = false
|
||||||
|
};
|
||||||
|
|
||||||
|
var qLabel = new Label
|
||||||
|
{
|
||||||
|
Text = Locales.Strings.faq_q2,
|
||||||
|
Font = new Font("Comic Sans MS", 11.5f, FontStyle.Bold),
|
||||||
|
AutoSize = true,
|
||||||
|
Padding = new Padding(0, 0, 0, 5),
|
||||||
|
UseCompatibleTextRendering = true
|
||||||
|
};
|
||||||
|
|
||||||
|
var aLabel = new Label
|
||||||
|
{
|
||||||
|
Text = Locales.Strings.faq_a2,
|
||||||
|
Font = new Font("Segoe UI Variable Display", 11),
|
||||||
|
AutoSize = true,
|
||||||
|
Padding = new Padding(0, 0, 0, 5),
|
||||||
|
UseCompatibleTextRendering = true
|
||||||
|
};
|
||||||
|
|
||||||
|
var donateLink = new LinkLabel
|
||||||
|
{
|
||||||
|
Text = Locales.Strings.faq_a2Link,
|
||||||
|
Font = new Font("Comic Sans MS", 10.5f, FontStyle.Underline),
|
||||||
|
LinkColor = Color.MediumBlue,
|
||||||
|
AutoSize = true,
|
||||||
|
UseCompatibleTextRendering = true
|
||||||
|
};
|
||||||
|
donateLink.LinkClicked += (sender, e) => Process.Start("https://www.paypal.com/donate?hosted_button_id=MY7HX4QLYR4KG");
|
||||||
|
|
||||||
|
donateContainer.Controls.Add(qLabel);
|
||||||
|
donateContainer.Controls.Add(aLabel);
|
||||||
|
donateContainer.Controls.Add(donateLink);
|
||||||
|
|
||||||
|
// Add to parent panel
|
||||||
|
panel.Controls.Add(donateContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddFaq3(FlowLayoutPanel panel)
|
private void AddFaq3(FlowLayoutPanel panel)
|
||||||
|
|||||||
@@ -12,6 +12,21 @@
|
|||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
<Deterministic>true</Deterministic>
|
<Deterministic>true</Deterministic>
|
||||||
|
<PublishUrl>publish\</PublishUrl>
|
||||||
|
<Install>true</Install>
|
||||||
|
<InstallFrom>Disk</InstallFrom>
|
||||||
|
<UpdateEnabled>false</UpdateEnabled>
|
||||||
|
<UpdateMode>Foreground</UpdateMode>
|
||||||
|
<UpdateInterval>7</UpdateInterval>
|
||||||
|
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||||
|
<UpdatePeriodically>false</UpdatePeriodically>
|
||||||
|
<UpdateRequired>false</UpdateRequired>
|
||||||
|
<MapFileExtensions>true</MapFileExtensions>
|
||||||
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
|
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||||
|
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||||
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
@@ -64,6 +79,12 @@
|
|||||||
<Compile Include="ClippyUI.Designer.cs">
|
<Compile Include="ClippyUI.Designer.cs">
|
||||||
<DependentUpon>ClippyUI.cs</DependentUpon>
|
<DependentUpon>ClippyUI.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="CompatibilityForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="CompatibilityForm.Designer.cs">
|
||||||
|
<DependentUpon>CompatibilityForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="FAQHandler.cs" />
|
<Compile Include="FAQHandler.cs" />
|
||||||
<Compile Include="IsoHandler.cs" />
|
<Compile Include="IsoHandler.cs" />
|
||||||
<Compile Include="Locales\Strings.Designer.cs">
|
<Compile Include="Locales\Strings.Designer.cs">
|
||||||
@@ -78,6 +99,12 @@
|
|||||||
<Compile Include="MainForm.Designer.cs">
|
<Compile Include="MainForm.Designer.cs">
|
||||||
<DependentUpon>MainForm.cs</DependentUpon>
|
<DependentUpon>MainForm.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="ProblemsForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="ProblemsForm.Designer.cs">
|
||||||
|
<DependentUpon>ProblemsForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="Properties\Resources.Designer.cs">
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
@@ -92,13 +119,20 @@
|
|||||||
<EmbeddedResource Include="ClippyUI.resx">
|
<EmbeddedResource Include="ClippyUI.resx">
|
||||||
<DependentUpon>ClippyUI.cs</DependentUpon>
|
<DependentUpon>ClippyUI.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="CompatibilityForm.resx">
|
||||||
|
<DependentUpon>CompatibilityForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Locales\Strings.ar.resx" />
|
<EmbeddedResource Include="Locales\Strings.ar.resx" />
|
||||||
<EmbeddedResource Include="Locales\Strings.cs-CZ.resx" />
|
<EmbeddedResource Include="Locales\Strings.cs-CZ.resx" />
|
||||||
<EmbeddedResource Include="Locales\Strings.de.resx" />
|
<EmbeddedResource Include="Locales\Strings.de.resx" />
|
||||||
<EmbeddedResource Include="Locales\Strings.fr.resx" />
|
<EmbeddedResource Include="Locales\Strings.fr.resx" />
|
||||||
|
<EmbeddedResource Include="Locales\Strings.he.resx" />
|
||||||
|
<EmbeddedResource Include="Locales\Strings.hu.resx" />
|
||||||
<EmbeddedResource Include="Locales\Strings.it.resx" />
|
<EmbeddedResource Include="Locales\Strings.it.resx" />
|
||||||
<EmbeddedResource Include="Locales\Strings.ja.resx" />
|
<EmbeddedResource Include="Locales\Strings.ja.resx" />
|
||||||
|
<EmbeddedResource Include="Locales\Strings.nl.resx" />
|
||||||
<EmbeddedResource Include="Locales\Strings.pl.resx" />
|
<EmbeddedResource Include="Locales\Strings.pl.resx" />
|
||||||
|
<EmbeddedResource Include="Locales\Strings.ru.resx" />
|
||||||
<EmbeddedResource Include="Locales\Strings.sv-SE.resx" />
|
<EmbeddedResource Include="Locales\Strings.sv-SE.resx" />
|
||||||
<EmbeddedResource Include="Locales\Strings.tr.resx" />
|
<EmbeddedResource Include="Locales\Strings.tr.resx" />
|
||||||
<EmbeddedResource Include="Locales\Strings.zh-CN.resx" />
|
<EmbeddedResource Include="Locales\Strings.zh-CN.resx" />
|
||||||
@@ -110,6 +144,9 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
|
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="ProblemsForm.resx">
|
||||||
|
<DependentUpon>ProblemsForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>PublicResXFileCodeGenerator</Generator>
|
<Generator>PublicResXFileCodeGenerator</Generator>
|
||||||
@@ -132,6 +169,17 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="AppIcon.ico" />
|
<Content Include="AppIcon.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
<ItemGroup>
|
||||||
|
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
<ProductName>Microsoft .NET Framework 4.8 %28x86 und x64%29</ProductName>
|
||||||
|
<Install>true</Install>
|
||||||
|
</BootstrapperPackage>
|
||||||
|
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||||
|
<Install>false</Install>
|
||||||
|
</BootstrapperPackage>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
+69
-65
@@ -1,14 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Runtime.Remoting.Lifetime;
|
|
||||||
using System.Text;
|
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
|
|
||||||
|
|
||||||
namespace Flyby11
|
namespace Flyby11
|
||||||
{
|
{
|
||||||
@@ -22,7 +18,7 @@ namespace Flyby11
|
|||||||
_updateStatus = updateStatus;
|
_updateStatus = updateStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task HandleIso(string isoPath)
|
public async Task HandleIso(string isoPath, bool experimentalEnabled)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -41,8 +37,7 @@ namespace Flyby11
|
|||||||
string quotedIsoPath = $"\"{isoPath}\"";
|
string quotedIsoPath = $"\"{isoPath}\"";
|
||||||
|
|
||||||
// Pass the quoted path to ExecutePowerShellCommand
|
// Pass the quoted path to ExecutePowerShellCommand
|
||||||
await ExecutePowerShellCommand($"Mount-DiskImage -ImagePath {quotedIsoPath}");
|
string driveLetter = await MountIsoAndGetDriveLetter(isoPath);
|
||||||
string driveLetter = await GetMountedDriveLetter();
|
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(driveLetter))
|
if (string.IsNullOrEmpty(driveLetter))
|
||||||
{
|
{
|
||||||
@@ -56,7 +51,7 @@ namespace Flyby11
|
|||||||
string setupPath = Path.Combine(driveLetter, "sources", "setupprep.exe");
|
string setupPath = Path.Combine(driveLetter, "sources", "setupprep.exe");
|
||||||
if (File.Exists(setupPath))
|
if (File.Exists(setupPath))
|
||||||
{
|
{
|
||||||
await RunSetupWithAdminRights(setupPath);
|
await RunSetupWithAdminRights(setupPath, experimentalEnabled);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -65,7 +60,6 @@ namespace Flyby11
|
|||||||
"Error",
|
"Error",
|
||||||
MessageBoxButtons.OK,
|
MessageBoxButtons.OK,
|
||||||
MessageBoxIcon.Error);
|
MessageBoxIcon.Error);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -75,74 +69,80 @@ namespace Flyby11
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<string> GetMountedDriveLetter()
|
private async Task<string> MountIsoAndGetDriveLetter(string isoPath)
|
||||||
{
|
{
|
||||||
var drives = DriveInfo.GetDrives();
|
try
|
||||||
foreach (var drive in drives)
|
|
||||||
{
|
{
|
||||||
if (drive.DriveType == DriveType.CDRom && drive.IsReady)
|
_updateStatus("Mounting ISO...");
|
||||||
|
|
||||||
|
// PowerShell script to mount ISO and get the assigned drive letter
|
||||||
|
string script = $@"
|
||||||
|
$iso = Mount-DiskImage -ImagePath '{isoPath}' -PassThru
|
||||||
|
$volumes = Get-Volume -DiskImage $iso
|
||||||
|
$volumes.DriveLetter
|
||||||
|
";
|
||||||
|
|
||||||
|
using (var process = new Process())
|
||||||
{
|
{
|
||||||
return drive.Name.Substring(0, 2);
|
process.StartInfo.FileName = "powershell.exe";
|
||||||
|
process.StartInfo.Arguments = $"-NoProfile -ExecutionPolicy Bypass -Command \"{script}\"";
|
||||||
|
process.StartInfo.RedirectStandardOutput = true;
|
||||||
|
process.StartInfo.RedirectStandardError = true;
|
||||||
|
process.StartInfo.UseShellExecute = false;
|
||||||
|
process.StartInfo.CreateNoWindow = true;
|
||||||
|
|
||||||
|
process.Start();
|
||||||
|
|
||||||
|
string output = await process.StandardOutput.ReadToEndAsync();
|
||||||
|
string error = await process.StandardError.ReadToEndAsync();
|
||||||
|
|
||||||
|
await process.WaitForExitAsync();
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(error))
|
||||||
|
{
|
||||||
|
_updateStatus("PowerShell error during mount: " + error);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
string driveLetter = output.Trim();
|
||||||
|
if (!string.IsNullOrWhiteSpace(driveLetter))
|
||||||
|
{
|
||||||
|
_updateStatus($"ISO mounted successfully at {driveLetter}:\\");
|
||||||
|
return $"{driveLetter}:\\";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_updateStatus("Failed to retrieve drive letter after mounting ISO.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
catch (Exception ex)
|
||||||
}
|
|
||||||
|
|
||||||
private async Task ExecutePowerShellCommand(string command)
|
|
||||||
{
|
|
||||||
using (var process = new Process())
|
|
||||||
{
|
{
|
||||||
// Escape the command to ensure spaces in paths are handled
|
_updateStatus("Exception during mounting: " + ex.Message);
|
||||||
string escapedCommand = command.Replace("\"", "\\\"");
|
return null;
|
||||||
|
|
||||||
process.StartInfo.FileName = "powershell.exe";
|
|
||||||
process.StartInfo.Arguments = $"-NoProfile -ExecutionPolicy Bypass -Command \"{escapedCommand}\"";
|
|
||||||
process.StartInfo.RedirectStandardOutput = true;
|
|
||||||
process.StartInfo.RedirectStandardError = true;
|
|
||||||
process.StartInfo.UseShellExecute = false;
|
|
||||||
process.StartInfo.CreateNoWindow = true;
|
|
||||||
|
|
||||||
// Capture standard output and error output
|
|
||||||
StringBuilder outputBuilder = new StringBuilder();
|
|
||||||
StringBuilder errorBuilder = new StringBuilder();
|
|
||||||
|
|
||||||
process.OutputDataReceived += (sender, e) => { if (!string.IsNullOrEmpty(e.Data)) outputBuilder.AppendLine(e.Data); };
|
|
||||||
process.ErrorDataReceived += (sender, e) => { if (!string.IsNullOrEmpty(e.Data)) errorBuilder.AppendLine(e.Data); };
|
|
||||||
|
|
||||||
process.Start();
|
|
||||||
process.BeginOutputReadLine();
|
|
||||||
process.BeginErrorReadLine();
|
|
||||||
|
|
||||||
await process.WaitForExitAsync();
|
|
||||||
|
|
||||||
string output = outputBuilder.ToString();
|
|
||||||
string error = errorBuilder.ToString();
|
|
||||||
|
|
||||||
// Debug output for logs
|
|
||||||
if (!string.IsNullOrEmpty(output))
|
|
||||||
{
|
|
||||||
_updateStatus($"PowerShell Output: {output}");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(error))
|
|
||||||
{
|
|
||||||
_updateStatus($"PowerShell Error: {error}");
|
|
||||||
MessageBox.Show($"PowerShell Error: {error}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task RunSetupWithAdminRights(string setupPath, bool experimentalEnabled)
|
||||||
private async Task RunSetupWithAdminRights(string setupPath)
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_updateStatus(Locales.Strings._debugInstallRunElevated); //Starting the setup process with elevated privileges...
|
_updateStatus(Locales.Strings._debugInstallRunElevated); //Starting the setup process with elevated privileges...
|
||||||
|
|
||||||
|
// Default argument
|
||||||
|
string arguments = "/Product Server";
|
||||||
|
|
||||||
|
// If experimental mode is enabled, append additional setup parameters
|
||||||
|
if (experimentalEnabled)
|
||||||
|
{
|
||||||
|
arguments += " /Compat IgnoreWarning /MigrateDrivers All";
|
||||||
|
}
|
||||||
|
|
||||||
var startInfo = new ProcessStartInfo
|
var startInfo = new ProcessStartInfo
|
||||||
{
|
{
|
||||||
FileName = "powershell.exe",
|
FileName = "powershell.exe",
|
||||||
Arguments = $"-NoProfile -ExecutionPolicy Bypass -Command \"Start-Process '{setupPath}' -ArgumentList '/product server' -Verb runas\"",
|
Arguments = $"-NoProfile -ExecutionPolicy Bypass -Command \"Start-Process '{setupPath}' -ArgumentList '{arguments}' -Verb runas\"",
|
||||||
Verb = "runas",
|
Verb = "runas",
|
||||||
UseShellExecute = true,
|
UseShellExecute = true,
|
||||||
CreateNoWindow = false
|
CreateNoWindow = false
|
||||||
@@ -157,9 +157,16 @@ namespace Flyby11
|
|||||||
await process.WaitForExitAsync();
|
await process.WaitForExitAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Final status message
|
||||||
|
string finalStatus = Locales.Strings._debugInstallReady;
|
||||||
|
|
||||||
|
if (experimentalEnabled)
|
||||||
|
{
|
||||||
|
finalStatus += " (Advanced mode enabled: Compatibility checks bypassed)";
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateStatus(finalStatus);
|
||||||
|
|
||||||
//You're ready to install Windows 11 on unsupported hardware! Ignore the 'Windows Server' prompt; you're all set!"
|
|
||||||
_updateStatus(Locales.Strings._debugInstallReady);
|
|
||||||
//Windows 11 installation can now proceed. Please follow the instructions in the setup window.
|
//Windows 11 installation can now proceed. Please follow the instructions in the setup window.
|
||||||
MessageBox.Show(Locales.Strings.msg_InstallReady, "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
MessageBox.Show(Locales.Strings.msg_InstallReady, "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
}
|
}
|
||||||
@@ -236,8 +243,6 @@ namespace Flyby11
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Downloads a specified tool (Media Creation Tool or Installation Assistant) from a provided URL.
|
/// Downloads a specified tool (Media Creation Tool or Installation Assistant) from a provided URL.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -290,7 +295,6 @@ namespace Flyby11
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ProcessExtensions
|
public static class ProcessExtensions
|
||||||
|
|||||||
Generated
+9
@@ -518,5 +518,14 @@ namespace Flyby11.Locales {
|
|||||||
return ResourceManager.GetString("msg_InstallReady", resourceCulture);
|
return ResourceManager.GetString("msg_InstallReady", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sucht eine lokalisierte Zeichenfolge, die Thank you for using my app!\n\nI developed this application in my free time to help you upgrade from Windows 10 to Windows 11 – even on PCs that, according to Microsoft's hardware requirements, would normally not be supported.\n\nMy app helps you avoid purchasing a new computer and actively contributes to reducing unnecessary electronic waste.\n\nNormally, I do not charge anything for my projects – neither for development nor for support.\nHowever, since this app is significantly more comprehensive, offers [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt.
|
||||||
|
/// </summary>
|
||||||
|
public static string msgClosing {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("msgClosing", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+105
-102
@@ -117,166 +117,169 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="compPatch_debugCancel" xml:space="preserve">
|
<data name="compPatch_debugCancel" xml:space="preserve">
|
||||||
<value>تم إلغاء التصحيح بواسطة المستخدم.</value>
|
<value>تم إلغاء التصحيح بواسطة المستخدم.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="compPatch_debugNotRemovableDrive" xml:space="preserve">
|
<data name="compPatch_debugNotRemovableDrive" xml:space="preserve">
|
||||||
<value>حاول المستخدم اختيار محرك أقراص غير قابل للإزالة.</value>
|
<value>حاول المستخدم اختيار محرك أقراص غير قابل للإزالة.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="compPatch_debugNoUSBDrive" xml:space="preserve">
|
<data name="compPatch_debugNoUSBDrive" xml:space="preserve">
|
||||||
<value>لم يتم اختيار أي محرك أقراص USB للتصحيح.</value>
|
<value>لم يتم اختيار أي محرك أقراص USB للتصحيح.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="compPatch_msgFailedEx" xml:space="preserve">
|
<data name="compPatch_msgFailedEx" xml:space="preserve">
|
||||||
<value>فشل في تطبيق التصحيح:</value>
|
<value>فشل في تطبيق التصحيح:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="compPatch_msgNotRemovableDrive" xml:space="preserve">
|
<data name="compPatch_msgNotRemovableDrive" xml:space="preserve">
|
||||||
<value>المسار المحدد ليس محرك أقراص قابل للإزالة. يرجى اختيار محرك أقراص USB.</value>
|
<value>المسار المحدد ليس محرك أقراص قابل للإزالة. يرجى اختيار محرك أقراص USB.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="compPatch_msgSelectDrive" xml:space="preserve">
|
<data name="compPatch_msgSelectDrive" xml:space="preserve">
|
||||||
<value>اختر محرك أقراص USB الذي يحتوي على ملفات تثبيت Windows 11 الخاصة بك.\nتضيف هذه الميزة تصحيح توافق لتجاوز متطلبات النظام معينة.\nمتوافق مع الأقراص المعدة بواسطة أي أداة، بما في ذلك Rufus. تأكد من أن المحرك جاهز!</value>
|
<value>اختر محرك أقراص USB الذي يحتوي على ملفات تثبيت Windows 11 الخاصة بك.\nتضيف هذه الميزة تصحيح توافق لتجاوز متطلبات النظام معينة.\nمتوافق مع الأقراص المعدة بواسطة أي أداة، بما في ذلك Rufus. تأكد من أن المحرك جاهز!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="compPatch_msgSelectDriveConfirm" xml:space="preserve">
|
<data name="compPatch_msgSelectDriveConfirm" xml:space="preserve">
|
||||||
<value>سيتم تطبيق إعدادات تجاوز التوافق على محرك أقراص USB المحدد. هل تريد المتابعة؟</value>
|
<value>سيتم تطبيق إعدادات تجاوز التوافق على محرك أقراص USB المحدد. هل تريد المتابعة؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="compPatch_msgSuccess" xml:space="preserve">
|
<data name="compPatch_msgSuccess" xml:space="preserve">
|
||||||
<value>تم تطبيق التصحيح بنجاح!</value>
|
<value>تم تطبيق التصحيح بنجاح!</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ctl_FormTitle" xml:space="preserve">
|
<data name="ctl_FormTitle" xml:space="preserve">
|
||||||
<value>مساعد ترقية Flyby11</value>
|
<value>مساعد ترقية Flyby11</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ctl_inkCompPatch" xml:space="preserve">
|
<data name="ctl_inkCompPatch" xml:space="preserve">
|
||||||
<value>تطبيق تصحيح التوافق على ISO (تثبيت نظيف)</value>
|
<value>تطبيق تصحيح التوافق على ISO (تثبيت نظيف)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ctl_linkCiuv" xml:space="preserve">
|
<data name="ctl_linkCiuv" xml:space="preserve">
|
||||||
<value>هل يمكنني الترقية إلى Windows 11؟</value>
|
<value>هل يمكنني الترقية إلى Windows 11؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ctl_linkVote" xml:space="preserve">
|
<data name="ctl_linkVote" xml:space="preserve">
|
||||||
<value>هل نجحت الترقية؟</value>
|
<value>هل نجحت الترقية؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ctl_statusLabel" xml:space="preserve">
|
<data name="ctl_statusLabel" xml:space="preserve">
|
||||||
<value>اسحب وأفلت ملف ISO الخاص بـ Windows 11 لتصحيحه وتثبيته على الأجهزة غير المدعومة (ترقية مكانية).</value>
|
<value>اسحب وأفلت ملف ISO الخاص بـ Windows 11 لتصحيحه وتثبيته على الأجهزة غير المدعومة (ترقية مكانية).</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a1" xml:space="preserve">
|
<data name="faq_a1" xml:space="preserve">
|
||||||
<value>ج: يمكنك تنزيل أحدث ISO من الموقع الرسمي لشركة Microsoft أو استخدام Fido Downloader.</value>
|
<value>ج: يمكنك تنزيل أحدث ISO من الموقع الرسمي لشركة Microsoft أو استخدام Fido Downloader.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a2" xml:space="preserve">
|
<data name="faq_a2" xml:space="preserve">
|
||||||
<value>ج: إذا قمت بتثبيت Windows 11 بنجاح ووفرت بعض المال، فلا تتردد في ترك شيء صغير كعلامة شكر هنا.</value>
|
<value>ج: إذا قمت بتثبيت Windows 11 بنجاح ووفرت بعض المال، فلا تتردد في ترك شيء صغير كعلامة شكر هنا.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a2Link" xml:space="preserve">
|
<data name="faq_a2Link" xml:space="preserve">
|
||||||
<value>انقر هنا للتبرع وإظهار دعمك.</value>
|
<value>انقر هنا للتبرع وإظهار دعمك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a3" xml:space="preserve">
|
<data name="faq_a3" xml:space="preserve">
|
||||||
<value>ج: بمجرد تحميل ISO، يتم تشغيل عملية الإعداد في الخلفية. يبدأ مثبت Windows، موجهًا إياك خلال الخطوات المطلوبة لتثبيت Windows 11 على جهازك.</value>
|
<value>ج: بمجرد تحميل ISO، يتم تشغيل عملية الإعداد في الخلفية. يبدأ مثبت Windows، موجهًا إياك خلال الخطوات المطلوبة لتثبيت Windows 11 على جهازك.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a4" xml:space="preserve">
|
<data name="faq_a4" xml:space="preserve">
|
||||||
<value>ج: يرجى التحقق من رسائل الخطأ والإبلاغ عنها على GitHub.</value>
|
<value>ج: يرجى التحقق من رسائل الخطأ والإبلاغ عنها على GitHub.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a5" xml:space="preserve">
|
<data name="faq_a5" xml:space="preserve">
|
||||||
<value>ج: نعم، تركت Microsoft بابًا خلفيًا مفتوحًا. تستفيد هذه الطريقة من ميزة في عملية إعداد Windows 11 تستخدم إصدار Windows Server من التثبيت. على عكس إعداد Windows 11 العادي، تتخطى هذه النسخة معظم فحوصات توافق الأجهزة.</value>
|
<value>ج: نعم، تركت Microsoft بابًا خلفيًا مفتوحًا. تستفيد هذه الطريقة من ميزة في عملية إعداد Windows 11 تستخدم إصدار Windows Server من التثبيت. على عكس إعداد Windows 11 العادي، تتخطى هذه النسخة معظم فحوصات توافق الأجهزة.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a6" xml:space="preserve">
|
<data name="faq_a6" xml:space="preserve">
|
||||||
<value>ج: وفقًا لشركة Microsoft، يجب عليك التخلص من جهاز الكمبيوتر الخاص بك. أوصي بتثبيت Linux عليه والابتعاد عن Windows.</value>
|
<value>ج: وفقًا لشركة Microsoft، يجب عليك التخلص من جهاز الكمبيوتر الخاص بك. أوصي بتثبيت Linux عليه والابتعاد عن Windows.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a7" xml:space="preserve">
|
<data name="faq_a7" xml:space="preserve">
|
||||||
<value>ج: المطور هو Belim، المعروف أيضًا باسم Builtbybel، الذي ساهم بالكثير من الشيفرة في مجتمع Windows.</value>
|
<value>ج: المطور هو Belim، المعروف أيضًا باسم Builtbybel، الذي ساهم بالكثير من الشيفرة في مجتمع Windows.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a7Link" xml:space="preserve">
|
<data name="faq_a7Link" xml:space="preserve">
|
||||||
<value>انقر هنا لمعرفة المزيد عن عمل المطور.</value>
|
<value>انقر هنا لمعرفة المزيد عن عمل المطور.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_downloadFido" xml:space="preserve">
|
<data name="faq_downloadFido" xml:space="preserve">
|
||||||
<value>تنزيل عبر Fido (موصى به)</value>
|
<value>تنزيل عبر Fido (موصى به)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_downloadMS" xml:space="preserve">
|
<data name="faq_downloadMS" xml:space="preserve">
|
||||||
<value>موقع Microsoft</value>
|
<value>موقع Microsoft</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_header" xml:space="preserve">
|
<data name="faq_header" xml:space="preserve">
|
||||||
<value>الأسئلة الشائعة (FAQ)</value>
|
<value>الأسئلة الشائعة (FAQ)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_q1" xml:space="preserve">
|
<data name="faq_q1" xml:space="preserve">
|
||||||
<value>س: أين يمكنني الحصول على أحدث Windows 11 ISO؟</value>
|
<value>س: أين يمكنني الحصول على أحدث Windows 11 ISO؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_q2" xml:space="preserve">
|
<data name="faq_q2" xml:space="preserve">
|
||||||
<value>س: كيف يمكنني دعم المطور؟</value>
|
<value>س: كيف يمكنني دعم المطور؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_q3" xml:space="preserve">
|
<data name="faq_q3" xml:space="preserve">
|
||||||
<value>س: كيف تعمل عملية الإعداد بمجرد تحميل ISO؟</value>
|
<value>س: كيف تعمل عملية الإعداد بمجرد تحميل ISO؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_q4" xml:space="preserve">
|
<data name="faq_q4" xml:space="preserve">
|
||||||
<value>س: ماذا لو واجهت مشاكل أثناء التثبيت؟</value>
|
<value>س: ماذا لو واجهت مشاكل أثناء التثبيت؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_q5" xml:space="preserve">
|
<data name="faq_q5" xml:space="preserve">
|
||||||
<value>س: هل من القانوني استخدام هذه الطريقة؟</value>
|
<value>س: هل من القانوني استخدام هذه الطريقة؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_q6" xml:space="preserve">
|
<data name="faq_q6" xml:space="preserve">
|
||||||
<value>س: ما هي البدائل إذا لم يكن جهازي مدعومًا؟</value>
|
<value>س: ما هي البدائل إذا لم يكن جهازي مدعومًا؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_q7" xml:space="preserve">
|
<data name="faq_q7" xml:space="preserve">
|
||||||
<value>س: من هو المطور؟</value>
|
<value>س: من هو المطور؟</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtAns" xml:space="preserve">
|
<data name="ciuView_lblPtAns" xml:space="preserve">
|
||||||
<value>1. الجهاز يعمل بإصدار مدعوم حاليًا من Windows 10. إذا لم يكن الجهاز يعمل بإصدار مدعوم حاليًا من Windows 10، قم بالترقية إلى إصدار مدعوم من Windows 10.</value>
|
<value>1. الجهاز يعمل بإصدار مدعوم حاليًا من Windows 10. إذا لم يكن الجهاز يعمل بإصدار مدعوم حاليًا من Windows 10، قم بالترقية إلى إصدار مدعوم من Windows 10.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtAns2" xml:space="preserve">
|
<data name="ciuView_lblPtAns2" xml:space="preserve">
|
||||||
<value>2. الجهاز يلبي</value>
|
<value>2. الجهاز يلبي</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtAns3" xml:space="preserve">
|
<data name="ciuView_lblPtAns3" xml:space="preserve">
|
||||||
<value>1. قم بتنزيل وتشغيل</value>
|
<value>1. قم بتنزيل وتشغيل</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtAns4" xml:space="preserve">
|
<data name="ciuView_lblPtAns4" xml:space="preserve">
|
||||||
<value>2. اختر اختصار تحديث Windows التالي ثم اختر زر التحقق من التحديثات:</value>
|
<value>2. اختر اختصار تحديث Windows التالي ثم اختر زر التحقق من التحديثات:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtAns5" xml:space="preserve">
|
<data name="ciuView_lblPtAns5" xml:space="preserve">
|
||||||
<value>3. جهازك لا يلبي المتطلبات الرسمية لـ Windows 11؟ يمكنك تطبيق تصحيح التوافق لتمكين الترقية المكانية عبر تحديث Windows.</value>
|
<value>3. جهازك لا يلبي المتطلبات الرسمية لـ Windows 11؟ يمكنك تطبيق تصحيح التوافق لتمكين الترقية المكانية عبر تحديث Windows.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtHdr" xml:space="preserve">
|
<data name="ciuView_lblPtHdr" xml:space="preserve">
|
||||||
<value>يمكن ترقية جهاز Windows 10 الحالي إلى Windows 11 إذا كان يلبي المعايير التالية:</value>
|
<value>يمكن ترقية جهاز Windows 10 الحالي إلى Windows 11 إذا كان يلبي المعايير التالية:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtHdr2" xml:space="preserve">
|
<data name="ciuView_lblPtHdr2" xml:space="preserve">
|
||||||
<value>للتحقق مما إذا كان جهاز Windows 10 مؤهلاً للترقية إلى Windows 11، اتبع إحدى هذه الخيارات:</value>
|
<value>للتحقق مما إذا كان جهاز Windows 10 مؤهلاً للترقية إلى Windows 11، اتبع إحدى هذه الخيارات:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_linkPtAns2" xml:space="preserve">
|
<data name="ciuView_linkPtAns2" xml:space="preserve">
|
||||||
<value>المواصفات الدنيا للأجهزة لتشغيل Windows 11.</value>
|
<value>المواصفات الدنيا للأجهزة لتشغيل Windows 11.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_linkPtAns3" xml:space="preserve">
|
<data name="ciuView_linkPtAns3" xml:space="preserve">
|
||||||
<value>تطبيق WhyNotWin11 لتأكيد أن جهازك يلبي الحد الأدنى من متطلبات النظام</value>
|
<value>تطبيق WhyNotWin11 لتأكيد أن جهازك يلبي الحد الأدنى من متطلبات النظام</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="msg_InstallReady" xml:space="preserve">
|
<data name="msg_InstallReady" xml:space="preserve">
|
||||||
<value>يمكن الآن متابعة تثبيت Windows 11. يرجى اتباع التعليمات في نافذة الإعداد.</value>
|
<value>يمكن الآن متابعة تثبيت Windows 11. يرجى اتباع التعليمات في نافذة الإعداد.</value>
|
||||||
<comment>تثبيت</comment>
|
<comment>تثبيت</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="_debugInstallReady" xml:space="preserve">
|
<data name="_debugInstallReady" xml:space="preserve">
|
||||||
<value>أنت جاهز لتثبيت Windows 11 على الأجهزة غير المدعومة! تجاهل رسالة 'Windows Server'؛ أنت جاهز!</value>
|
<value>أنت جاهز لتثبيت Windows 11 على الأجهزة غير المدعومة! تجاهل رسالة 'Windows Server'؛ أنت جاهز!</value>
|
||||||
<comment>تثبيت</comment>
|
<comment>تثبيت</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="_debugInstallRunElevated" xml:space="preserve">
|
<data name="_debugInstallRunElevated" xml:space="preserve">
|
||||||
<value>بدء عملية الإعداد بامتيازات مرتفعة...</value>
|
<value>بدء عملية الإعداد بامتيازات مرتفعة...</value>
|
||||||
<comment>تثبيت</comment>
|
<comment>تثبيت</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="_debugStatusHandleIsoEx" xml:space="preserve">
|
<data name="_debugStatusHandleIsoEx" xml:space="preserve">
|
||||||
<value>عذرًا! حدث خطأ ما:</value>
|
<value>عذرًا! حدث خطأ ما:</value>
|
||||||
<comment>تحميل</comment>
|
<comment>تحميل</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="_debugStatusMounting" xml:space="preserve">
|
<data name="_debugStatusMounting" xml:space="preserve">
|
||||||
<value>يتم تحميل ISO... انتظر قليلاً!</value>
|
<value>يتم تحميل ISO... انتظر قليلاً!</value>
|
||||||
<comment>تحميل</comment>
|
<comment>تحميل</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="_debugStatusMountingFailed" xml:space="preserve">
|
<data name="_debugStatusMountingFailed" xml:space="preserve">
|
||||||
<value>فشل تحميل ISO. يرجى المحاولة مرة أخرى.</value>
|
<value>فشل تحميل ISO. يرجى المحاولة مرة أخرى.</value>
|
||||||
<comment>تحميل</comment>
|
<comment>تحميل</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="_debugStatusMountingSuccess" xml:space="preserve">
|
<data name="_debugStatusMountingSuccess" xml:space="preserve">
|
||||||
<value>تم تحميل ISO بنجاح! دعنا نجعل هذا Windows 11 جاهزًا!</value>
|
<value>تم تحميل ISO بنجاح! دعنا نجعل هذا Windows 11 جاهزًا!</value>
|
||||||
<comment>تحميل</comment>
|
<comment>تحميل</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="_debugStatusRunning" xml:space="preserve">
|
<data name="_debugStatusRunning" xml:space="preserve">
|
||||||
<value>قريبًا! نحن نستعد للإعداد...</value>
|
<value>قريبًا! نحن نستعد للإعداد...</value>
|
||||||
<comment>تثبيت</comment>
|
<comment>تثبيت</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="_debugStatusSetupFileNotFound" xml:space="preserve">
|
<data name="_debugStatusSetupFileNotFound" xml:space="preserve">
|
||||||
<value>لم يتم العثور على ملف الإعداد في</value>
|
<value>لم يتم العثور على ملف الإعداد في</value>
|
||||||
<comment>تحميل</comment>
|
<comment>تحميل</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
<value>اختر من الكمبيوتر</value>
|
<value>اختر من الكمبيوتر</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value />
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -279,4 +279,7 @@
|
|||||||
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
<value>Vyberte z počítače.</value>
|
<value>Vyberte z počítače.</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value />
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -160,7 +160,7 @@
|
|||||||
<value>A: Du kannst die neueste ISO von der offiziellen Microsoft-Website herunterladen oder den Fido Downloader verwenden.</value>
|
<value>A: Du kannst die neueste ISO von der offiziellen Microsoft-Website herunterladen oder den Fido Downloader verwenden.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a2" xml:space="preserve">
|
<data name="faq_a2" xml:space="preserve">
|
||||||
<value>A: Wenn du Windows 11 erfolgreich installiert hast und dabei etwas Geld gespart hast, kannst du hier gerne ein kleines Dankeschön hinterlassen.</value>
|
<value>A: Wenn du Windows 11 erfolgreich installiert hast und dabei etwas Geld gespart hast, kannst du hier gerne ein kleines Dankeschön hinterlassen. Deine Unterstützung hält das Projekt am Leben – und hilft auch anderen. </value>
|
||||||
</data>
|
</data>
|
||||||
<data name="faq_a2Link" xml:space="preserve">
|
<data name="faq_a2Link" xml:space="preserve">
|
||||||
<value>Klicke hier, um zu spenden und deine Unterstützung zu zeigen.</value>
|
<value>Klicke hier, um zu spenden und deine Unterstützung zu zeigen.</value>
|
||||||
@@ -270,4 +270,8 @@
|
|||||||
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
<value>Vom Computer auswählen</value>
|
<value>Vom Computer auswählen</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value>Vielen Dank, dass du meine App nutzt!\n\nIch habe diese Anwendung in meiner Freizeit entwickelt, um dir den Umstieg von Windows 10 auf Windows 11 zu erleichtern – auch auf PCs, die laut Microsofts Hardwarevorgaben eigentlich nicht unterstützt werden.\n\nMeine App hilft dir, den Kauf eines neuen Rechners zu vermeiden und trägt aktiv dazu bei, unnötigen Elektroschrott zu verhindern.\n\nNormalerweise verlange ich für meine Projekte keinerlei Geld – weder für die Entwicklung noch für den Support.\nDa diese App jedoch deutlich umfangreicher ist, mehr Funktionen bietet und auch mehr Supportaufwand verursacht, würde ich mich freuen, wenn du – sofern es dir möglich ist – eine kleine freiwillige Spende in Erwägung ziehst.\n\nNatürlich nur, wenn du möchtest und es dir leisten kannst.\n\nMöchtest du jetzt auf PayPal spenden?
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -275,4 +275,7 @@
|
|||||||
<value>Fichier d'installation introuvable dans</value>
|
<value>Fichier d'installation introuvable dans</value>
|
||||||
<comment>Mounting</comment>
|
<comment>Mounting</comment>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value />
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,276 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="compPatch_debugCancel" xml:space="preserve">
|
||||||
|
<value>החלת טלאי העקיפה בוטלה על ידי המשתמש.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_debugNotRemovableDrive" xml:space="preserve">
|
||||||
|
<value>המשתמש ניסה לבחור כונן שאינו נשלף.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_debugNoUSBDrive" xml:space="preserve">
|
||||||
|
<value>לא נבחר כונן USB לצורך החלת הטלאי.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgFailedEx" xml:space="preserve">
|
||||||
|
<value>החלת טלאי העקיפה נכשלה:</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgNotRemovableDrive" xml:space="preserve">
|
||||||
|
<value>הנתיב שנבחר אינו כונן נשלף. אנא בחר כונן USB.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSelectDrive" xml:space="preserve">
|
||||||
|
<value>בחר את כונן ה-USB שמכיל את קובצי ההתקנה של Windows 11.\nפונקציה זו מוסיפה טלאי תאימות כדי לעקוף דרישות מערכת מסוימות.\nתואם לכוננים שהוכנו בכלים שונים, כולל Rufus. ודא שהכונן מוכן!</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSelectDriveConfirm" xml:space="preserve">
|
||||||
|
<value>פעולה זו תחיל הגדרות עקיפת תאימות על כונן ה-USB שנבחר. להמשיך?</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSuccess" xml:space="preserve">
|
||||||
|
<value>טלאי העקיפה הוחל בהצלחה!</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_FormTitle" xml:space="preserve">
|
||||||
|
<value>מסייע השדרוג Flyby11</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_inkCompPatch" xml:space="preserve">
|
||||||
|
<value>החל טלאי תאימות על ISO (התקנה נקייה)</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkCiuv" xml:space="preserve">
|
||||||
|
<value>האם אני יכול לשדרג ל-Windows 11?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkVote" xml:space="preserve">
|
||||||
|
<value>האם השדרוג הצליח?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_statusLabel" xml:space="preserve">
|
||||||
|
<value>גרור את קובץ ה־ISO של Windows 11 לכאן כדי להחיל עליו טלאי ולהתקין על חומרה שאינה נתמכת (שדרוג במקום).</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a1" xml:space="preserve">
|
||||||
|
<value>ת: ניתן להוריד את קובץ ה־ISO העדכני מאתר מיקרוסופט הרשמי או בעזרת Fido Downloader.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a2" xml:space="preserve">
|
||||||
|
<value>ת: אם הצלחת להתקין את Windows 11 וחסכת כסף – תוכל להשאיר כאן תרומה קטנה כהוקרת תודה.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a2Link" xml:space="preserve">
|
||||||
|
<value>לחץ כאן כדי לתרום ולהביע תמיכה.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a3" xml:space="preserve">
|
||||||
|
<value>ת: לאחר שה־ISO נצפה (mount), תהליך ההתקנה פועל ברקע. מתקין Windows יתחיל וידריך אותך בשלבים הנדרשים להתקנה.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a4" xml:space="preserve">
|
||||||
|
<value>ת: בדוק את הודעות השגיאה ודווח עליהן ב-GitHub.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a5" xml:space="preserve">
|
||||||
|
<value>ת: כן, מיקרוסופט השאירה דלת אחורית פתוחה. שיטה זו מנצלת את גרסת ההתקנה של Windows Server, אשר מדלגת על רוב בדיקות התאימות לחומרה.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a6" xml:space="preserve">
|
||||||
|
<value>ת: לפי מיקרוסופט עליך לזרוק את המחשב. אני ממליץ להתקין עליו Linux ולעבור מ-Windows.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a7" xml:space="preserve">
|
||||||
|
<value>ת: המפתח הוא Belim, המוכר גם בשם Builtbybel, שתרם רבות לקהילת Windows.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a7Link" xml:space="preserve">
|
||||||
|
<value>לחץ כאן כדי ללמוד עוד על עבודתו של המפתח.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_downloadFido" xml:space="preserve">
|
||||||
|
<value>הורדה דרך Fido (מומלץ)</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_downloadMS" xml:space="preserve">
|
||||||
|
<value>אתר Microsoft</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_header" xml:space="preserve">
|
||||||
|
<value>שאלות נפוצות (FAQ)</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q1" xml:space="preserve">
|
||||||
|
<value>ש: היכן ניתן להוריד את Windows 11 ISO העדכני?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q2" xml:space="preserve">
|
||||||
|
<value>ש: כיצד ניתן לתמוך במפתח?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q3" xml:space="preserve">
|
||||||
|
<value>ש: כיצד פועל תהליך ההתקנה לאחר צפייה ב־ISO?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q4" xml:space="preserve">
|
||||||
|
<value>ש: מה לעשות במקרה של שגיאה בהתקנה?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q5" xml:space="preserve">
|
||||||
|
<value>ש: האם מותר חוקית להשתמש בשיטה הזו?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q6" xml:space="preserve">
|
||||||
|
<value>ש: מהן החלופות אם המחשב שלי לא נתמך?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q7" xml:space="preserve">
|
||||||
|
<value>ש: מי המפתח?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns" xml:space="preserve">
|
||||||
|
<value>1. המכשיר פועל עם גרסה נתמכת של Windows 10. אם המכשיר לא מריץ גרסה נתמכת, יש לשדרג לגרסה נתמכת של Windows 10.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns2" xml:space="preserve">
|
||||||
|
<value>2. המכשיר עומד ב</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns3" xml:space="preserve">
|
||||||
|
<value>1. הורד והפעל את</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns4" xml:space="preserve">
|
||||||
|
<value>2. בחר את קיצור הדרך הבא של Windows Update ולאחר מכן לחץ על הלחצן "בדוק אם קיימים עדכונים":</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns5" xml:space="preserve">
|
||||||
|
<value>3. המכשיר שלך לא עומד בדרישות הרשמיות של Windows 11? ניתן להחיל טלאי תאימות כדי לאפשר שדרוג במקום דרך Windows Update.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtHdr" xml:space="preserve">
|
||||||
|
<value>ניתן לשדרג מכשיר עם Windows 10 לגרסה 11 אם הוא עומד בקריטריונים הבאים:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtHdr2" xml:space="preserve">
|
||||||
|
<value>כדי לבדוק אם מכשיר Windows 10 זכאי לשדרוג ל-Windows 11, בצע אחת מהאפשרויות הבאות:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_linkPtAns2" xml:space="preserve">
|
||||||
|
<value>המפרט המינימלי להפעלת Windows 11.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_linkPtAns3" xml:space="preserve">
|
||||||
|
<value>אפליקציית WhyNotWin11 לאימות עמידת המכשיר בדרישות המערכת המינימליות</value>
|
||||||
|
</data>
|
||||||
|
<data name="msg_InstallReady" xml:space="preserve">
|
||||||
|
<value>ניתן כעת להמשיך בהתקנת Windows 11. נא לעקוב אחר ההוראות בחלון ההתקנה.</value>
|
||||||
|
</data>
|
||||||
|
<data name="_debugInstallReady" xml:space="preserve">
|
||||||
|
<value>אתה מוכן להתקנת Windows 11 על חומרה לא נתמכת! התעלם מההודעה 'Windows Server' – הכל מוכן!</value>
|
||||||
|
</data>
|
||||||
|
<data name="_debugInstallRunElevated" xml:space="preserve">
|
||||||
|
<value>מתחיל את תהליך ההתקנה עם הרשאות מנהל...</value>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusHandleIsoEx" xml:space="preserve">
|
||||||
|
<value>אופס! משהו השתבש:</value>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMounting" xml:space="preserve">
|
||||||
|
<value>מצרף את קובץ ה־ISO... אנא המתן!</value>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMountingFailed" xml:space="preserve">
|
||||||
|
<value>צירוף קובץ ה־ISO נכשל. נסה שוב.</value>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMountingSuccess" xml:space="preserve">
|
||||||
|
<value>קובץ ה־ISO צורף בהצלחה! מתחילים את הכנת Windows 11!</value>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusRunning" xml:space="preserve">
|
||||||
|
<value>כמעט סיימנו! אנו מכינים את תהליך ההתקנה...</value>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusSetupFileNotFound" xml:space="preserve">
|
||||||
|
<value>קובץ ההתקנה לא נמצא ב</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
|
<value>בחר מהמחשב</value>
|
||||||
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value>תודה שהשתמשת באפליקציה שלי!\n\nפיתחתי את האפליקציה הזו בזמני הפנוי כדי לעזור לך לשדרג מ־Windows 10 ל־Windows 11 – גם על מחשבים שאינם נתמכים לפי דרישות החומרה של מיקרוסופט.\n\nהאפליקציה שלי עוזרת לך להימנע מקניית מחשב חדש ותורמת להפחתת פסולת אלקטרונית מיותרת.\n\nבדרך כלל אני לא גובה תשלום על הפרויקטים שלי – לא עבור הפיתוח ולא עבור התמיכה.\nאבל מכיוון שאפליקציה זו מקיפה יותר, כוללת יותר תכונות ודורשת יותר תמיכה, אשמח אם תוכל לשקול תרומה קטנה בהתנדבות, אם זה אפשרי עבורך.\n\nכמובן, רק אם אתה רוצה ויכול להרשות לעצמך.\n\nהאם ברצונך לתרום ב-PayPal עכשיו?</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,285 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="compPatch_debugCancel" xml:space="preserve">
|
||||||
|
<value>A felhasználó megszakította a javítás megkerülését.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_debugNotRemovableDrive" xml:space="preserve">
|
||||||
|
<value>A felhasználó megpróbált kiválasztani egy nem cserélhető meghajtót.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_debugNoUSBDrive" xml:space="preserve">
|
||||||
|
<value>Nincs USB-meghajtó kiválasztva a javításhoz.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgFailedEx" xml:space="preserve">
|
||||||
|
<value>Nem sikerült alkalmazni a bypass javítást:</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgNotRemovableDrive" xml:space="preserve">
|
||||||
|
<value>A kiválasztott elérési út nem cserélhető meghajtó. Válasszon egy USB-meghajtót.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSelectDrive" xml:space="preserve">
|
||||||
|
<value>Válassza ki a Windows 11 telepítőfájljait tartalmazó USB-meghajtót.\nEz a funkció kompatibilitási javítást ad hozzá bizonyos rendszerkövetelmények megkerüléséhez.\nKompatibilis bármely eszközzel előkészített meghajtókkal, beleértve a Rufust is. Győződjön meg arról, hogy a meghajtó készen áll!</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSelectDriveConfirm" xml:space="preserve">
|
||||||
|
<value>Ez alkalmazza a kompatibilitási megkerülési beállításokat a kiválasztott USB-meghajtón. Folytassuk?</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSuccess" xml:space="preserve">
|
||||||
|
<value>A bypass tapasz sikeresen alkalmazva!</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_FormTitle" xml:space="preserve">
|
||||||
|
<value>Flyby11 frissítési segéd</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_inkCompPatch" xml:space="preserve">
|
||||||
|
<value>Alkalmazza a kompatibilitási javítást az ISO -ra (tiszta telepítés)</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkCiuv" xml:space="preserve">
|
||||||
|
<value>Frissíthetek Windows 11-re?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkVote" xml:space="preserve">
|
||||||
|
<value>Működött a frissítés?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_statusLabel" xml:space="preserve">
|
||||||
|
<value>Húzza a Windows 11 ISO-t a javításhoz és a nem támogatott hardverre való telepítéshez (Helyi frissítés).</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a1" xml:space="preserve">
|
||||||
|
<value>V: Letöltheti a legújabb ISO-t a Microsoft hivatalos webhelyéről, vagy használhatja a Fido Downloadert.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a2" xml:space="preserve">
|
||||||
|
<value>V: Ha sikeresen telepítette a Windows 11-et, és pénzt takarított meg, nyugodtan hagyjon itt egy kis köszönetet.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a2Link" xml:space="preserve">
|
||||||
|
<value>Kattintson ide, hogy adományozzon és kifejezze támogatását.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a3" xml:space="preserve">
|
||||||
|
<value>V: Az ISO csatlakoztatása után a beállítási folyamat a háttérben fut. Elindul a Windows telepítője, amely végigvezeti Önt a Windows 11 gépre történő telepítéséhez szükséges lépéseken.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a4" xml:space="preserve">
|
||||||
|
<value>V: Kérjük, ellenőrizze a hibaüzeneteket, és jelentse a GitHubon.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a5" xml:space="preserve">
|
||||||
|
<value>V: Igen, a Microsoft nyitva hagyott egy hátsó ajtót. Ez a módszer a Windows 11 telepítési folyamatának egy olyan funkcióját használja, amely a telepítés Windows Server-változatát használja. A szokásos Windows 11 beállítással ellentétben ez a változat kihagyja a legtöbb hardverkompatibilitási ellenőrzést.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a6" xml:space="preserve">
|
||||||
|
<value>V: A Microsoft szerint ki kell dobnia a számítógépét. Azt javaslom, hogy telepítse rá a Linuxot, és távolodjon el a Windowstól.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a7" xml:space="preserve">
|
||||||
|
<value>V: A fejlesztő Belim, más néven Builtbybel, aki sok kóddal járult hozzá a Windows közösséghez.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a7Link" xml:space="preserve">
|
||||||
|
<value>Kattintson ide, ha többet szeretne megtudni a fejlesztő munkájáról.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_downloadFido" xml:space="preserve">
|
||||||
|
<value>Letöltés a Fido-n keresztül (ajánlott)</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_downloadMS" xml:space="preserve">
|
||||||
|
<value>Microsoft webhely</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_header" xml:space="preserve">
|
||||||
|
<value>Gyakran Ismételt Kérdések (GYIK)</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q1" xml:space="preserve">
|
||||||
|
<value>K: Hol szerezhetem be a legújabb Windows 11 ISO-t?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q2" xml:space="preserve">
|
||||||
|
<value>K: Hogyan támogathatom a fejlesztőt?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q3" xml:space="preserve">
|
||||||
|
<value>K: Hogyan működik a beállítási folyamat az ISO csatlakoztatása után?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q4" xml:space="preserve">
|
||||||
|
<value>K: Mi a teendő, ha problémákat tapasztalok a telepítés során?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q5" xml:space="preserve">
|
||||||
|
<value>K: Legális ennek a módszernek a használata?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q6" xml:space="preserve">
|
||||||
|
<value>K: Milyen alternatívák vannak, ha a számítógépem nem támogatott?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q7" xml:space="preserve">
|
||||||
|
<value>K: Ki a fejlesztő?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns" xml:space="preserve">
|
||||||
|
<value>1. Az eszközön a Windows 10 jelenleg támogatott verziója fut. Ha az eszközön jelenleg nem a Windows 10 támogatott verziója fut, frissítsen a Windows 10 támogatott verziójára.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns2" xml:space="preserve">
|
||||||
|
<value>2. Az eszköz megfelel</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns3" xml:space="preserve">
|
||||||
|
<value>1. Töltse le és futtassa a</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns4" xml:space="preserve">
|
||||||
|
<value>2. Válassza ki a következő Windows Update parancsikont, majd válassza a Frissítések keresése gombot:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns5" xml:space="preserve">
|
||||||
|
<value>3. Eszköze nem felel meg a Windows 11 hivatalos követelményeinek? Kompatibilitási javítás alkalmazásával engedélyezheti a helyben történő frissítést a Windows Update szolgáltatáson keresztül.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtHdr" xml:space="preserve">
|
||||||
|
<value>Egy meglévő Windows 10-es eszköz frissíthető Windows 11-re, ha megfelel az alábbi feltételeknek:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtHdr2" xml:space="preserve">
|
||||||
|
<value>Ha meg szeretné tudni, hogy egy Windows 10-es eszköz jogosult-e a Windows 11-re való frissítésre, kövesse az alábbi lehetőségek egyikét:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_linkPtAns2" xml:space="preserve">
|
||||||
|
<value>a Windows 11 futtatásához szükséges minimális hardverspecifikációk.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_linkPtAns3" xml:space="preserve">
|
||||||
|
<value>WhyNotWin11 alkalmazás annak megerősítéséhez, hogy a készülék megfelel a minimális rendszerkövetelményeknek</value>
|
||||||
|
</data>
|
||||||
|
<data name="msg_InstallReady" xml:space="preserve">
|
||||||
|
<value>A Windows 11 telepítése most folytatható. Kérjük, kövesse a beállítási ablakban található utasításokat.</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugInstallReady" xml:space="preserve">
|
||||||
|
<value>Készen áll a Windows 11 telepítésére nem támogatott hardverre! Hagyja figyelmen kívül a' Windows Server ' parancsot; minden készen áll!</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugInstallRunElevated" xml:space="preserve">
|
||||||
|
<value>A telepítési folyamat indítása emelt jogosultságokkal...</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusHandleIsoEx" xml:space="preserve">
|
||||||
|
<value>Hoppá! Valami elromlott:</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMounting" xml:space="preserve">
|
||||||
|
<value>Az ISO csatlakoztatása... Kitartás!</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMountingFailed" xml:space="preserve">
|
||||||
|
<value>Nem sikerült csatlakoztatni az ISO-t. Kérjük, próbálja újra.</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMountingSuccess" xml:space="preserve">
|
||||||
|
<value>ISO sikeresen csatlakoztatva! Lássunk hozzá a Windows 11 elkészítéséhez!</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusRunning" xml:space="preserve">
|
||||||
|
<value>Majdnem kész! Előkészítjük a beállítást...</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusSetupFileNotFound" xml:space="preserve">
|
||||||
|
<value>A telepítőfájl nem található a(z)</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
|
<value>Kiválasztás a számítógépről</value>
|
||||||
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value>Köszönöm, hogy használja az alkalmazásomat!\n\nEzt az alkalmazást a szabadidőmben fejlesztettem ki, hogy segítsek frissíteni a Windows 10-ről a Windows 11-re - még olyan számítógépeken is, amelyek a Microsoft hardverkövetelményei szerint normál esetben nem támogatottak.\n\nAz alkalmazásom segít elkerülni az új számítógép vásárlását, és aktívan hozzájárul a felesleges elektronikai hulladék csökkentéséhez. \nNormális esetben nem számítok fel semmit a projektjeimért - sem a fejlesztésért, sem a támogatásért.\nMivel azonban ez az alkalmazás lényegesen átfogóbb, több funkciót kínál, és több támogatást igényel, hálás lennék, ha fontolóra venné egy kis önkéntes adományozás lehetőségét, ha képes rá.\nTermészetesen csak akkor, ha szeretné és megengedheti magának.\n\nSzeretne most adományozni a PayPal-on?</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -279,4 +279,7 @@
|
|||||||
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
<value>Seleziona dal computer</value>
|
<value>Seleziona dal computer</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value />
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<root>
|
<root>
|
||||||
<!--
|
<!--
|
||||||
Microsoft ResX Schema
|
Microsoft ResX Schema
|
||||||
@@ -148,7 +148,7 @@
|
|||||||
<value>ISO に互換性パッチを適用する (クリーンインストール)</value>
|
<value>ISO に互換性パッチを適用する (クリーンインストール)</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ctl_linkCiuv" xml:space="preserve">
|
<data name="ctl_linkCiuv" xml:space="preserve">
|
||||||
<value>Windows 11 にアップグレードしますか?</value>
|
<value>Windows 11 にアップグレード可能ですか?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ctl_linkVote" xml:space="preserve">
|
<data name="ctl_linkVote" xml:space="preserve">
|
||||||
<value>アップグレードは成功しましたか?</value>
|
<value>アップグレードは成功しましたか?</value>
|
||||||
@@ -214,19 +214,19 @@
|
|||||||
<value>Q: 開発者は誰ですか?</value>
|
<value>Q: 開発者は誰ですか?</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtAns" xml:space="preserve">
|
<data name="ciuView_lblPtAns" xml:space="preserve">
|
||||||
<value>1. デバイスは現在サポートされているバージョンの Windows 10 を実行しています。デバイスが現在サポートされている Windows 10 を実行していない場合は、サポートされている Windows 10 にアップグレードしてください。</value>
|
<value>1. デバイスで現在サポートされているバージョンの Windows 10 を実行している状態である。サポートしていない Windows 10 を実行している場合は、サポートされている Windows 10 にアップグレードしてください。</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtAns2" xml:space="preserve">
|
<data name="ciuView_lblPtAns2" xml:space="preserve">
|
||||||
<value>2. このデバイス</value>
|
<value>2. デバイスで</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtAns3" xml:space="preserve">
|
<data name="ciuView_lblPtAns3" xml:space="preserve">
|
||||||
<value>1. ダウンロードして実行する</value>
|
<value>1. ダウンロードで確認</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtAns4" xml:space="preserve">
|
<data name="ciuView_lblPtAns4" xml:space="preserve">
|
||||||
<value>2. 次の Windows Update ショートカットを選択して「更新プログラムの確認」ボタンを選択します:</value>
|
<value>2. 次に Windows Update を選択後に「更新プログラムのチェック」ボタンを選択します:</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtAns5" xml:space="preserve">
|
<data name="ciuView_lblPtAns5" xml:space="preserve">
|
||||||
<value>3. 使用しているデバイスは Windows 11 の公式要件を満たしていませんか?互換性パッチを適用して、Windows Update 経由でのインプレース アップグレードを有効化することができます。</value>
|
<value>3. 使用しているデバイスは Windows 11 の要件を満たしていませんか?互換性パッチを適用して、Windows Update 経由でのインプレース アップグレードを有効化することができます。</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_lblPtHdr" xml:space="preserve">
|
<data name="ciuView_lblPtHdr" xml:space="preserve">
|
||||||
<value>既存の Windows 10 デバイスは、次の条件を満たしている場合に Windows 11 にアップグレードできます:</value>
|
<value>既存の Windows 10 デバイスは、次の条件を満たしている場合に Windows 11 にアップグレードできます:</value>
|
||||||
@@ -235,10 +235,10 @@
|
|||||||
<value>Windows 10 デバイスが Windows 11 にアップグレードできるかどうかを確認するには、次のいずれかのオプションに従ってください。</value>
|
<value>Windows 10 デバイスが Windows 11 にアップグレードできるかどうかを確認するには、次のいずれかのオプションに従ってください。</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_linkPtAns2" xml:space="preserve">
|
<data name="ciuView_linkPtAns2" xml:space="preserve">
|
||||||
<value>Windows 11 を実行するための最小ハードウェア仕様である。</value>
|
<value>Windows 11 を実行するための最小ハードウェア仕様を確認する。</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ciuView_linkPtAns3" xml:space="preserve">
|
<data name="ciuView_linkPtAns3" xml:space="preserve">
|
||||||
<value>WhyNotWin11 アプリは、デバイスが最小のシステム要件を満たしているかどうかを確認できます</value>
|
<value>WhyNotWin11 で最小のシステム要件を満たしているか確認できます。</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="msg_InstallReady" xml:space="preserve">
|
<data name="msg_InstallReady" xml:space="preserve">
|
||||||
<value>Windows 11 のインストールを続行できます。セットアップ ウィンドウの指示に従ってください。</value>
|
<value>Windows 11 のインストールを続行できます。セットアップ ウィンドウの指示に従ってください。</value>
|
||||||
@@ -270,9 +270,16 @@
|
|||||||
</data>
|
</data>
|
||||||
<data name="_debugStatusRunning" xml:space="preserve">
|
<data name="_debugStatusRunning" xml:space="preserve">
|
||||||
<value>もうすぐです!セットアップを準備しています...</value>
|
<value>もうすぐです!セットアップを準備しています...</value>
|
||||||
|
<comment>インストール</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="_debugStatusSetupFileNotFound" xml:space="preserve">
|
<data name="_debugStatusSetupFileNotFound" xml:space="preserve">
|
||||||
<value>セットアップファイルが見つかりません</value>
|
<value>セットアップファイルが見つかりません</value>
|
||||||
<comment>マウント中</comment>
|
<comment>マウント中</comment>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
|
<value>コンピューターから ISO を選択</value>
|
||||||
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value>私が開発したアプリをご利用いただきありがとうございます!\n\n私は Windows 10 から Windows 11 へのアップグレードを支援するために空き時間を利用してこのアプリを開発しました。Microsoft のハードウェア要件では通常サポートされない PC でもアップグレードできます。\n\nこのアプリは、新しいコンピューターの購入を回避や不要な電子機器廃棄物の削減に積極的に貢献します。\n\n私は開発費やサポート費用、プロジェクトに対して料金を一切請求しません。\nただし、このアプリは非常に包括的で多くの機能を提供し、より多くの機能を提供するためにより多くのサポートを必要とするため、可能であれば任意の寄付を検討していただければ幸いです。少額でも構いません。\n\nもちろんですが、寄付をしたいという希望があることと余裕がある場合に限ります。\n\n今すぐ PayPal で寄付しますか?</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,285 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="compPatch_debugCancel" xml:space="preserve">
|
||||||
|
<value>사용자가 바이패스 패치를 취소했습니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_debugNotRemovableDrive" xml:space="preserve">
|
||||||
|
<value>사용자가 제거할 수 없는 드라이브를 선택하려고 했습니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_debugNoUSBDrive" xml:space="preserve">
|
||||||
|
<value>패치할 USB 드라이브를 선택하지 않았습니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgFailedEx" xml:space="preserve">
|
||||||
|
<value>바이패스 패치 적용에 실패했습니다:</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgNotRemovableDrive" xml:space="preserve">
|
||||||
|
<value>선택한 경로는 이동식 드라이브가 아닙니다. USB 드라이브를 선택하세요.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSelectDrive" xml:space="preserve">
|
||||||
|
<value>Windows 11 설치 파일이 들어 있는 USB 드라이브를 선택하세요.\n이 기능은 특정 시스템 요구 사항을 우회하는 호환성 패치를 추가합니다.\nRufus를 포함한 모든 도구로 준비된 드라이브와 호환됩니다. 드라이브가 준비되었는지 확인하세요!</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSelectDriveConfirm" xml:space="preserve">
|
||||||
|
<value>선택한 USB 드라이브에 호환성 우회 설정이 적용됩니다. 계속하시겠습니까?</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSuccess" xml:space="preserve">
|
||||||
|
<value>바이패스 패치가 성공적으로 적용되었습니다!</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_FormTitle" xml:space="preserve">
|
||||||
|
<value>Flyby11 업그레이드 도우미</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_inkCompPatch" xml:space="preserve">
|
||||||
|
<value>ISO에 호환성 패치 적용 (새로 설치)</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkCiuv" xml:space="preserve">
|
||||||
|
<value>Windows 11로 업그레이드할 수 있나요?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkVote" xml:space="preserve">
|
||||||
|
<value>업그레이드가 제대로 됐나요?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_statusLabel" xml:space="preserve">
|
||||||
|
<value>Windows 11 ISO를 끌어서 놓아 패치하고 지원되지 않는 하드웨어에 설치합니다 (내부 업그레이드).</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a1" xml:space="preserve">
|
||||||
|
<value>답변: Microsoft 공식 웹사이트에서 최신 ISO를 다운로드하거나 Fido 다운로더를 사용할 수 있습니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a2" xml:space="preserve">
|
||||||
|
<value>답변: Windows 11을 성공적으로 설치하고 비용을 약간 절약했다면 감사의 표시로 여기에 작은 글을 남겨주세요.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a2Link" xml:space="preserve">
|
||||||
|
<value>여기를 클릭하여 기부하고 지지를 표해주세요.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a3" xml:space="preserve">
|
||||||
|
<value>답변: ISO가 마운트되면 설치 프로세스가 백그라운드에서 실행됩니다. Windows 설치 프로그램이 시작되어 컴퓨터에 Windows 11을 설치하는 데 필요한 단계를 안내합니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a4" xml:space="preserve">
|
||||||
|
<value>답변: 오류 메시지를 확인하시고 GitHub에 보고해 주세요.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a5" xml:space="preserve">
|
||||||
|
<value>답변: 네, Microsoft는 백도어를 열어 두었습니다. 이 방법은 Windows Server 설치 변형을 사용하는 Windows 11 설치 프로세스의 기능을 활용합니다. 일반 Windows 11 설치와 달리, 이 변형은 대부분의 하드웨어 호환성 검사를 건너뜁니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a6" xml:space="preserve">
|
||||||
|
<value>답변: Microsoft에 따르면 PC는 폐기해야 한다고 합니다. 저라면 Windows에서 Linux로 바꾸고 PC를 폐기하는 것을 추천합니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a7" xml:space="preserve">
|
||||||
|
<value>답변: 개발자는 Belim이며 Builtbybel로도 알려져 있습니다. 그는 Windows 커뮤니티에 많은 코드를 기여했습니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a7Link" xml:space="preserve">
|
||||||
|
<value>개발자의 작업에 대해 자세히 알아보려면 여기를 클릭하세요.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_downloadFido" xml:space="preserve">
|
||||||
|
<value>Fido를 통해 다운로드 (권장)</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_downloadMS" xml:space="preserve">
|
||||||
|
<value>Microsoft 사이트</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_header" xml:space="preserve">
|
||||||
|
<value>자주 묻는 질문 (FAQ)</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q1" xml:space="preserve">
|
||||||
|
<value>질문: 최신 Windows 11 ISO는 어디서 구할 수 있나요?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q2" xml:space="preserve">
|
||||||
|
<value>질문: 개발자를 어떻게 지원할 수 있나요?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q3" xml:space="preserve">
|
||||||
|
<value>질문: ISO를 마운트한 후 설정 과정은 어떻게 진행되나요?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q4" xml:space="preserve">
|
||||||
|
<value>질문: 설치 중에 문제가 발생하면 어떻게 해야 하나요?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q5" xml:space="preserve">
|
||||||
|
<value>질문: 이 방법을 사용하는 것이 합법인가요?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q6" xml:space="preserve">
|
||||||
|
<value>질문: 내 PC가 지원되지 않는 경우 어떤 대안이 있나요?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q7" xml:space="preserve">
|
||||||
|
<value>질문: 개발자는 누구인가요?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns" xml:space="preserve">
|
||||||
|
<value>1. 해당 기기는 현재 지원되는 Windows 10 버전을 실행 중입니다. 해당 기기가 현재 지원되는 Windows 10 버전을 실행하고 있지 않은 경우, 지원되는 Windows 10 버전으로 업그레이드하세요.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns2" xml:space="preserve">
|
||||||
|
<value>2. 장치가 만족합니다</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns3" xml:space="preserve">
|
||||||
|
<value>1. 다운로드하고 실행하세요</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns4" xml:space="preserve">
|
||||||
|
<value>2. 다음 Windows 업데이트 바로 가기를 선택한 다음 업데이트 확인 버튼을 선택합니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns5" xml:space="preserve">
|
||||||
|
<value>3. 기기가 Windows 11 공식 요구 사항을 충족하지 못하시나요? Windows 업데이트를 통해 호환성 패치를 적용하여 현재 위치 업그레이드를 활성화할 수 있습니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtHdr" xml:space="preserve">
|
||||||
|
<value>다음 기준을 충족하는 경우 기존 Windows 10 장치를 Windows 11로 업그레이드할 수 있습니다.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtHdr2" xml:space="preserve">
|
||||||
|
<value>Windows 10 장치가 Windows 11로 업그레이드할 수 있는지 확인하려면 다음 옵션 중 하나를 따르세요.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_linkPtAns2" xml:space="preserve">
|
||||||
|
<value>Windows 11을 실행하기 위한 최소 하드웨어 사양.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_linkPtAns3" xml:space="preserve">
|
||||||
|
<value>WhyNotWin11 앱을 사용하여 기기가 최소 시스템 요구 사항을 충족하는지 확인하세요.</value>
|
||||||
|
</data>
|
||||||
|
<data name="msg_InstallReady" xml:space="preserve">
|
||||||
|
<value>이제 Windows 11 설치를 진행할 수 있습니다. 설치 창의 지침을 따르세요.</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugInstallReady" xml:space="preserve">
|
||||||
|
<value>지원되지 않는 하드웨어에 Windows 11을 설치할 준비가 되었습니다! 'Windows Server' 메시지는 무시하세요. 설치가 완료되었습니다!</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugInstallRunElevated" xml:space="preserve">
|
||||||
|
<value>상승된 권한으로 설정 프로세스를 시작합니다...</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusHandleIsoEx" xml:space="preserve">
|
||||||
|
<value>어머나! 오류가 발생했습니다.</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMounting" xml:space="preserve">
|
||||||
|
<value>ISO 마운트... 잠깐만요!</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMountingFailed" xml:space="preserve">
|
||||||
|
<value>ISO를 마운트하지 못했습니다. 다시 시도해 주세요.</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMountingSuccess" xml:space="preserve">
|
||||||
|
<value>ISO가 성공적으로 마운트되었습니다! 이제 Windows 11을 준비하세요!</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusRunning" xml:space="preserve">
|
||||||
|
<value>거의 다 왔어요! 설치 준비를 하고 있어요...</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusSetupFileNotFound" xml:space="preserve">
|
||||||
|
<value>설치 파일을 찾을 수 없습니다</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
|
<value>컴퓨터에서 선택</value>
|
||||||
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value>제 앱을 사용해주셔서 감사합니다!\n\n저는 여가 시간에 Windows 10에서 Windows 11로 업그레이드하는 데 도움이 되는 이 애플리케이션을 개발했습니다. Microsoft 하드웨어 요구 사항에 따라 일반적으로 지원되지 않는 PC에서도 사용할 수 있습니다.\n\n제 앱은 새 컴퓨터를 구매하지 않도록 도와주고 불필요한 전자 폐기물을 줄이는 데 적극적으로 기여합니다.\n\n일반적으로 저는 프로젝트에 대해 개발이나 지원 비용을 청구하지 않습니다.\n하지만 이 앱은 훨씬 더 포괄적이고, 더 많은 기능을 제공하며, 더 많은 지원이 필요하므로 가능하시다면 소액의 자발적인 기부를 고려해 주시면 감사하겠습니다.\n\n물론, 기부를 원하고 경제적으로 여유가 있으시다면 가능합니다.\n\n지금 PayPal로 기부하시겠습니까?</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,285 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="compPatch_debugCancel" xml:space="preserve">
|
||||||
|
<value>Omzeilingspatch geannuleerd door gebruiker.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_debugNotRemovableDrive" xml:space="preserve">
|
||||||
|
<value>Gebruiker probeerde een niet-verwisselbaar station te selecteren.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_debugNoUSBDrive" xml:space="preserve">
|
||||||
|
<value>Geen USB-station geselecteerd voor patching.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgFailedEx" xml:space="preserve">
|
||||||
|
<value>Fout bij toepassen van omzeilingspatch:</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgNotRemovableDrive" xml:space="preserve">
|
||||||
|
<value>Het geselecteerde pad is geen verwisselbaar station. Selecteer een USB-station.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSelectDrive" xml:space="preserve">
|
||||||
|
<value>Selecteer het USB-station met uw Windows 11 installatiebestanden.\nDeze functie voegt een compatibiliteitspatch toe om bepaalde systeemeisen te omzeilen.\nCompatibel met stations die zijn voorbereid met elke tool, inclusief Rufus. Zorg ervoor dat het station klaar is!</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSelectDriveConfirm" xml:space="preserve">
|
||||||
|
<value>Dit zal compatibiliteits-omzeilingsinstellingen toepassen op het geselecteerde USB-station. Doorgaan?</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSuccess" xml:space="preserve">
|
||||||
|
<value>Omzeilingspatch succesvol toegepast!</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_FormTitle" xml:space="preserve">
|
||||||
|
<value>Flyby11 Upgrade-assistent</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_inkCompPatch" xml:space="preserve">
|
||||||
|
<value>Compatibiliteitspatch toepassen op ISO (Schone installatie)</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkCiuv" xml:space="preserve">
|
||||||
|
<value>Kan ik upgraden naar Windows 11?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkVote" xml:space="preserve">
|
||||||
|
<value>Werkte de upgrade?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_statusLabel" xml:space="preserve">
|
||||||
|
<value>Sleep de Windows 11 ISO hierheen om het te patchen en te installeren op niet-ondersteunde hardware (In-place upgrade).</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a1" xml:space="preserve">
|
||||||
|
<value>A: U kunt de nieuwste ISO downloaden van de officiële Microsoft-website of de Fido Downloader gebruiken.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a2" xml:space="preserve">
|
||||||
|
<value>A: Als u Windows 11 succesvol heeft geïnstalleerd en wat geld heeft bespaard, voel je vrij om hier een kleine donatie als dank achter te laten.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a2Link" xml:space="preserve">
|
||||||
|
<value>Klik hier om te doneren en uw steun te tonen.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a3" xml:space="preserve">
|
||||||
|
<value>A: Zodra de ISO is gekoppeld, wordt het installatieproces op de achtergrond uitgevoerd. Het Windows-installatieprogramma start en begeleidt u door de stappen die nodig zijn om Windows 11 op uw machine te installeren.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a4" xml:space="preserve">
|
||||||
|
<value>A: Controleer de foutmeldingen en rapporteer het op GitHub.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a5" xml:space="preserve">
|
||||||
|
<value>A: Ja, Microsoft heeft een achterdeur open gelaten. Deze methode maakt gebruik van een functie van het Windows 11 installatieproces die de Windows Server-variant van de installatie gebruikt. In tegenstelling tot de gewone Windows 11-installatie slaat deze variant de meeste hardware-compatibiliteitscontroles over.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a6" xml:space="preserve">
|
||||||
|
<value>A: Volgens Microsoft zou je je PC weg moeten gooien. Ik zou voorstellen om Linux erop te installeren en weg te gaan van Windows.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a7" xml:space="preserve">
|
||||||
|
<value>A: De ontwikkelaar is Belim, ook bekend als Builtbybel, die veel code heeft bijgedragen aan de Windows-community.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a7Link" xml:space="preserve">
|
||||||
|
<value>Klik hier om meer te leren over het werk van de ontwikkelaar.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_downloadFido" xml:space="preserve">
|
||||||
|
<value>Downloaden via Fido (Aanbevolen)</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_downloadMS" xml:space="preserve">
|
||||||
|
<value>Microsoft-site</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_header" xml:space="preserve">
|
||||||
|
<value>Veelgestelde vragen (FAQ)</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q1" xml:space="preserve">
|
||||||
|
<value>V: Waar kan ik de nieuwste Windows 11 ISO krijgen?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q2" xml:space="preserve">
|
||||||
|
<value>V: Hoe kan ik de ontwikkelaar ondersteunen?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q3" xml:space="preserve">
|
||||||
|
<value>V: Hoe werkt het installatieproces zodra de ISO is gekoppeld?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q4" xml:space="preserve">
|
||||||
|
<value>V: Wat als ik problemen ondervind tijdens de installatie?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q5" xml:space="preserve">
|
||||||
|
<value>V: Is het legaal om deze methode te gebruiken?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q6" xml:space="preserve">
|
||||||
|
<value>V: Wat zijn mijn alternatieven als mijn PC niet wordt ondersteund?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q7" xml:space="preserve">
|
||||||
|
<value>V: Wie is de ontwikkelaar?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns" xml:space="preserve">
|
||||||
|
<value>1. Het apparaat draait een momenteel ondersteunde versie van Windows 10. Als het apparaat momenteel geen ondersteunde versie van Windows 10 draait, upgrade dan naar een ondersteunde versie van Windows 10.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns2" xml:space="preserve">
|
||||||
|
<value>2. Het apparaat voldoet aan</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns3" xml:space="preserve">
|
||||||
|
<value>1. Download en voer de</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns4" xml:space="preserve">
|
||||||
|
<value>2. Selecteer de volgende Windows Update-snelkoppeling en selecteer vervolgens de knop Controleren op updates:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns5" xml:space="preserve">
|
||||||
|
<value>3. Voldoet uw apparaat niet aan de officiële vereisten voor Windows 11? U kunt een compatibiliteitspatch toepassen om de In-place upgrade via Windows Update in te schakelen.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtHdr" xml:space="preserve">
|
||||||
|
<value>Een bestaand Windows 10-apparaat kan worden geüpgraded naar Windows 11 als het voldoet aan de volgende criteria:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtHdr2" xml:space="preserve">
|
||||||
|
<value>Om te zien of een Windows 10-apparaat in aanmerking komt voor upgrade naar Windows 11, volg een van deze opties:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_linkPtAns2" xml:space="preserve">
|
||||||
|
<value>de minimale hardwarespecificaties om Windows 11 uit te voeren.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_linkPtAns3" xml:space="preserve">
|
||||||
|
<value>WhyNotWin11-app om te bevestigen dat uw apparaat voldoet aan de minimumsysteemvereisten</value>
|
||||||
|
</data>
|
||||||
|
<data name="msg_InstallReady" xml:space="preserve">
|
||||||
|
<value>Windows 11-installatie kan nu doorgaan. Volg de instructies in het installatievenster.</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugInstallReady" xml:space="preserve">
|
||||||
|
<value>U bent klaar om Windows 11 te installeren op niet-ondersteunde hardware! Negeer de 'Windows Server'-prompt; u bent helemaal klaar!</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugInstallRunElevated" xml:space="preserve">
|
||||||
|
<value>Het installatieproces starten met verhoogde bevoegdheden...</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusHandleIsoEx" xml:space="preserve">
|
||||||
|
<value>Oeps! Er ging iets mis:</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMounting" xml:space="preserve">
|
||||||
|
<value>ISO koppelen... Hou vol!</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMountingFailed" xml:space="preserve">
|
||||||
|
<value>ISO koppelen mislukt. Probeer het opnieuw.</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMountingSuccess" xml:space="preserve">
|
||||||
|
<value>ISO succesvol gekoppeld! Laten we deze Windows 11 klaar maken!</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusRunning" xml:space="preserve">
|
||||||
|
<value>Bijna klaar! We maken de installatie gereed...</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusSetupFileNotFound" xml:space="preserve">
|
||||||
|
<value>Installatiebestand niet gevonden in</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
|
<value>Selecteren van computer</value>
|
||||||
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value>Bedankt voor het gebruiken van mijn app! Ik heb deze applicatie in mijn vrije tijd ontwikkeld om u te helpen upgraden van Windows 10 naar Windows 11 – zelfs op PC's die volgens Microsoft's hardwarevereisten normaal gesproken niet zouden worden ondersteund. Mijn app helpt u een nieuwe computer te vermijden en draagt actief bij aan het verminderen van onnodige elektronische afval. Normaal gesproken vraag ik niets voor mijn projecten – noch voor ontwikkeling, noch voor ondersteuning. Omdat deze app echter aanzienlijk uitgebreider is, meer functies biedt en meer ondersteuning vereist, zou ik dankbaar zijn als u een kleine vrijwillige donatie zou willen overwegen, indien u dat kunt. Natuurlijk alleen als u wilt en het zich kunt veroorloven. Wilt u nu doneren op PayPal?</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -279,4 +279,7 @@
|
|||||||
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
<value>Wybierz z komputera</value>
|
<value>Wybierz z komputera</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value />
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -0,0 +1,285 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="compPatch_debugNotRemovableDrive" xml:space="preserve">
|
||||||
|
<value>O usuário tentou selecionar uma mídia não removível.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_debugNoUSBDrive" xml:space="preserve">
|
||||||
|
<value>Nenhuma unidade USB selecionada para aplicar o patch.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkCiuv" xml:space="preserve">
|
||||||
|
<value>Posso atualizar para o Windows 11?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkVote" xml:space="preserve">
|
||||||
|
<value>A atualização funcionou?</value>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusHandleIsoEx" xml:space="preserve">
|
||||||
|
<value>Ops! Algo deu errado:</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMounting" xml:space="preserve">
|
||||||
|
<value>Montando o arquivo ISO... Só um momento!</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMountingFailed" xml:space="preserve">
|
||||||
|
<value>Falha ao montar o arquivo ISO. Tente de novo.</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusMountingSuccess" xml:space="preserve">
|
||||||
|
<value>ISO montado com sucesso! Vamos preparar o Windows 11!</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusRunning" xml:space="preserve">
|
||||||
|
<value>Quase lá! Estamos preparando a instalação...</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugStatusSetupFileNotFound" xml:space="preserve">
|
||||||
|
<value>Arquivo de instalação não encontrado em</value>
|
||||||
|
<comment>Mounting</comment>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
|
<value>Selecionar do computador</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_debugCancel" xml:space="preserve">
|
||||||
|
<value>Patch de bypass cancelado pelo usuário.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgFailedEx" xml:space="preserve">
|
||||||
|
<value>Falha ao aplicar patch de bypass:</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgNotRemovableDrive" xml:space="preserve">
|
||||||
|
<value>O caminho selecionado não é uma unidade removível. Selecione uma unidade USB.</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSelectDrive" xml:space="preserve">
|
||||||
|
<value>Selecione a unidade USB contendo os arquivos de instalação do Windows 11.\nEste recurso adiciona um patch de compatibilidade para ignorar certos requerimentos de sistema.\nCompatível com unidades preparadas por qualquer ferramenta, incluindo o Rufus. Garanta que a unidade esteja pronta!</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSelectDriveConfirm" xml:space="preserve">
|
||||||
|
<value>Isso aplicará as configurações de bypass de compatibilidade na unidade USB selecionada. Continuar?</value>
|
||||||
|
</data>
|
||||||
|
<data name="compPatch_msgSuccess" xml:space="preserve">
|
||||||
|
<value>Patch de bypass aplicado com sucesso!</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_FormTitle" xml:space="preserve">
|
||||||
|
<value>Assistente de Atualização Flyby11</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_inkCompPatch" xml:space="preserve">
|
||||||
|
<value>Aplicar patch de compatibilidade na ISO (Instalação limpa)</value>
|
||||||
|
</data>
|
||||||
|
<data name="ctl_statusLabel" xml:space="preserve">
|
||||||
|
<value>Arraste e solte a ISO do Windows 11 para aplicar o patch e instalá-lo em hardware não suportado (Atualização local).</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a1" xml:space="preserve">
|
||||||
|
<value>R: Você pode baixar o ISO mais recente do site oficial da Microsoft ou usar o Fido Downloader.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a2" xml:space="preserve">
|
||||||
|
<value>R: Se você instalou o Windows 11 com sucesso e economizou algum dinheiro, sinta-se à vontade para deixar algo como agradecimento aqui.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a2Link" xml:space="preserve">
|
||||||
|
<value>Clique aqui para doar e mostrar seu apoio.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a3" xml:space="preserve">
|
||||||
|
<value>R: Após a montagem da ISO, o processo de instalação é executado em segundo plano. O instalador do Windows é iniciado, guiando você pelas etapas necessárias para instalar o Windows 11 na sua máquina.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a4" xml:space="preserve">
|
||||||
|
<value>R: Verifique as mensagens de erro e informe-as no GitHub.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a5" xml:space="preserve">
|
||||||
|
<value>R: Sim, a Microsoft deixou uma brecha. Este método aproveita um recurso do processo de instalação do Windows 11 que utiliza a variante do Windows Server. Ao contrário da instalação padrão do Windows 11, esta variante ignora a maioria das verificações de compatibilidade de hardware.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a6" xml:space="preserve">
|
||||||
|
<value>R: Segundo a Microsoft, você deve jogar seu PC fora. Eu sugeriria instalar o Linux nele e abandonar o Windows.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a7" xml:space="preserve">
|
||||||
|
<value>R: O desenvolvedor se chama Belim, também conhecido como Builtbybel, que contribuiu com muito código para a comunidade Windows.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_a7Link" xml:space="preserve">
|
||||||
|
<value>Clique aqui para saber mais sobre o trabalho do desenvolvedor.</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_downloadFido" xml:space="preserve">
|
||||||
|
<value>Baixar pelo Fido (Recomendado)</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_downloadMS" xml:space="preserve">
|
||||||
|
<value>Site da Microsoft</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_header" xml:space="preserve">
|
||||||
|
<value>Perguntas Frequentes</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q1" xml:space="preserve">
|
||||||
|
<value>P: Onde posso obter o ISO mais recente do Windows 11?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q2" xml:space="preserve">
|
||||||
|
<value>P: Como posso apoiar o desenvolvedor?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q3" xml:space="preserve">
|
||||||
|
<value>P: Como funciona o processo de instalação depois que a ISO é montada?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q4" xml:space="preserve">
|
||||||
|
<value>P: E se eu tiver problemas durante a instalação?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q5" xml:space="preserve">
|
||||||
|
<value>P: É legal usar esse método?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q6" xml:space="preserve">
|
||||||
|
<value>P: Quais são minhas alternativas se meu PC não for compatível?</value>
|
||||||
|
</data>
|
||||||
|
<data name="faq_q7" xml:space="preserve">
|
||||||
|
<value>P: Quem é o desenvolvedor?</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns" xml:space="preserve">
|
||||||
|
<value>1. O dispositivo está executando uma versão atualmente compatível do Windows 10. Se o dispositivo não estiver executando uma versão compatível, atualize para uma versão que seja compatível.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns2" xml:space="preserve">
|
||||||
|
<value>2. O dispositivo atende</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns3" xml:space="preserve">
|
||||||
|
<value>1. Baixe e execute o</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns4" xml:space="preserve">
|
||||||
|
<value>2. Selecione o seguinte atalho do Windows Update e então selecione o botão 'Verificar por atualizações':</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtAns5" xml:space="preserve">
|
||||||
|
<value>3. Seu dispositivo não atende aos requisitos oficiais do Windows 11? Você pode aplicar um patch de compatibilidade para habilitar a Atualização Local por meio do Windows Update.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtHdr" xml:space="preserve">
|
||||||
|
<value>Um dispositivo Windows 10 existente pode ser atualizado para o Windows 11 se atender aos seguintes critérios:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_lblPtHdr2" xml:space="preserve">
|
||||||
|
<value>Para verificar se um dispositivo Windows 10 está qualificado para atualização para o Windows 11, siga uma destas opções:</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_linkPtAns2" xml:space="preserve">
|
||||||
|
<value>as especificações mínimas de hardware para executar o Windows 11.</value>
|
||||||
|
</data>
|
||||||
|
<data name="ciuView_linkPtAns3" xml:space="preserve">
|
||||||
|
<value>aplicativo WhyNotWin11 para confirmar se seu dispositivo atende aos requisitos mínimos do sistema.</value>
|
||||||
|
</data>
|
||||||
|
<data name="msg_InstallReady" xml:space="preserve">
|
||||||
|
<value>A instalação do Windows 11 já pode prosseguir. Siga as instruções na janela de instalação.</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugInstallReady" xml:space="preserve">
|
||||||
|
<value>Você está pronto para instalar o Windows 11 em hardware não suportado! Ignore o prompt "Windows Server"; está tudo pronto!</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="_debugInstallRunElevated" xml:space="preserve">
|
||||||
|
<value>Iniciando o processo de instalação com privilégios de administrador...</value>
|
||||||
|
<comment>Install</comment>
|
||||||
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value>Obrigado por usar meu aplicativo!\n\nDesenvolvi este aplicativo no meu tempo livre para ajudar você a atualizar do Windows 10 para o Windows 11, mesmo em PCs que, de acordo com os requisitos de hardware da Microsoft, normalmente não seriam suportados.\n\nMeu aplicativo ajuda você a evitar a compra de um novo computador e contribui ativamente para reduzir o lixo eletrônico desnecessário.\n\nNormalmente, não cobro nada pelos meus projetos, nem pelo desenvolvimento nem pelo suporte.\nNo entanto, como este aplicativo é significativamente mais abrangente, oferece mais recursos e requer mais suporte, eu agradeceria se você considerasse fazer uma pequena doação voluntária, se puder.\n\nClaro, somente se você quiser e puder pagar.\n\nGostaria de doar no PayPal agora?</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -279,4 +279,7 @@
|
|||||||
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
<value>Select from computer</value>
|
<value>Select from computer</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value>Thank you for using my app!\n\nI developed this application in my free time to help you upgrade from Windows 10 to Windows 11 – even on PCs that, according to Microsoft's hardware requirements, would normally not be supported.\n\nMy app helps you avoid purchasing a new computer and actively contributes to reducing unnecessary electronic waste.\n\nNormally, I do not charge anything for my projects – neither for development nor for support.\nHowever, since this app is significantly more comprehensive, offers more features, and requires more support, I would be grateful if you would consider making a small voluntary donation, if you are able to.\n\nOf course, only if you want to and can afford it.\n\nWould you like to donate on PayPal now?</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -1,223 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<data name="compPatch_debugCancel" xml:space="preserve">
|
|
||||||
<value>Установка патча совместимости отменена пользователем.</value>
|
|
||||||
</data>
|
|
||||||
<data name="compPatch_debugNotRemovableDrive" xml:space="preserve">
|
|
||||||
<value>Пользователь пытался выбрать несъемный диск.</value>
|
|
||||||
</data>
|
|
||||||
<data name="compPatch_debugNoUSBDrive" xml:space="preserve">
|
|
||||||
<value>USB-накопитель для установки патча не выбран.</value>
|
|
||||||
</data>
|
|
||||||
<data name="compPatch_msgFailedEx" xml:space="preserve">
|
|
||||||
<value>Не удалось применить патч совместимости:</value>
|
|
||||||
</data>
|
|
||||||
<data name="compPatch_msgNotRemovableDrive" xml:space="preserve">
|
|
||||||
<value>Выбранный путь не является съемным диском. Пожалуйста, выберите USB-накопитель.</value>
|
|
||||||
</data>
|
|
||||||
<data name="compPatch_msgSelectDrive" xml:space="preserve">
|
|
||||||
<value>Выберите USB-накопитель с файлами установки Windows 11.\nЭта функция добавляет патч совместимости для обхода определенных системных требований.\nСовместимо с накопителями, подготовленными любым инструментом, включая Rufus. Убедитесь, что накопитель готов!</value>
|
|
||||||
</data>
|
|
||||||
<data name="compPatch_msgSelectDriveConfirm" xml:space="preserve">
|
|
||||||
<value>Это применит настройки обхода совместимости на выбранном USB-накопителе. Продолжить?</value>
|
|
||||||
</data>
|
|
||||||
<data name="compPatch_msgSuccess" xml:space="preserve">
|
|
||||||
<value>Патч совместимости успешно применен!</value>
|
|
||||||
</data>
|
|
||||||
<data name="ctl_FormTitle" xml:space="preserve">
|
|
||||||
<value>Помощник по обновлению Flyby11</value>
|
|
||||||
</data>
|
|
||||||
<data name="ctl_inkCompPatch" xml:space="preserve">
|
|
||||||
<value>Применить патч совместимости к ISO (чистая установка)</value>
|
|
||||||
</data>
|
|
||||||
<data name="ctl_linkCiuv" xml:space="preserve">
|
|
||||||
<value>Могу ли я обновиться до Windows 11?</value>
|
|
||||||
</data>
|
|
||||||
<data name="ctl_linkVote" xml:space="preserve">
|
|
||||||
<value>Получилось ли обновление?</value>
|
|
||||||
</data>
|
|
||||||
<data name="ctl_statusLabel" xml:space="preserve">
|
|
||||||
<value>Перетащите ISO-файл Windows 11 для применения патча и установки на неподдерживаемом оборудовании (обновление на месте).</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_a1" xml:space="preserve">
|
|
||||||
<value>О: Вы можете скачать последний ISO-файл с официального сайта Microsoft или использовать Fido Downloader.</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_a2" xml:space="preserve">
|
|
||||||
<value>О: Если вы успешно установили Windows 11 и сэкономили деньги, не стесняйтесь оставить небольшое пожертвование в знак благодарности здесь.</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_a2Link" xml:space="preserve">
|
|
||||||
<value>Нажмите здесь, чтобы пожертвовать и поддержать проект.</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_a3" xml:space="preserve">
|
|
||||||
<value>О: После монтирования ISO-файла процесс установки запускается в фоновом режиме. Установщик Windows запустится и проведет вас через необходимые шаги для установки Windows 11 на ваш компьютер.</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_a4" xml:space="preserve">
|
|
||||||
<value>О: Пожалуйста, проверьте сообщения об ошибках и сообщите о проблеме на GitHub.</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_a5" xml:space="preserve">
|
|
||||||
<value>О: Да, Microsoft оставила лазейку. Этот метод использует особенность процесса установки Windows 11, которая использует серверный вариант установки. В отличие от обычной установки Windows 11, этот вариант пропускает большинство проверок совместимости оборудования.</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_a6" xml:space="preserve">
|
|
||||||
<value>О: По мнению Microsoft, вам следует выбросить свой ПК. Я бы предложил установить на него Linux и отказаться от Windows.</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_a7" xml:space="preserve">
|
|
||||||
<value>О: Разработчик - Belim, также известный как Builtbybel, который внес большой вклад в сообщество Windows.</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_a7Link" xml:space="preserve">
|
|
||||||
<value>Нажмите здесь, чтобы узнать больше о работе разработчика.</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_downloadFido" xml:space="preserve">
|
|
||||||
<value>Скачать через Fido (рекомендуется)</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_downloadMS" xml:space="preserve">
|
|
||||||
<value>Сайт Microsoft</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_header" xml:space="preserve">
|
|
||||||
<value>Часто задаваемые вопросы (FAQ)</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_q1" xml:space="preserve">
|
|
||||||
<value>В: Где взять свежий ISO-файл Windows 11?</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_q2" xml:space="preserve">
|
|
||||||
<value>В: Как я могу поддержать разработчика?</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_q3" xml:space="preserve">
|
|
||||||
<value>В: Как работает процесс установки после монтирования ISO?</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_q4" xml:space="preserve">
|
|
||||||
<value>В: Что делать, если возникли проблемы во время установки?</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_q5" xml:space="preserve">
|
|
||||||
<value>В: Законно ли использовать этот метод?</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_q6" xml:space="preserve">
|
|
||||||
<value>В: Какие есть альтернативы, если мой ПК не поддерживается?</value>
|
|
||||||
</data>
|
|
||||||
<data name="faq_q7" xml:space="preserve">
|
|
||||||
<value>В: Кто разработчик?</value>
|
|
||||||
</data>
|
|
||||||
<data name="ciuView_lblPtAns" xml:space="preserve">
|
|
||||||
<value>1. Устройство работает на поддерживаемой версии Windows 10. Если устройство сейчас не работает на поддерживаемой версии Windows 10, обновите его до поддерживаемой версии Windows 10.</value>
|
|
||||||
</data>
|
|
||||||
<data name="ciuView_lblPtAns2" xml:space="preserve">
|
|
||||||
<value>2. Устройство соответствует</value>
|
|
||||||
</data>
|
|
||||||
<data name="ciuView_lblPtAns3" xml:space="preserve">
|
|
||||||
<value>1. Скачайте и запустите</value>
|
|
||||||
</data>
|
|
||||||
<data name="ciuView_lblPtAns4" xml:space="preserve">
|
|
||||||
<value>2. Выберите следующий ярлык Windows Update и нажмите кнопку "Проверить наличие обновлений":</value>
|
|
||||||
</data>
|
|
||||||
<data name="ciuView_lblPtAns5" xml:space="preserve">
|
|
||||||
<value>3. Ваше устройство не соответствует официальным требованиям Windows 11? Вы можете применить патч совместимости для включения обновления на месте через Windows Update.</value>
|
|
||||||
</data>
|
|
||||||
<data name="ciuView_lblPtHdr" xml:space="preserve">
|
|
||||||
<value>Существующее устройство с Windows 10 может быть обновлено до Windows 11, если оно соответствует следующим критериям:</value>
|
|
||||||
</data>
|
|
||||||
<data name="ciuView_lblPtHdr2" xml:space="preserve">
|
|
||||||
<value>Чтобы проверить, может ли устройство с Windows 10 быть обновлено до Windows 11, выполните один из следующих вариантов:</value>
|
|
||||||
</data>
|
|
||||||
<data name="ciuView_linkPtAns2" xml:space="preserve">
|
|
||||||
<value>минимальным требованиям к оборудованию для запуска Windows 11.</value>
|
|
||||||
</data>
|
|
||||||
<data name="ciuView_linkPtAns3" xml:space="preserve">
|
|
||||||
<value>приложение WhyNotWin11, чтобы подтвердить, что ваше устройство соответствует минимальным системным требованиям</value>
|
|
||||||
</data>
|
|
||||||
<data name="msg_InstallReady" xml:space="preserve">
|
|
||||||
<value>Установка Windows 11 может быть продолжена. Пожалуйста, следуйте инструкциям в окне установки.</value>
|
|
||||||
<comment>Install</comment>
|
|
||||||
</data>
|
|
||||||
<data name="_debugInstallReady" xml:space="preserve">
|
|
||||||
<value>Вы готовы к установке Windows 11 на неподдерживаемом оборудовании! Игнорируйте сообщение о 'Windows Server' - всё готово!</value>
|
|
||||||
<comment>Install</comment>
|
|
||||||
</data>
|
|
||||||
<data name="_debugInstallRunElevated" xml:space="preserve">
|
|
||||||
<value>Запуск процесса установки с повышенными привилегиями...</value>
|
|
||||||
<comment>Install</comment>
|
|
||||||
</data>
|
|
||||||
<data name="_debugStatusHandleIsoEx" xml:space="preserve">
|
|
||||||
<value>Упс! Что-то пошло не так:</value>
|
|
||||||
<comment>Mounting</comment>
|
|
||||||
</data>
|
|
||||||
<data name="_debugStatusMounting" xml:space="preserve">
|
|
||||||
<value>Монтирование ISO... Подождите!</value>
|
|
||||||
<comment>Mounting</comment>
|
|
||||||
</data>
|
|
||||||
<data name="_debugStatusMountingFailed" xml:space="preserve">
|
|
||||||
<value>Не удалось смонтировать ISO. Пожалуйста, попробуйте снова.</value>
|
|
||||||
<comment>Mounting</comment>
|
|
||||||
</data>
|
|
||||||
<data name="_debugStatusMountingSuccess" xml:space="preserve">
|
|
||||||
<value>ISO успешно смонтирован! Давайте подготовим эту Windows 11!</value>
|
|
||||||
<comment>Mounting</comment>
|
|
||||||
</data>
|
|
||||||
<data name="_debugStatusRunning" xml:space="preserve">
|
|
||||||
<value>Почти готово! Подготавливаем установку...</value>
|
|
||||||
<comment>Install</comment>
|
|
||||||
</data>
|
|
||||||
<data name="_debugStatusSetupFileNotFound" xml:space="preserve">
|
|
||||||
<value>Файл установки не найден в</value>
|
|
||||||
<comment>Mounting</comment>
|
|
||||||
</data>
|
|
||||||
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
|
||||||
<value>Выбрать с компьютера</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
||||||
@@ -279,4 +279,7 @@
|
|||||||
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
<value>Välj från datorn</value>
|
<value>Välj från datorn</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value />
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@@ -275,4 +275,7 @@
|
|||||||
<value>Kurulum dosyası bulunamadı</value>
|
<value>Kurulum dosyası bulunamadı</value>
|
||||||
<comment>Yükle</comment>
|
<comment>Yükle</comment>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value />
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -279,4 +279,7 @@
|
|||||||
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
<data name="ctl_linkSelectComputer" xml:space="preserve">
|
||||||
<value>从计算机中选择</value>
|
<value>从计算机中选择</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="msgClosing" xml:space="preserve">
|
||||||
|
<value />
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
Generated
+23
-5
@@ -35,6 +35,7 @@
|
|||||||
this.panelFAQ = new System.Windows.Forms.Panel();
|
this.panelFAQ = new System.Windows.Forms.Panel();
|
||||||
this.panelContainer = new System.Windows.Forms.Panel();
|
this.panelContainer = new System.Windows.Forms.Panel();
|
||||||
this.panelMain = new System.Windows.Forms.Panel();
|
this.panelMain = new System.Windows.Forms.Panel();
|
||||||
|
this.chkAdvancedMode = new System.Windows.Forms.CheckBox();
|
||||||
this.panelDragDrop.SuspendLayout();
|
this.panelDragDrop.SuspendLayout();
|
||||||
this.panelContainer.SuspendLayout();
|
this.panelContainer.SuspendLayout();
|
||||||
this.panelMain.SuspendLayout();
|
this.panelMain.SuspendLayout();
|
||||||
@@ -48,7 +49,7 @@
|
|||||||
this.panelDragDrop.Controls.Add(this.dropdownOptions);
|
this.panelDragDrop.Controls.Add(this.dropdownOptions);
|
||||||
this.panelDragDrop.Controls.Add(this.btnExperience);
|
this.panelDragDrop.Controls.Add(this.btnExperience);
|
||||||
this.panelDragDrop.Controls.Add(this.statusLabel);
|
this.panelDragDrop.Controls.Add(this.statusLabel);
|
||||||
this.panelDragDrop.Location = new System.Drawing.Point(57, 178);
|
this.panelDragDrop.Location = new System.Drawing.Point(57, 190);
|
||||||
this.panelDragDrop.Name = "panelDragDrop";
|
this.panelDragDrop.Name = "panelDragDrop";
|
||||||
this.panelDragDrop.Size = new System.Drawing.Size(436, 256);
|
this.panelDragDrop.Size = new System.Drawing.Size(436, 256);
|
||||||
this.panelDragDrop.TabIndex = 0;
|
this.panelDragDrop.TabIndex = 0;
|
||||||
@@ -110,7 +111,7 @@
|
|||||||
this.panelFAQ.Dock = System.Windows.Forms.DockStyle.Right;
|
this.panelFAQ.Dock = System.Windows.Forms.DockStyle.Right;
|
||||||
this.panelFAQ.Location = new System.Drawing.Point(589, 0);
|
this.panelFAQ.Location = new System.Drawing.Point(589, 0);
|
||||||
this.panelFAQ.Name = "panelFAQ";
|
this.panelFAQ.Name = "panelFAQ";
|
||||||
this.panelFAQ.Size = new System.Drawing.Size(331, 585);
|
this.panelFAQ.Size = new System.Drawing.Size(331, 609);
|
||||||
this.panelFAQ.TabIndex = 207;
|
this.panelFAQ.TabIndex = 207;
|
||||||
//
|
//
|
||||||
// panelContainer
|
// panelContainer
|
||||||
@@ -120,7 +121,7 @@
|
|||||||
this.panelContainer.Dock = System.Windows.Forms.DockStyle.Fill;
|
this.panelContainer.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
this.panelContainer.Location = new System.Drawing.Point(0, 0);
|
this.panelContainer.Location = new System.Drawing.Point(0, 0);
|
||||||
this.panelContainer.Name = "panelContainer";
|
this.panelContainer.Name = "panelContainer";
|
||||||
this.panelContainer.Size = new System.Drawing.Size(589, 585);
|
this.panelContainer.Size = new System.Drawing.Size(589, 609);
|
||||||
this.panelContainer.TabIndex = 209;
|
this.panelContainer.TabIndex = 209;
|
||||||
//
|
//
|
||||||
// panelMain
|
// panelMain
|
||||||
@@ -129,28 +130,44 @@
|
|||||||
| System.Windows.Forms.AnchorStyles.Left)
|
| System.Windows.Forms.AnchorStyles.Left)
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.panelMain.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(243)))), ((int)(((byte)(243)))));
|
this.panelMain.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(243)))), ((int)(((byte)(243)))));
|
||||||
|
this.panelMain.Controls.Add(this.chkAdvancedMode);
|
||||||
this.panelMain.Controls.Add(this.panelDragDrop);
|
this.panelMain.Controls.Add(this.panelDragDrop);
|
||||||
this.panelMain.Location = new System.Drawing.Point(5, 3);
|
this.panelMain.Location = new System.Drawing.Point(5, 3);
|
||||||
this.panelMain.Name = "panelMain";
|
this.panelMain.Name = "panelMain";
|
||||||
this.panelMain.Size = new System.Drawing.Size(580, 572);
|
this.panelMain.Size = new System.Drawing.Size(580, 596);
|
||||||
this.panelMain.TabIndex = 1;
|
this.panelMain.TabIndex = 1;
|
||||||
//
|
//
|
||||||
|
// chkAdvancedMode
|
||||||
|
//
|
||||||
|
this.chkAdvancedMode.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||||
|
this.chkAdvancedMode.AutoSize = true;
|
||||||
|
this.chkAdvancedMode.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.chkAdvancedMode.Location = new System.Drawing.Point(8, 566);
|
||||||
|
this.chkAdvancedMode.Name = "chkAdvancedMode";
|
||||||
|
this.chkAdvancedMode.Size = new System.Drawing.Size(397, 17);
|
||||||
|
this.chkAdvancedMode.TabIndex = 1;
|
||||||
|
this.chkAdvancedMode.Text = "Enable advanced upgrade mode (bypass compatibility and driver checks)";
|
||||||
|
this.chkAdvancedMode.UseVisualStyleBackColor = true;
|
||||||
|
this.chkAdvancedMode.CheckedChanged += new System.EventHandler(this.chkAdvancedMode_CheckedChanged);
|
||||||
|
//
|
||||||
// MainForm
|
// MainForm
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
|
||||||
this.AutoScroll = true;
|
this.AutoScroll = true;
|
||||||
this.BackColor = System.Drawing.Color.WhiteSmoke;
|
this.BackColor = System.Drawing.Color.WhiteSmoke;
|
||||||
this.ClientSize = new System.Drawing.Size(920, 585);
|
this.ClientSize = new System.Drawing.Size(920, 609);
|
||||||
this.Controls.Add(this.panelContainer);
|
this.Controls.Add(this.panelContainer);
|
||||||
this.Controls.Add(this.panelFAQ);
|
this.Controls.Add(this.panelFAQ);
|
||||||
this.Name = "MainForm";
|
this.Name = "MainForm";
|
||||||
this.ShowIcon = false;
|
this.ShowIcon = false;
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
this.Text = "Flyby11 Upgrading Assistant";
|
this.Text = "Flyby11 Upgrading Assistant";
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
|
||||||
this.panelDragDrop.ResumeLayout(false);
|
this.panelDragDrop.ResumeLayout(false);
|
||||||
this.panelContainer.ResumeLayout(false);
|
this.panelContainer.ResumeLayout(false);
|
||||||
this.panelMain.ResumeLayout(false);
|
this.panelMain.ResumeLayout(false);
|
||||||
|
this.panelMain.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -164,6 +181,7 @@
|
|||||||
private System.Windows.Forms.Panel panelMain;
|
private System.Windows.Forms.Panel panelMain;
|
||||||
private System.Windows.Forms.Button btnExperience;
|
private System.Windows.Forms.Button btnExperience;
|
||||||
private System.Windows.Forms.ComboBox dropdownOptions;
|
private System.Windows.Forms.ComboBox dropdownOptions;
|
||||||
|
private System.Windows.Forms.CheckBox chkAdvancedMode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+73
-62
@@ -1,12 +1,9 @@
|
|||||||
using Flyby11.Properties;
|
using System;
|
||||||
using System;
|
|
||||||
using System.Data;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Threading;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Views;
|
using Views;
|
||||||
@@ -21,6 +18,7 @@ namespace Flyby11
|
|||||||
|
|
||||||
public FAQHandler _faqHandler { get; private set; }
|
public FAQHandler _faqHandler { get; private set; }
|
||||||
|
|
||||||
|
// Import the external function to check for POPCNT and SSE4.2 features
|
||||||
[DllImport("CpuCheckNative.dll", CallingConvention = CallingConvention.Cdecl)]
|
[DllImport("CpuCheckNative.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||||
public static extern bool HasPopcnt();
|
public static extern bool HasPopcnt();
|
||||||
|
|
||||||
@@ -28,8 +26,7 @@ namespace Flyby11
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
logger = new Logger(this);
|
logger = new Logger(this);
|
||||||
// Uncomment lower line and add lang code to run localization test
|
|
||||||
// Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
|
|
||||||
_isoHandler = new IsoHandler(UpdateStatusLabel);
|
_isoHandler = new IsoHandler(UpdateStatusLabel);
|
||||||
_faqHandler = new FAQHandler(panelFAQ, UpdateStatusLabel);
|
_faqHandler = new FAQHandler(panelFAQ, UpdateStatusLabel);
|
||||||
_faqHandler.InitializeFAQ();
|
_faqHandler.InitializeFAQ();
|
||||||
@@ -40,82 +37,49 @@ namespace Flyby11
|
|||||||
// Drag and drop the Windows 11 ISO to patch it and install on unsupported hardware (Inplace Upgrade).
|
// Drag and drop the Windows 11 ISO to patch it and install on unsupported hardware (Inplace Upgrade).
|
||||||
UpdateStatusLabel(Locales.Strings.ctl_statusLabel);
|
UpdateStatusLabel(Locales.Strings.ctl_statusLabel);
|
||||||
|
|
||||||
// Perform system compatibility check and show the appropriate message
|
// Check if the DLL exists before performing the compatibility check
|
||||||
bool? isCompatible = CheckSystemCompatibility();
|
if (File.Exists("CpuCheckNative.dll"))
|
||||||
|
|
||||||
if (isCompatible.HasValue)
|
|
||||||
{
|
{
|
||||||
ShowCompatibilityMessage(isCompatible.Value);
|
// Perform system compatibility check if the DLL is found
|
||||||
|
bool hasPopcnt = CheckHasPopcnt(); // Check if the CPU supports POPCNT
|
||||||
|
bool hasSse42 = hasPopcnt; // If POPCNT is supported, SSE4.2 is likely supported as well
|
||||||
|
new CompatibilityForm(hasPopcnt, hasSse42).ShowDialog();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
MessageBox.Show(
|
MessageBox.Show(
|
||||||
"A preliminary check of the likelihood for a successful upgrade can be performed if you download the 'CpuCheckNative.dll' from the GitHub repository and place it in the app directory.\n" +
|
"A preliminary compatibility check can be performed by downloading the 'CpuCheckNative.dll' from GitHub " +
|
||||||
"Once the DLL is in place, the detailed compatibility check will be enabled, allowing us to evaluate CPU features like SSE4.2 and POPCNT. ",
|
"and placing it in the app folder.\nYou'll then get detailed feedback about your system's chances for a successful upgrade.",
|
||||||
"Flyby11 - Clippy has something to say!",
|
"Flyby11 - Heads-up from Clippy",
|
||||||
MessageBoxButtons.OK,
|
MessageBoxButtons.OK,
|
||||||
MessageBoxIcon.Information
|
MessageBoxIcon.Warning
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool? CheckSystemCompatibility()
|
// Checks if POPCNT and SSE4.2 are supported by the CPU using the external DLL function
|
||||||
|
private bool CheckHasPopcnt()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Attempt to check for POPCNT support
|
return HasPopcnt(); // Call the external function to check for POPCNT and SSE4.2
|
||||||
return HasPopcnt();
|
|
||||||
}
|
|
||||||
catch (DllNotFoundException)
|
|
||||||
{
|
|
||||||
// DLL is missing, return null for compatibility
|
|
||||||
// UpdateStatusLabel("Required DLL 'CpuCheckNative.dll' not found. Skipping detailed compatibility check.");
|
|
||||||
return null; // Indicating that compatibility could not be checked
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
// Log false for compatibility
|
UpdateStatusLabel($"Error checking system compatibility: {ex.Message}");
|
||||||
UpdateStatusLabel($"An error occurred while checking system compatibility: {ex.Message}");
|
return false;
|
||||||
return false; // Defaulting to incompatible if another error occurs
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ShowCompatibilityMessage(bool isCompatible)
|
|
||||||
{
|
|
||||||
if (isCompatible)
|
|
||||||
{
|
|
||||||
string message = "You should be able to upgrade your system to Windows 11, as long as there are no incompatible device drivers or other issues.\n" +
|
|
||||||
"Everything looks good for the upgrade, so you're ready to move forward!";
|
|
||||||
ShowMessage("Upgrade Ready", message);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
string message = "Unfortunately, your system doesn't support a key requirement for upgrading to Windows 11.\n" +
|
|
||||||
"The missing feature is POPCNT, which is necessary for the upgrade. Please check your system's hardware to ensure it meets the requirements.";
|
|
||||||
ShowMessage("Upgrade Blocked", message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void ShowMessage(string title, string message)
|
|
||||||
{
|
|
||||||
MessageBox.Show(message, title, MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void InitializeLocalizedStrings()
|
private void InitializeLocalizedStrings()
|
||||||
{
|
{
|
||||||
// Set localized strings for the UI elements
|
|
||||||
Text = Locales.Strings.ctl_FormTitle;
|
|
||||||
|
|
||||||
dropdownOptions.Items.Add("More options...");
|
dropdownOptions.Items.Add("More options...");
|
||||||
dropdownOptions.Items.Add(Locales.Strings.ctl_linkSelectComputer);
|
dropdownOptions.Items.Add(Locales.Strings.ctl_linkSelectComputer);
|
||||||
dropdownOptions.Items.Add(Locales.Strings.ctl_inkCompPatch);
|
dropdownOptions.Items.Add(Locales.Strings.ctl_inkCompPatch);
|
||||||
dropdownOptions.Items.Add(Locales.Strings.ctl_linkCiuv);
|
dropdownOptions.Items.Add(Locales.Strings.ctl_linkCiuv);
|
||||||
dropdownOptions.Items.Add("(Vote) " + Locales.Strings.ctl_linkVote); // "Did the upgrade work?"
|
dropdownOptions.Items.Add("(Vote) " + Locales.Strings.ctl_linkVote); // "Did the upgrade work?"
|
||||||
dropdownOptions.Items.Add("(App) Trim down Windows 11 with TidyOS"); // "TidyOS Repository"
|
dropdownOptions.Items.Add("(App) Customize Windows 11 with CrapFixer"); // "CrapFixer Repository"
|
||||||
|
dropdownOptions.Items.Add("Troubleshoot Compatibility Issues"); // Problems form
|
||||||
dropdownOptions.SelectedIndex = 0;
|
dropdownOptions.SelectedIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,6 +181,7 @@ namespace Flyby11
|
|||||||
private async Task HandleIsoInput(object sender, EventArgs e)
|
private async Task HandleIsoInput(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
string isoPath = null;
|
string isoPath = null;
|
||||||
|
bool experimentalEnabled = chkAdvancedMode.Checked;
|
||||||
|
|
||||||
if (e is DragEventArgs dragEvent && dragEvent.Data.GetDataPresent(DataFormats.FileDrop))
|
if (e is DragEventArgs dragEvent && dragEvent.Data.GetDataPresent(DataFormats.FileDrop))
|
||||||
{
|
{
|
||||||
@@ -243,7 +208,7 @@ namespace Flyby11
|
|||||||
|
|
||||||
if (!string.IsNullOrEmpty(isoPath) && File.Exists(isoPath))
|
if (!string.IsNullOrEmpty(isoPath) && File.Exists(isoPath))
|
||||||
{
|
{
|
||||||
await _isoHandler.HandleIso(isoPath);
|
await _isoHandler.HandleIso(isoPath, experimentalEnabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,8 +263,14 @@ namespace Flyby11
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
// OPen TidyOS Repository
|
// Open CFixer Repository
|
||||||
Process.Start("https://github.com/builtbybel/TidyOS/");
|
Process.Start("https://github.com/builtbybel/Crapfixer/");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 6:
|
||||||
|
// Open Troubleshoot Compatibility Issues
|
||||||
|
ProblemsForm problemsForm = new ProblemsForm();
|
||||||
|
problemsForm.ShowDialog();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Reset selection back to default prompt after action
|
// Reset selection back to default prompt after action
|
||||||
@@ -372,5 +343,45 @@ namespace Flyby11
|
|||||||
CanIUpgradeView canIUpgradeView = new CanIUpgradeView();
|
CanIUpgradeView canIUpgradeView = new CanIUpgradeView();
|
||||||
SwitchView.SetView(canIUpgradeView, panelContainer);
|
SwitchView.SetView(canIUpgradeView, panelContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
string raw = Locales.Strings.msgClosing;
|
||||||
|
string message = Regex.Unescape(raw);
|
||||||
|
|
||||||
|
DialogResult result = MessageBox.Show(
|
||||||
|
message,
|
||||||
|
"Support @Belim",
|
||||||
|
MessageBoxButtons.YesNo,
|
||||||
|
MessageBoxIcon.Information
|
||||||
|
);
|
||||||
|
|
||||||
|
if (result == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = "https://www.paypal.com/donate?hosted_button_id=MY7HX4QLYR4KG",
|
||||||
|
UseShellExecute = true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void chkAdvancedMode_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (chkAdvancedMode.Checked)
|
||||||
|
{
|
||||||
|
var result = MessageBox.Show(
|
||||||
|
"You are enabling an advanced setup mode. This option adds extra setup parameters that may improve compatibility on unsupported hardware. " +
|
||||||
|
"\r\nSuccess may vary depending on your system and drivers.\n\nDo you want to continue?",
|
||||||
|
"Advanced Mode Warning",
|
||||||
|
MessageBoxButtons.YesNo,
|
||||||
|
MessageBoxIcon.Warning);
|
||||||
|
|
||||||
|
if (result == DialogResult.No)
|
||||||
|
{
|
||||||
|
chkAdvancedMode.Checked = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Generated
+113
@@ -0,0 +1,113 @@
|
|||||||
|
namespace Flyby11
|
||||||
|
{
|
||||||
|
partial class ProblemsForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
|
||||||
|
this.dataGridViewIssues = new System.Windows.Forms.DataGridView();
|
||||||
|
this.ErrorCode = new System.Windows.Forms.DataGridViewTextBoxColumn();
|
||||||
|
this.Link = new System.Windows.Forms.DataGridViewLinkColumn();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.dataGridViewIssues)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// dataGridViewIssues
|
||||||
|
//
|
||||||
|
this.dataGridViewIssues.AllowUserToAddRows = false;
|
||||||
|
this.dataGridViewIssues.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
|
||||||
|
this.dataGridViewIssues.BackgroundColor = System.Drawing.Color.WhiteSmoke;
|
||||||
|
this.dataGridViewIssues.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||||
|
this.dataGridViewIssues.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
|
||||||
|
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||||
|
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
|
||||||
|
dataGridViewCellStyle1.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
|
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
|
||||||
|
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
|
||||||
|
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
||||||
|
this.dataGridViewIssues.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
|
||||||
|
this.dataGridViewIssues.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||||
|
this.dataGridViewIssues.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||||
|
this.ErrorCode,
|
||||||
|
this.Link});
|
||||||
|
this.dataGridViewIssues.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||||
|
this.dataGridViewIssues.GridColor = System.Drawing.SystemColors.Control;
|
||||||
|
this.dataGridViewIssues.Location = new System.Drawing.Point(0, 0);
|
||||||
|
this.dataGridViewIssues.Name = "dataGridViewIssues";
|
||||||
|
this.dataGridViewIssues.ReadOnly = true;
|
||||||
|
this.dataGridViewIssues.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None;
|
||||||
|
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
|
||||||
|
dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Control;
|
||||||
|
dataGridViewCellStyle2.Font = new System.Drawing.Font("Segoe UI Variable Display", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText;
|
||||||
|
dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
|
||||||
|
dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
|
||||||
|
dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
|
||||||
|
this.dataGridViewIssues.RowHeadersDefaultCellStyle = dataGridViewCellStyle2;
|
||||||
|
this.dataGridViewIssues.RowHeadersVisible = false;
|
||||||
|
this.dataGridViewIssues.Size = new System.Drawing.Size(645, 377);
|
||||||
|
this.dataGridViewIssues.TabIndex = 0;
|
||||||
|
this.dataGridViewIssues.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridViewIssues_CellContentClick);
|
||||||
|
//
|
||||||
|
// ErrorCode
|
||||||
|
//
|
||||||
|
this.ErrorCode.FillWeight = 149.2386F;
|
||||||
|
this.ErrorCode.HeaderText = "ErrorCode";
|
||||||
|
this.ErrorCode.Name = "ErrorCode";
|
||||||
|
this.ErrorCode.ReadOnly = true;
|
||||||
|
//
|
||||||
|
// Link
|
||||||
|
//
|
||||||
|
this.Link.FillWeight = 50.76142F;
|
||||||
|
this.Link.HeaderText = "Link";
|
||||||
|
this.Link.Name = "Link";
|
||||||
|
this.Link.ReadOnly = true;
|
||||||
|
//
|
||||||
|
// ProblemsForm
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(645, 377);
|
||||||
|
this.Controls.Add(this.dataGridViewIssues);
|
||||||
|
this.Name = "ProblemsForm";
|
||||||
|
this.ShowIcon = false;
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
|
this.Text = "Troubleshoot compatibility issues";
|
||||||
|
this.Load += new System.EventHandler(this.ProblemsForm_Load);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.dataGridViewIssues)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.DataGridView dataGridViewIssues;
|
||||||
|
private System.Windows.Forms.DataGridViewTextBoxColumn ErrorCode;
|
||||||
|
private System.Windows.Forms.DataGridViewLinkColumn Link;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace Flyby11
|
||||||
|
{
|
||||||
|
public partial class ProblemsForm : Form
|
||||||
|
{
|
||||||
|
private readonly Dictionary<string, string> _issues = new Dictionary<string, string>()
|
||||||
|
{
|
||||||
|
{"Can't upgrade to Windows 11 – Error 0x80888002","https://github.com/builtbybel/Flyby11/discussions/135"},
|
||||||
|
{ "Upgrading without losing all programs and settings", "https://github.com/builtbybel/Flyby11/discussions/54"},
|
||||||
|
{ "Upgrade Driver issue 0xC1900101", "https://github.com/builtbybel/Flyby11/issues/157"},
|
||||||
|
{ "We are enable to complete your request at this time", "https://github.com/builtbybel/Flyby11/issues/158"},
|
||||||
|
{ "Upgrade succeeded, but future updates not possible ", "https://github.com/builtbybel/Flyby11/discussions/144"},
|
||||||
|
{ "We couldn't install Windows Server - We've set your PC back the way it was Error 0xC1900101 - 0x20017", "https://github.com/builtbybel/Flyby11/issues/103 "},
|
||||||
|
{ "Mounting ISO fails", "https://github.com/builtbybel/Flyby11/issues/156"},
|
||||||
|
{ "Can't find your issue? Browse the community discussions for help", "https://github.com/builtbybel/Flyby11/discussions"},
|
||||||
|
};
|
||||||
|
|
||||||
|
public ProblemsForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ProblemsForm_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
foreach (var kv in _issues)
|
||||||
|
{
|
||||||
|
dataGridViewIssues.Rows.Add(kv.Key, "Details…");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dataGridViewIssues_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
||||||
|
{
|
||||||
|
if (dataGridViewIssues.Columns[e.ColumnIndex] is DataGridViewLinkColumn &&
|
||||||
|
e.RowIndex >= 0)
|
||||||
|
{
|
||||||
|
var code = dataGridViewIssues.Rows[e.RowIndex].Cells["ErrorCode"].Value.ToString();
|
||||||
|
if (_issues.TryGetValue(code, out var url))
|
||||||
|
{
|
||||||
|
System.Diagnostics.Process.Start(new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = url,
|
||||||
|
UseShellExecute = true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<metadata name="ErrorCode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
<metadata name="Link.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>True</value>
|
||||||
|
</metadata>
|
||||||
|
</root>
|
||||||
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
|
|||||||
// Buildnummer
|
// Buildnummer
|
||||||
// Revision
|
// Revision
|
||||||
//
|
//
|
||||||
[assembly: AssemblyVersion("2.2.350")]
|
[assembly: AssemblyVersion("3.0.500")]
|
||||||
[assembly: AssemblyFileVersion("2.2.350")]
|
[assembly: AssemblyFileVersion("3.0.500")]
|
||||||
Generated
+216
@@ -0,0 +1,216 @@
|
|||||||
|
namespace Flyoobe
|
||||||
|
{
|
||||||
|
partial class AboutForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.panel1 = new System.Windows.Forms.Panel();
|
||||||
|
this.linkAppVersion = new System.Windows.Forms.LinkLabel();
|
||||||
|
this.chkDonated = new System.Windows.Forms.CheckBox();
|
||||||
|
this.btnDonate = new System.Windows.Forms.Button();
|
||||||
|
this.lblHeader = new System.Windows.Forms.Label();
|
||||||
|
this.lblCopyright = new System.Windows.Forms.Label();
|
||||||
|
this.btnGitHub = new System.Windows.Forms.Button();
|
||||||
|
this.btnClose = new System.Windows.Forms.Button();
|
||||||
|
this.panel1.SuspendLayout();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// panel1
|
||||||
|
//
|
||||||
|
this.panel1.Anchor = System.Windows.Forms.AnchorStyles.Top;
|
||||||
|
this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(230)))), ((int)(((byte)(220)))));
|
||||||
|
this.panel1.Controls.Add(this.linkAppVersion);
|
||||||
|
this.panel1.Controls.Add(this.chkDonated);
|
||||||
|
this.panel1.Controls.Add(this.btnDonate);
|
||||||
|
this.panel1.Controls.Add(this.lblHeader);
|
||||||
|
this.panel1.Controls.Add(this.lblCopyright);
|
||||||
|
this.panel1.Controls.Add(this.btnGitHub);
|
||||||
|
this.panel1.Location = new System.Drawing.Point(13, 63);
|
||||||
|
this.panel1.Name = "panel1";
|
||||||
|
this.panel1.Size = new System.Drawing.Size(411, 274);
|
||||||
|
this.panel1.TabIndex = 322;
|
||||||
|
//
|
||||||
|
// linkAppVersion
|
||||||
|
//
|
||||||
|
this.linkAppVersion.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.linkAppVersion.AutoEllipsis = true;
|
||||||
|
this.linkAppVersion.Font = new System.Drawing.Font("Segoe UI Variable Small Semibol", 11.75F, System.Drawing.FontStyle.Bold);
|
||||||
|
this.linkAppVersion.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;
|
||||||
|
this.linkAppVersion.LinkColor = System.Drawing.Color.Black;
|
||||||
|
this.linkAppVersion.Location = new System.Drawing.Point(3, 75);
|
||||||
|
this.linkAppVersion.Name = "linkAppVersion";
|
||||||
|
this.linkAppVersion.Size = new System.Drawing.Size(405, 46);
|
||||||
|
this.linkAppVersion.TabIndex = 334;
|
||||||
|
this.linkAppVersion.TabStop = true;
|
||||||
|
this.linkAppVersion.Text = "Version";
|
||||||
|
this.linkAppVersion.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||||
|
this.linkAppVersion.UseCompatibleTextRendering = true;
|
||||||
|
this.linkAppVersion.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkAppVersion_LinkClicked);
|
||||||
|
//
|
||||||
|
// chkDonated
|
||||||
|
//
|
||||||
|
this.chkDonated.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
|
||||||
|
this.chkDonated.AutoSize = true;
|
||||||
|
this.chkDonated.Font = new System.Drawing.Font("Segoe UI Variable Small Semilig", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.chkDonated.ForeColor = System.Drawing.Color.Black;
|
||||||
|
this.chkDonated.Location = new System.Drawing.Point(14, 255);
|
||||||
|
this.chkDonated.Name = "chkDonated";
|
||||||
|
this.chkDonated.Size = new System.Drawing.Size(141, 19);
|
||||||
|
this.chkDonated.TabIndex = 333;
|
||||||
|
this.chkDonated.Text = "I have already donated";
|
||||||
|
this.chkDonated.UseVisualStyleBackColor = true;
|
||||||
|
this.chkDonated.CheckedChanged += new System.EventHandler(this.chkDonated_CheckedChanged);
|
||||||
|
//
|
||||||
|
// btnDonate
|
||||||
|
//
|
||||||
|
this.btnDonate.Anchor = System.Windows.Forms.AnchorStyles.None;
|
||||||
|
this.btnDonate.AutoEllipsis = true;
|
||||||
|
this.btnDonate.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(29)))), ((int)(((byte)(27)))), ((int)(((byte)(26)))));
|
||||||
|
this.btnDonate.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
|
this.btnDonate.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
|
||||||
|
this.btnDonate.FlatAppearance.BorderSize = 0;
|
||||||
|
this.btnDonate.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(243)))), ((int)(((byte)(243)))));
|
||||||
|
this.btnDonate.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||||
|
this.btnDonate.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 11F, System.Drawing.FontStyle.Bold);
|
||||||
|
this.btnDonate.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.btnDonate.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
this.btnDonate.Location = new System.Drawing.Point(12, 214);
|
||||||
|
this.btnDonate.Name = "btnDonate";
|
||||||
|
this.btnDonate.Size = new System.Drawing.Size(388, 38);
|
||||||
|
this.btnDonate.TabIndex = 331;
|
||||||
|
this.btnDonate.TabStop = false;
|
||||||
|
this.btnDonate.Text = "Donate";
|
||||||
|
this.btnDonate.UseCompatibleTextRendering = true;
|
||||||
|
this.btnDonate.UseVisualStyleBackColor = false;
|
||||||
|
this.btnDonate.Click += new System.EventHandler(this.btnDonate_Click);
|
||||||
|
//
|
||||||
|
// lblHeader
|
||||||
|
//
|
||||||
|
this.lblHeader.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.lblHeader.AutoEllipsis = true;
|
||||||
|
this.lblHeader.Font = new System.Drawing.Font("Segoe UI Variable Small Semibol", 20.75F, System.Drawing.FontStyle.Bold);
|
||||||
|
this.lblHeader.ForeColor = System.Drawing.Color.Black;
|
||||||
|
this.lblHeader.Location = new System.Drawing.Point(3, 20);
|
||||||
|
this.lblHeader.Name = "lblHeader";
|
||||||
|
this.lblHeader.Size = new System.Drawing.Size(405, 38);
|
||||||
|
this.lblHeader.TabIndex = 330;
|
||||||
|
this.lblHeader.Text = "Flyoobe";
|
||||||
|
this.lblHeader.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
|
this.lblHeader.UseCompatibleTextRendering = true;
|
||||||
|
//
|
||||||
|
// lblCopyright
|
||||||
|
//
|
||||||
|
this.lblCopyright.Anchor = System.Windows.Forms.AnchorStyles.None;
|
||||||
|
this.lblCopyright.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
this.lblCopyright.Font = new System.Drawing.Font("Segoe UI Variable Small Semilig", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.lblCopyright.ForeColor = System.Drawing.Color.Black;
|
||||||
|
this.lblCopyright.Location = new System.Drawing.Point(3, 127);
|
||||||
|
this.lblCopyright.Name = "lblCopyright";
|
||||||
|
this.lblCopyright.Size = new System.Drawing.Size(405, 21);
|
||||||
|
this.lblCopyright.TabIndex = 319;
|
||||||
|
this.lblCopyright.Text = "A Belim app creation (C) 2025";
|
||||||
|
this.lblCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
|
this.lblCopyright.UseCompatibleTextRendering = true;
|
||||||
|
//
|
||||||
|
// btnGitHub
|
||||||
|
//
|
||||||
|
this.btnGitHub.Anchor = System.Windows.Forms.AnchorStyles.None;
|
||||||
|
this.btnGitHub.AutoEllipsis = true;
|
||||||
|
this.btnGitHub.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(29)))), ((int)(((byte)(27)))), ((int)(((byte)(26)))));
|
||||||
|
this.btnGitHub.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
|
this.btnGitHub.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(141)))), ((int)(((byte)(141)))), ((int)(((byte)(141)))));
|
||||||
|
this.btnGitHub.FlatAppearance.BorderSize = 0;
|
||||||
|
this.btnGitHub.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(243)))), ((int)(((byte)(243)))));
|
||||||
|
this.btnGitHub.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||||||
|
this.btnGitHub.Font = new System.Drawing.Font("Segoe UI Variable Display Semib", 11F, System.Drawing.FontStyle.Bold);
|
||||||
|
this.btnGitHub.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.btnGitHub.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
this.btnGitHub.Location = new System.Drawing.Point(12, 170);
|
||||||
|
this.btnGitHub.Name = "btnGitHub";
|
||||||
|
this.btnGitHub.Size = new System.Drawing.Size(388, 38);
|
||||||
|
this.btnGitHub.TabIndex = 317;
|
||||||
|
this.btnGitHub.TabStop = false;
|
||||||
|
this.btnGitHub.Text = "GitHub";
|
||||||
|
this.btnGitHub.UseCompatibleTextRendering = true;
|
||||||
|
this.btnGitHub.UseVisualStyleBackColor = false;
|
||||||
|
this.btnGitHub.Click += new System.EventHandler(this.btnGitHub_Click);
|
||||||
|
//
|
||||||
|
// btnClose
|
||||||
|
//
|
||||||
|
this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.btnClose.AutoSize = true;
|
||||||
|
this.btnClose.BackColor = System.Drawing.Color.Transparent;
|
||||||
|
this.btnClose.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(247)))), ((int)(((byte)(242)))));
|
||||||
|
this.btnClose.FlatAppearance.BorderSize = 0;
|
||||||
|
this.btnClose.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(247)))), ((int)(((byte)(242)))));
|
||||||
|
this.btnClose.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(247)))), ((int)(((byte)(242)))));
|
||||||
|
this.btnClose.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.btnClose.Font = new System.Drawing.Font("Segoe MDL2 Assets", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.btnClose.ForeColor = System.Drawing.Color.Black;
|
||||||
|
this.btnClose.Location = new System.Drawing.Point(387, 15);
|
||||||
|
this.btnClose.Name = "btnClose";
|
||||||
|
this.btnClose.Size = new System.Drawing.Size(30, 29);
|
||||||
|
this.btnClose.TabIndex = 332;
|
||||||
|
this.btnClose.Text = "...";
|
||||||
|
this.btnClose.UseVisualStyleBackColor = false;
|
||||||
|
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
|
||||||
|
//
|
||||||
|
// AboutForm
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(230)))), ((int)(((byte)(220)))));
|
||||||
|
this.ClientSize = new System.Drawing.Size(436, 349);
|
||||||
|
this.Controls.Add(this.btnClose);
|
||||||
|
this.Controls.Add(this.panel1);
|
||||||
|
this.Name = "AboutForm";
|
||||||
|
this.Opacity = 0.95D;
|
||||||
|
this.ShowIcon = false;
|
||||||
|
this.ShowInTaskbar = false;
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||||
|
this.Load += new System.EventHandler(this.AboutForm_Load);
|
||||||
|
this.panel1.ResumeLayout(false);
|
||||||
|
this.panel1.PerformLayout();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Panel panel1;
|
||||||
|
private System.Windows.Forms.Label lblCopyright;
|
||||||
|
private System.Windows.Forms.Button btnGitHub;
|
||||||
|
private System.Windows.Forms.Label lblHeader;
|
||||||
|
private System.Windows.Forms.Button btnClose;
|
||||||
|
private System.Windows.Forms.Button btnDonate;
|
||||||
|
private System.Windows.Forms.CheckBox chkDonated;
|
||||||
|
private System.Windows.Forms.LinkLabel linkAppVersion;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,211 @@
|
|||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace Flyoobe
|
||||||
|
{
|
||||||
|
public partial class AboutForm : Form
|
||||||
|
{
|
||||||
|
public AboutForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
this.FormBorderStyle = FormBorderStyle.None;
|
||||||
|
this.DoubleBuffered = true;
|
||||||
|
|
||||||
|
linkAppVersion.Text = $"You have Flyoobe version {Program.GetAppVersion()}\n" +
|
||||||
|
"(Fetching updates...)";
|
||||||
|
|
||||||
|
btnClose.Text = "\uEF2C";
|
||||||
|
ApplyRoundedCorners();
|
||||||
|
chkDonated.Checked = DonationHelper.HasDonated();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void AboutForm_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
await Task.Delay(1000);
|
||||||
|
// Call update check when form loads
|
||||||
|
await CheckForUpdateAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyRoundedCorners()
|
||||||
|
{
|
||||||
|
int radius = 60; // Corner radius
|
||||||
|
var path = new System.Drawing.Drawing2D.GraphicsPath();
|
||||||
|
path.AddArc(0, 0, radius, radius, 180, 90); // top-left
|
||||||
|
path.AddArc(this.Width - radius, 0, radius, radius, 270, 90); // top-right
|
||||||
|
path.AddArc(this.Width - radius, this.Height - radius, radius, radius, 0, 90); // bottom-right
|
||||||
|
path.AddArc(0, this.Height - radius, radius, radius, 90, 90); // bottom-left
|
||||||
|
path.CloseFigure();
|
||||||
|
|
||||||
|
this.Region = new Region(path); // Apply the rounded shape
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnResize(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnResize(e);
|
||||||
|
ApplyRoundedCorners(); // Reapply on resize
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPaint(PaintEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnPaint(e);
|
||||||
|
|
||||||
|
int radius = 45;
|
||||||
|
int borderWidth = 1;
|
||||||
|
|
||||||
|
// Adjust drawing rectangle
|
||||||
|
var rect = new Rectangle(borderWidth / 2, borderWidth / 2, Width - borderWidth, Height - borderWidth);
|
||||||
|
radius = Math.Min(radius, Math.Min(rect.Width, rect.Height) / 2); // Clamp radius
|
||||||
|
|
||||||
|
var path = new System.Drawing.Drawing2D.GraphicsPath();
|
||||||
|
path.AddArc(rect.Left, rect.Top, radius * 2, radius * 2, 180, 90);
|
||||||
|
path.AddArc(rect.Right - radius * 2, rect.Top, radius * 2, radius * 2, 270, 90);
|
||||||
|
path.AddArc(rect.Right - radius * 2, rect.Bottom - radius * 2, radius * 2, radius * 2, 0, 90);
|
||||||
|
path.AddArc(rect.Left, rect.Bottom - radius * 2, radius * 2, radius * 2, 90, 90);
|
||||||
|
path.CloseFigure();
|
||||||
|
|
||||||
|
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
|
||||||
|
|
||||||
|
e.Graphics.DrawPath(new Pen(Color.Gray, borderWidth), path); // Draw border
|
||||||
|
|
||||||
|
this.Region = new Region(path); // apply rounded region
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnGitHub_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Process.Start("https://github.com/builtbybel/Flyby11");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnClose_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnDonate_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = "https://www.paypal.com/donate?hosted_button_id=MY7HX4QLYR4KG",
|
||||||
|
UseShellExecute = true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void chkDonated_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DonationHelper.SetDonationStatus(chkDonated.Checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Version NormalizeVersionString(string version)
|
||||||
|
{
|
||||||
|
// Split by dot
|
||||||
|
var parts = version.Split('.');
|
||||||
|
// Add missing zeros to have at least 3 parts
|
||||||
|
while (parts.Length < 3)
|
||||||
|
{
|
||||||
|
version += ".0";
|
||||||
|
parts = version.Split('.');
|
||||||
|
}
|
||||||
|
return Version.Parse(version);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task CheckForUpdateAsync()
|
||||||
|
{
|
||||||
|
const string githubApiUrl = "https://api.github.com/repos/builtbybel/Flyby11/releases/latest";
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var client = new HttpClient())
|
||||||
|
{
|
||||||
|
client.DefaultRequestHeaders.UserAgent.ParseAdd("FlyoobeUpdateChecker");
|
||||||
|
|
||||||
|
var response = await client.GetAsync(githubApiUrl);
|
||||||
|
response.EnsureSuccessStatusCode();
|
||||||
|
|
||||||
|
string json = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
const string tagKey = "\"tag_name\":\"";
|
||||||
|
int index = json.IndexOf(tagKey);
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
UpdateLabel($"Flyoobe v{Program.GetAppVersion()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int start = index + tagKey.Length;
|
||||||
|
int end = json.IndexOf("\"", start);
|
||||||
|
if (end <= start)
|
||||||
|
{
|
||||||
|
UpdateLabel($"Flyoobe version {Program.GetAppVersion()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string latestTag = json.Substring(start, end - start);
|
||||||
|
|
||||||
|
if (latestTag.StartsWith("v"))
|
||||||
|
latestTag = latestTag.Substring(1);
|
||||||
|
|
||||||
|
string currentVersionString = Program.GetAppVersion();
|
||||||
|
|
||||||
|
Version latestVersion = NormalizeVersionString(latestTag);
|
||||||
|
Version currentVersion = NormalizeVersionString(currentVersionString);
|
||||||
|
|
||||||
|
if (latestVersion > currentVersion)
|
||||||
|
{
|
||||||
|
UpdateLabel($"Update available: v{latestVersion}", clickable: true);
|
||||||
|
}
|
||||||
|
else if (latestVersion == currentVersion)
|
||||||
|
{
|
||||||
|
UpdateLabel($"Flyoobe version {currentVersion} (up-to-date)");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// User has a dev or newer version
|
||||||
|
UpdateLabel($"Flyoobe version {currentVersion} (dev version?)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
UpdateLabel($"Update check failed: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper method to update label safely on UI thread
|
||||||
|
private void UpdateLabel(string text, bool clickable = false)
|
||||||
|
{
|
||||||
|
// Update label text
|
||||||
|
linkAppVersion.Text = text;
|
||||||
|
|
||||||
|
// If clickable, show bold & underline and make cursor a hand
|
||||||
|
if (clickable)
|
||||||
|
{
|
||||||
|
linkAppVersion.Font = new Font(linkAppVersion.Font, FontStyle.Bold | FontStyle.Underline);
|
||||||
|
linkAppVersion.Enabled = true;
|
||||||
|
linkAppVersion.Cursor = Cursors.Hand;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Otherwise normal font and default cursor
|
||||||
|
linkAppVersion.Font = new Font(linkAppVersion.Font, FontStyle.Regular);
|
||||||
|
linkAppVersion.Enabled = false;
|
||||||
|
linkAppVersion.Cursor = Cursors.Default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void linkAppVersion_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||||
|
{
|
||||||
|
Process.Start(new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = "https://github.com/builtbybel/Flyby11/releases/latest",
|
||||||
|
UseShellExecute = true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
@@ -0,0 +1,71 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.UI
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Disables the Click to Do feature, which also removes its entry from the right-click context menu.
|
||||||
|
/// Only available on Copilot+ PCs running Windows 11 24H2 or newer.
|
||||||
|
/// Requires a PC with an NPU (Neural Processing Unit).
|
||||||
|
/// </summary>
|
||||||
|
internal class ClickToDo : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\ClickToDo";
|
||||||
|
private const string valueName = "DisableClickToDo";
|
||||||
|
private const int recommendedValue = 1; // 1 = fully disabled, including context menu
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Set to: {recommendedValue} (disables Click to Do, removing it from context menus). " +
|
||||||
|
"Note: This setting only applies on Copilot+ PCs with Windows 11 24H2 or newer.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Click to Do (Only Copilot+ PCs)";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Disables Click to Do entirely, including its context menu entry which uses on-device AI to suggest actions based on screen content. Only available on Copilot+ PCs with Windows 11 24H2 or newer.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error disabling Click to Do: " + ex.Message, LogLevel.Error);
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error re-enabling Click to Do: " + ex.Message, LogLevel.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.AI
|
||||||
|
{
|
||||||
|
internal class CopilotTaskbar : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\WindowsCopilot";
|
||||||
|
private const string valueName = "TurnOffWindowsCopilot";
|
||||||
|
private const int recommendedValue = 1;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Don't Show Copilot in Taskbar";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will disable Copilot in Taskbar.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.AI
|
||||||
|
{
|
||||||
|
internal class Recall : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsAI";
|
||||||
|
private const string valueName = "AllowRecallEnablement";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended: {recommendedValue} (Recall off – protect your privacy, prevent AI from accessing personal data)";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Turn off Recall in Windows 11";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This will remove Recall from Windows 11 24H2";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
// Check if reg key exists
|
||||||
|
object value = Registry.GetValue(keyName, valueName, null);
|
||||||
|
if (value == null)
|
||||||
|
{
|
||||||
|
// Key does not exist, turn off feature
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Key exists, check if value is desired value
|
||||||
|
return Task.FromResult((int)value == recommendedValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
Logger.Log("You've even disabled system-wide Snapshots for all users now.", LogLevel.Info);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Ads
|
||||||
|
{
|
||||||
|
internal class FileExplorerAds : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced";
|
||||||
|
private const string valueName = "ShowSyncProviderNotifications";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable File Explorer Ads";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will disable ads in File Explorer.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
Logger.Log("File Explorer Ads disabled", LogLevel.Info);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
Logger.Log("File Explorer Ads enabled", LogLevel.Info);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Ads
|
||||||
|
{
|
||||||
|
internal class FinishSetupAds : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement";
|
||||||
|
private const string valueName = "ScoobeSystemSettingEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string ID() => "Disable Finish Setup Ads";
|
||||||
|
|
||||||
|
public override string Info() => "This feature will disable the \"Lets finish setting up your device\" and other advertising.";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return
|
||||||
|
Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Ads
|
||||||
|
{
|
||||||
|
internal class LockScreenAds : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager";
|
||||||
|
private const string valueName = "RotatingLockScreenOverlayEnabled";
|
||||||
|
private const string valueName2 = "SubscribedContent-338387Enabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string ID() => "Disable Lock Screen Tips and Ads";
|
||||||
|
|
||||||
|
public override string Info() => "This feature will disable tips and ads on the lock screen.";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue) &&
|
||||||
|
Utils.IntEquals(keyName, valueName2, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName, valueName2, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName, valueName2, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Ads
|
||||||
|
{
|
||||||
|
public class PersonalizedAds : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo";
|
||||||
|
private const string valueName = "Enabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string ID() => "Disable Personalized Ads";
|
||||||
|
|
||||||
|
public override string Info() => "This feature will disable personalized ads.";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Ads
|
||||||
|
{
|
||||||
|
internal class SettingsAds : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager";
|
||||||
|
private const string valueName = "SubscribedContent-338393Enabled";
|
||||||
|
private const string valueName2 = "SubscribedContent-353694Enabled";
|
||||||
|
private const string valueName3 = "SubscribedContent-353696Enabled";
|
||||||
|
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string ID() => "Disable Settings Ads";
|
||||||
|
|
||||||
|
public override string Info() => "This feature will disable ads in settings.";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} + {valueName2} + {valueName3} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue) &&
|
||||||
|
Utils.IntEquals(keyName, valueName2, recommendedValue) &&
|
||||||
|
Utils.IntEquals(keyName, valueName3, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName, valueName2, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName, valueName3, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName, valueName2, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName, valueName3, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Ads
|
||||||
|
{
|
||||||
|
internal class StartmenuAds : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced";
|
||||||
|
private const string valueName = "Start_IrisRecommendations";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Start menu Ads";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will disable ads in the start menu.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Ads
|
||||||
|
{
|
||||||
|
internal class TailoredExperiences : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Privacy";
|
||||||
|
private const string valueName = "TailoredExperiencesWithDiagnosticDataEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Tailored experiences";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Tailored Experiences allows Microsoft to get information from you to deliver personalized tips, ads, and recommendations. Many people would call this telemetry, or even spying.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Ads
|
||||||
|
{
|
||||||
|
internal class TipsAndSuggestions : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager";
|
||||||
|
private const string valueName = "SubscribedContent-338389Enabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string ID() => "Disable General Tips and Ads";
|
||||||
|
|
||||||
|
public override string Info() => "This feature will disable general tips and ads.";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Ads
|
||||||
|
{
|
||||||
|
public class WelcomeExperienceAds : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager";
|
||||||
|
private const string valueName = "SubscribedContent-310093Enabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string ID() => "Disable Welcome Experience Ads";
|
||||||
|
|
||||||
|
public override string Info() => "This feature will disable ads in the welcome experience.";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class BrowserSignin : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "BrowserSignin";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Disable Browser sign in and sync services";
|
||||||
|
|
||||||
|
public override string Info() => "This setting controls whether a user can sign into Microsoft Edge with an account to use services such as sync and single sign on";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class DefaultTopSites : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "NewTabPageHideDefaultTopSites";
|
||||||
|
private const int recommendedValue = 1;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Don't Show Sponsored links in new tab page";
|
||||||
|
|
||||||
|
public override string Info() => "Hide default top sites from the new tab page in Microsoft Edge";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class DefautBrowserSetting : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "DefaultBrowserSettingEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Disable Microsoft Edge as default browser";
|
||||||
|
|
||||||
|
public override string Info() => "Force Edge to stop asking to change default browser";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class EdgeCollections : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "EdgeCollectionsEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string ID() => "Disable Access to Collections feature";
|
||||||
|
|
||||||
|
public override string Info() => "Enables users to access the Collections feature, allowing them to gather, organize, share, and export content more efficiently with Office integration";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class EdgeShoppingAssistant : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "EdgeShoppingAssistantEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Disable Shopping assistant";
|
||||||
|
|
||||||
|
public override string Info() => "Shopping in Microsoft Edge feature will automatically find you the best prices and coupons from across the web as you shop";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class FirstRunExperience : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "HideFirstRunExperience";
|
||||||
|
private const int recommendedValue = 1;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Don't Show First Run Experience";
|
||||||
|
|
||||||
|
public override string Info() => "Hide home screen and 'Getting Started' on initial launch (from version 80 onwards)";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class GamerMode : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "GamerModeEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Disable Gamer Mode";
|
||||||
|
|
||||||
|
public override string Info() => "Microsoft Edge Gamer Mode allows gamers to personalize their browser with gaming themes and gives them the option of enabling Efficiency Mode for PC gaming, the Gaming feed on new tabs, sidebar apps for gamers, and more";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class HubsSidebar : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "HubsSidebarEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Disable Copilot Symbol in Edge";
|
||||||
|
|
||||||
|
public override string Info() => "This feature will disable Copilot in Microsoft Edge.";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class ImportOnEachLaunch : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "ImportOnEachLaunch";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Don't Allow to Import of data from other browsers on each launch";
|
||||||
|
|
||||||
|
public override string Info() => "Allow import of data from other browsers on each Microsoft Edge launch";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class StartupBoost : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "StartupBoostEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Disable Start Boost";
|
||||||
|
|
||||||
|
public override string Info() => "Enables Microsoft Edge processes to initialize at operating system startup and restart in the background after the last browser window has been closed";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class TabPageQuickLinks : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "NewTabPageQuickLinksEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Don't Show Quick links in new tab page";
|
||||||
|
|
||||||
|
public override string Info() => "By default, when you open a new tab, you see a Bing search bar, Bing image of the day set as the page background. For supported websites, Quick Links on the New Tab page can display recent updates right in the tile";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Edge
|
||||||
|
{
|
||||||
|
public class UserFeedback : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Edge";
|
||||||
|
private const string valueName = "UserFeedbackAllowed";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID() => "Don't Submit user feedback option";
|
||||||
|
|
||||||
|
public override string Info() => "Allow the submission of feedback, suggestions, or customer surveys, as well as reporting issues with the browser";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Flyoobe
|
||||||
|
{
|
||||||
|
public abstract class FeatureBase
|
||||||
|
{
|
||||||
|
public abstract string ID();
|
||||||
|
|
||||||
|
public abstract string Info();
|
||||||
|
|
||||||
|
public abstract string GetFeatureDetails();
|
||||||
|
|
||||||
|
public abstract string SupportedOS();
|
||||||
|
|
||||||
|
public abstract Task<bool> CheckFeature();
|
||||||
|
|
||||||
|
public abstract Task<bool> DoFeature();
|
||||||
|
|
||||||
|
public abstract bool UndoFeature();
|
||||||
|
|
||||||
|
public abstract bool IsRecommended { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
using Flyoobe; // for FeatureNode
|
||||||
|
using Settings.Ads;
|
||||||
|
using Settings.AI;
|
||||||
|
using Settings.Edge;
|
||||||
|
using Settings.Gaming;
|
||||||
|
using Settings.Issues;
|
||||||
|
using Settings.Personalization;
|
||||||
|
using Settings.Privacy;
|
||||||
|
using Settings.System;
|
||||||
|
using Settings.UI;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Features
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Loads all available feature categories and their corresponding tweak nodes.
|
||||||
|
/// Each tweak inherits from FeatureBase and represents a system setting or cleanup action.
|
||||||
|
/// </summary>
|
||||||
|
public static class FeatureLoader
|
||||||
|
{
|
||||||
|
public static List<FeatureNode> Load()
|
||||||
|
{
|
||||||
|
return new List<FeatureNode>
|
||||||
|
{
|
||||||
|
new FeatureNode("Issues")
|
||||||
|
{
|
||||||
|
Children = new List<FeatureNode>
|
||||||
|
{
|
||||||
|
new FeatureNode(new BasicCleanup()),
|
||||||
|
new FeatureNode(new WingetUpgradeAll())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new FeatureNode("System")
|
||||||
|
{
|
||||||
|
Children = new List<FeatureNode>
|
||||||
|
{
|
||||||
|
new FeatureNode(new BSODDetails()),
|
||||||
|
new FeatureNode(new VerboseStatus()),
|
||||||
|
new FeatureNode(new SpeedUpShutdown()),
|
||||||
|
new FeatureNode(new NetworkThrottling()),
|
||||||
|
new FeatureNode(new SystemResponsiveness()),
|
||||||
|
new FeatureNode(new MenuShowDelay()),
|
||||||
|
new FeatureNode(new TaskbarEndTask()),
|
||||||
|
new FeatureNode(new DisableHibernation())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new FeatureNode("MS Edge")
|
||||||
|
{
|
||||||
|
Children = new List<FeatureNode>
|
||||||
|
{
|
||||||
|
new FeatureNode(new BrowserSignin()),
|
||||||
|
new FeatureNode(new DefaultTopSites()),
|
||||||
|
new FeatureNode(new DefautBrowserSetting()),
|
||||||
|
new FeatureNode(new EdgeCollections()),
|
||||||
|
new FeatureNode(new EdgeShoppingAssistant()),
|
||||||
|
new FeatureNode(new FirstRunExperience()),
|
||||||
|
new FeatureNode(new GamerMode()),
|
||||||
|
new FeatureNode(new HubsSidebar()),
|
||||||
|
new FeatureNode(new ImportOnEachLaunch()),
|
||||||
|
new FeatureNode(new StartupBoost()),
|
||||||
|
new FeatureNode(new TabPageQuickLinks()),
|
||||||
|
new FeatureNode(new UserFeedback())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new FeatureNode("UI")
|
||||||
|
{
|
||||||
|
Children = new List<FeatureNode>
|
||||||
|
{
|
||||||
|
new FeatureNode(new FullContextMenus()),
|
||||||
|
new FeatureNode(new WLockScreen()),
|
||||||
|
new FeatureNode(new SearchboxTaskbarMode()),
|
||||||
|
new FeatureNode(new ShowOrHideMostUsedApps()),
|
||||||
|
new FeatureNode(new ShowTaskViewButton()),
|
||||||
|
new FeatureNode(new DisableSearchBoxSuggestions()),
|
||||||
|
new FeatureNode(new DisableBingSearch()),
|
||||||
|
new FeatureNode(new StartLayout()),
|
||||||
|
new FeatureNode(new Transparency()),
|
||||||
|
new FeatureNode(new DisableSnapAssistFlyout())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new FeatureNode("Gaming")
|
||||||
|
{
|
||||||
|
Children = new List<FeatureNode>
|
||||||
|
{
|
||||||
|
new FeatureNode(new GameDVR()),
|
||||||
|
new FeatureNode(new PowerThrottling()),
|
||||||
|
new FeatureNode(new VisualFX())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new FeatureNode("Privacy")
|
||||||
|
{
|
||||||
|
Children = new List<FeatureNode>
|
||||||
|
{
|
||||||
|
new FeatureNode(new ActivityHistory()),
|
||||||
|
new FeatureNode(new LocationTracking()),
|
||||||
|
new FeatureNode(new PrivacyExperience()),
|
||||||
|
new FeatureNode(new Telemetry())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new FeatureNode("Ads")
|
||||||
|
{
|
||||||
|
Children = new List<FeatureNode>
|
||||||
|
{
|
||||||
|
new FeatureNode(new FileExplorerAds()),
|
||||||
|
new FeatureNode(new FinishSetupAds()),
|
||||||
|
new FeatureNode(new LockScreenAds()),
|
||||||
|
new FeatureNode(new PersonalizedAds()),
|
||||||
|
new FeatureNode(new SettingsAds()),
|
||||||
|
new FeatureNode(new StartmenuAds()),
|
||||||
|
new FeatureNode(new TailoredExperiences()),
|
||||||
|
new FeatureNode(new TipsAndSuggestions()),
|
||||||
|
new FeatureNode(new WelcomeExperienceAds())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
new FeatureNode("AI")
|
||||||
|
{
|
||||||
|
Children = new List<FeatureNode>
|
||||||
|
{
|
||||||
|
new FeatureNode(new CopilotTaskbar()),
|
||||||
|
new FeatureNode(new Recall()),
|
||||||
|
new FeatureNode(new ClickToDo())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
using Features;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Flyoobe
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Manages all available features and categories.
|
||||||
|
/// Provides methods to query, apply, and undo tweaks.
|
||||||
|
/// </summary>
|
||||||
|
public class FeatureManager
|
||||||
|
{
|
||||||
|
// List of all loaded features (root nodes with category and children)
|
||||||
|
public List<FeatureNode> AllFeatures { get; private set; }
|
||||||
|
|
||||||
|
public FeatureManager()
|
||||||
|
{
|
||||||
|
// Load features from loader once during construction
|
||||||
|
AllFeatures = FeatureLoader.Load();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns all available top-level categories.
|
||||||
|
/// </summary>
|
||||||
|
public List<string> GetCategories()
|
||||||
|
{
|
||||||
|
return AllFeatures.Select(f => f.Category).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns all tweaks under a specific category.
|
||||||
|
/// </summary>
|
||||||
|
public List<FeatureNode> GetFeaturesByCategory(string category)
|
||||||
|
{
|
||||||
|
return AllFeatures.FirstOrDefault(f => f.Category == category)?.Children ?? new List<FeatureNode>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Applies (executes) a selected tweak asynchronously.
|
||||||
|
/// </summary>
|
||||||
|
public async Task<bool> ApplyFeature(FeatureNode node)
|
||||||
|
{
|
||||||
|
return await node.Feature.DoFeature();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Undoes a tweak if supported.
|
||||||
|
/// </summary>
|
||||||
|
public bool UndoFeature(FeatureNode node)
|
||||||
|
{
|
||||||
|
return node.Feature.UndoFeature();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the short informational description of the feature.
|
||||||
|
/// </summary>
|
||||||
|
public string GetFeatureInfo(FeatureNode node)
|
||||||
|
{
|
||||||
|
return node.Feature?.Info() ?? "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if the tweak is currently enabled (active).
|
||||||
|
/// </summary>
|
||||||
|
public async Task<bool> IsEnabled(FeatureNode node)
|
||||||
|
{
|
||||||
|
return await node.Feature.CheckFeature();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Collects all features from all categories that are marked as "Recommended"
|
||||||
|
/// Use quick settings option.
|
||||||
|
/// </summary>
|
||||||
|
public List<FeatureNode> GetAllRecommendedFeatures()
|
||||||
|
{
|
||||||
|
var recommended = new List<FeatureNode>();
|
||||||
|
foreach (var categoryNode in AllFeatures)
|
||||||
|
{
|
||||||
|
foreach (var featureNode in categoryNode.Children)
|
||||||
|
{
|
||||||
|
if (featureNode.Feature.IsRecommended)
|
||||||
|
{
|
||||||
|
recommended.Add(featureNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return recommended;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Flyoobe
|
||||||
|
{
|
||||||
|
public class FeatureNode
|
||||||
|
{
|
||||||
|
public string Category { get; set; }
|
||||||
|
public FeatureBase Feature { get; set; }
|
||||||
|
public List<FeatureNode> Children { get; set; } = new List<FeatureNode>();
|
||||||
|
|
||||||
|
public FeatureNode(string category)
|
||||||
|
{
|
||||||
|
Category = category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FeatureNode(FeatureBase feature)
|
||||||
|
{
|
||||||
|
Feature = feature;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return Feature?.ID() ?? Category;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Gaming
|
||||||
|
{
|
||||||
|
internal class GameDVR : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\System\GameConfigStore";
|
||||||
|
|
||||||
|
// 0 = Enabled, 2 = Disabled
|
||||||
|
private const string keyName2 = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PolicyManager\default\ApplicationManagement\AllowGameDVR";
|
||||||
|
|
||||||
|
private const string valueName = "GameDVR_Enabled";
|
||||||
|
private const string valueName2 = "GameDVR_FSEBehaviorMode";
|
||||||
|
private const string valueName3 = "value";
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} |Value: {valueName} | {valueName2} | {keyName2} | {valueName3} ";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Game DVR";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will disable Game DVR.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, 0) &&
|
||||||
|
Utils.IntEquals(keyName, valueName2, 2) &&
|
||||||
|
Utils.IntEquals(keyName2, valueName3, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName, valueName2, 2, RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName2, valueName3, 0, RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName, valueName2, 0, RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName2, valueName3, 1, RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Gaming
|
||||||
|
{
|
||||||
|
internal class PowerThrottling : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerThrottling";
|
||||||
|
private const string valueName = "PowerThrottlingOff";
|
||||||
|
private const int recommendedValue = 1;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Power Throttling";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will disable Power Throttling.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Gaming
|
||||||
|
{
|
||||||
|
internal class VisualFX : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\VisualEffects";
|
||||||
|
private const string valueName = "VisualFXSetting";
|
||||||
|
private const int recommendedValue = 2;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Visual Effects";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Turns off visual effects like animations and shadows in Windows to boost performance.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 2, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,163 @@
|
|||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Issues
|
||||||
|
{
|
||||||
|
internal class BasicCleanup : FeatureBase
|
||||||
|
{
|
||||||
|
private readonly string tempPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Temp");
|
||||||
|
private const int cleanupSetNumber = 1;
|
||||||
|
|
||||||
|
public override string ID() => "Basic Disk Cleanup";
|
||||||
|
|
||||||
|
public override string Info() => "Deletes all temporary files from the user's Temp folder. Then, the built-in Disk Cleanup utility (cleanmgr) is run.";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var totalSize = GetDirectorySize(tempPath);
|
||||||
|
|
||||||
|
bool isOk = totalSize <= 50;
|
||||||
|
|
||||||
|
return Task.FromResult(isOk);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log($"Error checking Temp folder: {ex.Message}", LogLevel.Error);
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var totalSize = GetDirectorySize(tempPath);
|
||||||
|
return $"Temp folder size: {totalSize} MB (including cleanmgr /sagerun:1 in the next run)";
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log($"Error accessing Temp folder: {ex.Message}", LogLevel.Error);
|
||||||
|
return $"Temp folder not accessible: {tempPath}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await CleanTempFolderAsync();
|
||||||
|
await RunDiskCleanup();
|
||||||
|
Logger.Log("Basic Cleanup completed successfully.", LogLevel.Info);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log($"Error cleaning Temp folder: {ex.Message}", LogLevel.Warning);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task CleanTempFolderAsync()
|
||||||
|
{
|
||||||
|
var files = await Task.Run(() => Directory.GetFiles(tempPath, "*", SearchOption.AllDirectories));
|
||||||
|
var dirs = await Task.Run(() => Directory.GetDirectories(tempPath, "*", SearchOption.AllDirectories));
|
||||||
|
|
||||||
|
foreach (var file in files)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await Task.Run(() => File.Delete(file));
|
||||||
|
Logger.Log($"Deleted file: {file}", LogLevel.Info);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log($"Error deleting file {file}: {ex.Message}", LogLevel.Warning);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var dir in dirs)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await Task.Run(() => Directory.Delete(dir, true));
|
||||||
|
Logger.Log($"Deleted directory: {dir}", LogLevel.Info);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log($"Error deleting directory {dir}: {ex.Message}", LogLevel.Warning);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// calculate the size of the directory in MB
|
||||||
|
private long GetDirectorySize(string directory)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var directoryInfo = new DirectoryInfo(directory);
|
||||||
|
long size = 0;
|
||||||
|
|
||||||
|
// Calculate size of all files
|
||||||
|
size += directoryInfo.GetFiles("*", SearchOption.AllDirectories).Sum(file => file.Length);
|
||||||
|
|
||||||
|
return size / (1024 * 1024); // return size in MB
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log($"Error calculating directory size: {ex.Message}", LogLevel.Warning);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task RunDiskCleanup()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Logger.Log("Running Disk Cleanup utility (cleanmgr)...", LogLevel.Info);
|
||||||
|
|
||||||
|
var sageSetCmd = $"cleanmgr.exe /sageset:{cleanupSetNumber}";
|
||||||
|
var startInfo1 = new ProcessStartInfo("cmd", $"/c {sageSetCmd}")
|
||||||
|
{
|
||||||
|
CreateNoWindow = true,
|
||||||
|
UseShellExecute = false
|
||||||
|
};
|
||||||
|
|
||||||
|
var sageRunCmd = $"cleanmgr.exe /sagerun:{cleanupSetNumber}";
|
||||||
|
var veryLowDiskCmd = $"cleanmgr.exe /verylowdisk";
|
||||||
|
var startInfo2 = new ProcessStartInfo("cmd", $"/c {sageRunCmd} {veryLowDiskCmd}")
|
||||||
|
{
|
||||||
|
CreateNoWindow = true,
|
||||||
|
UseShellExecute = false
|
||||||
|
};
|
||||||
|
|
||||||
|
using (var process1 = Process.Start(startInfo1))
|
||||||
|
{
|
||||||
|
if (process1 != null)
|
||||||
|
await Task.Run(() => process1.WaitForExit());
|
||||||
|
}
|
||||||
|
|
||||||
|
using (var process2 = Process.Start(startInfo2))
|
||||||
|
{
|
||||||
|
if (process2 != null)
|
||||||
|
await Task.Run(() => process2.WaitForExit());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log($"Error running Disk Cleanup: {ex.Message}", LogLevel.Warning);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Undo method: Cleanup cannot be undone, so return false
|
||||||
|
public override bool UndoFeature() => false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.System
|
||||||
|
{
|
||||||
|
internal class WingetUpgradeAll : FeatureBase
|
||||||
|
{
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return "winget upgrade --include-unknown";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Winget App Updates";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Automatically searches for available app updates using the Windows package manager 'winget' and installs them in a new Windows Terminal window. It runs 'winget upgrade --include-unknown' to list all available updates, including manually installed apps, and then 'winget upgrade --all --include-unknown' to install them. No manual interaction is required.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
Logger.Log("📦 Checking all available updates via winget...", LogLevel.Warning);
|
||||||
|
Logger.Log("This may take a while, please be patient.", LogLevel.Warning);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string output = await ExecuteCommand("winget upgrade --include-unknown");
|
||||||
|
|
||||||
|
Logger.Log("Winget upgrade check:\n" + output, LogLevel.Info);
|
||||||
|
|
||||||
|
return output.ToLower().Contains("available");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Winget check failed: " + ex.Message, LogLevel.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
return Task.Factory.StartNew(() =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LaunchInTerminal("winget upgrade --all --include-unknown");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Failed to run winget upgrade: " + ex.Message, LogLevel.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
Logger.Log("Winget upgrades cannot be undone.", LogLevel.Warning);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LaunchInTerminal(string command)
|
||||||
|
{
|
||||||
|
var startInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = "wt.exe",
|
||||||
|
Arguments = "-w 0 nt -p \"Windows PowerShell\" powershell -NoExit -Command \"" + command + "\"",
|
||||||
|
UseShellExecute = true
|
||||||
|
};
|
||||||
|
|
||||||
|
Process.Start(startInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task<string> ExecuteCommand(string command)
|
||||||
|
{
|
||||||
|
var tcs = new TaskCompletionSource<string>();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var startInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = "cmd.exe",
|
||||||
|
Arguments = "/c " + command,
|
||||||
|
UseShellExecute = false,
|
||||||
|
RedirectStandardOutput = true,
|
||||||
|
RedirectStandardError = true,
|
||||||
|
CreateNoWindow = true
|
||||||
|
};
|
||||||
|
|
||||||
|
var process = new Process();
|
||||||
|
process.StartInfo = startInfo;
|
||||||
|
|
||||||
|
string output = "";
|
||||||
|
|
||||||
|
process.OutputDataReceived += (sender, args) =>
|
||||||
|
{
|
||||||
|
if (args.Data != null)
|
||||||
|
output += args.Data + Environment.NewLine;
|
||||||
|
};
|
||||||
|
|
||||||
|
process.EnableRaisingEvents = true;
|
||||||
|
process.Exited += (sender, args) =>
|
||||||
|
{
|
||||||
|
tcs.TrySetResult(output);
|
||||||
|
process.Dispose();
|
||||||
|
};
|
||||||
|
|
||||||
|
process.Start();
|
||||||
|
process.BeginOutputReadLine();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
tcs.TrySetException(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tcs.Task;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Privacy
|
||||||
|
{
|
||||||
|
internal class ActivityHistory : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System";
|
||||||
|
private const string valueName = "PublishUserActivities";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable activity history";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Disable activity history (prevents Windows from tracking and storing your activity)";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Privacy
|
||||||
|
{
|
||||||
|
internal class LocationTracking : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\LocationAndSensors";
|
||||||
|
private const string valueName = "LocationEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable location tracking";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Disable location tracking (prevents Windows from accessing your location)";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Privacy
|
||||||
|
{
|
||||||
|
public class PrivacyExperience : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\OOBE";
|
||||||
|
private const string valueName = "DisablePrivacyExperience";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string ID() => "Disable Privacy Settings Experience at sign-in";
|
||||||
|
|
||||||
|
public override string Info() => "This feature will disable Privacy Settings Experience at sign-in.";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
bool result = !Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||||
|
return Task.FromResult(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, Microsoft.Win32.RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Privacy
|
||||||
|
{
|
||||||
|
public class Telemetry : FeatureBase
|
||||||
|
{
|
||||||
|
private const string dataCollection = @"HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\DataCollection";
|
||||||
|
private const string diagTrack = @"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\DiagTrack";
|
||||||
|
|
||||||
|
public override string ID() => "Turn off Telemetry data collection";
|
||||||
|
|
||||||
|
public override string Info() => "This feature will turn off telemetry data collection and prevent the data from being sent to Microsoft.";
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{dataCollection} | {diagTrack}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(dataCollection, "AllowTelemetry", 0) &&
|
||||||
|
Utils.IntEquals(diagTrack, "Start", 4)
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(dataCollection, "AllowTelemetry", 0, RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(diagTrack, "Start", 4, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(dataCollection, "AllowTelemetry", 1, RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(diagTrack, "Start", 2, RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.System
|
||||||
|
{
|
||||||
|
internal class BSODDetails : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\CrashControl";
|
||||||
|
private const string valueName1 = "DisplayParameters";
|
||||||
|
private const string valueName2 = "DisableEmoticon";
|
||||||
|
private const int recommendedValue = 1;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Values: {valueName1}, {valueName2} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Show BSOD details instead of sad smiley";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This method displays the full classic BSOD with technical error details instead of the simplified sad face version.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName1, recommendedValue) &&
|
||||||
|
Utils.IntEquals(keyName, valueName2, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName1, recommendedValue, RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName, valueName2, recommendedValue, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName1, 0, RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(keyName, valueName2, 0, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.System
|
||||||
|
{
|
||||||
|
internal class DisableHibernation : FeatureBase
|
||||||
|
{
|
||||||
|
private const string powerKey = @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power";
|
||||||
|
private const string hibernateValueName = "HibernateEnabled";
|
||||||
|
private const int disabledValue = 0;
|
||||||
|
private const int enabledValue = 1;
|
||||||
|
|
||||||
|
// Key to hide/show the Hibernate option in the power menu Alt+F4 dialog
|
||||||
|
private const string flyoutMenuKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FlyoutMenuSettings";
|
||||||
|
|
||||||
|
private const string showHibernateOptionName = "ShowHibernateOption";
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return "Disables hibernation by setting registry values and running powercfg, and hides/shows the Hibernate option in the power menu.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Hibernation";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Hibernation is mostly useful for laptops to save battery by storing your session before shutdown. On desktops, it is rarely needed and uses disk space. Disabling it frees resources and avoids confusion by hiding the Hibernate option in the power menu.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
bool hibernateDisabled = Utils.IntEquals(powerKey, hibernateValueName, disabledValue);
|
||||||
|
bool optionHidden = Utils.IntEquals(flyoutMenuKey, showHibernateOptionName, 0);
|
||||||
|
return Task.FromResult(hibernateDisabled && optionHidden);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(powerKey, hibernateValueName, disabledValue, RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(flyoutMenuKey, showHibernateOptionName, 0, RegistryValueKind.DWord);
|
||||||
|
RunCommand("powercfg", "/hibernate off");
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error disabling hibernation: " + ex.Message, LogLevel.Error);
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(powerKey, hibernateValueName, enabledValue, RegistryValueKind.DWord);
|
||||||
|
Registry.SetValue(flyoutMenuKey, showHibernateOptionName, 1, RegistryValueKind.DWord);
|
||||||
|
RunCommand("powercfg", "/hibernate on");
|
||||||
|
bool hibernateEnabled = Utils.IntEquals(powerKey, hibernateValueName, enabledValue);
|
||||||
|
bool optionShown = Utils.IntEquals(flyoutMenuKey, showHibernateOptionName, 1);
|
||||||
|
return hibernateEnabled && optionShown;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error enabling hibernation: " + ex.Message, LogLevel.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RunCommand(string fileName, string arguments)
|
||||||
|
{
|
||||||
|
using (var process = new Process())
|
||||||
|
{
|
||||||
|
process.StartInfo.FileName = fileName;
|
||||||
|
process.StartInfo.Arguments = arguments;
|
||||||
|
process.StartInfo.CreateNoWindow = true;
|
||||||
|
process.StartInfo.UseShellExecute = false;
|
||||||
|
process.Start();
|
||||||
|
process.WaitForExit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.System
|
||||||
|
{
|
||||||
|
internal class MenuShowDelay : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Control Panel\Desktop";
|
||||||
|
private const string valueName = "MenuShowDelay";
|
||||||
|
private const string recommendedValue = "10";
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: \"{recommendedValue}\" (faster menu response)";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Speed Up Menu Show Delay";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Speeds up the appearance of menus and submenus by lowering the default delay. This improves the perceived responsiveness of the UI.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.StringEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.String);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, "400", RegistryValueKind.String); // Default is 400 on Windows 11
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.System
|
||||||
|
{
|
||||||
|
internal class NetworkThrottling : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile";
|
||||||
|
private const string valueName = "NetworkThrottlingIndex";
|
||||||
|
private const int recommendedValue = -1; // 0xFFFFFFFF
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: 0xFFFFFFFF (decimal: {uint.MaxValue})";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Network Throttling";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Disables the Windows network throttling mechanism to potentially improve performance for streaming, gaming, or real-time applications.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, unchecked((int)0xFFFFFFFF)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, unchecked((int)0xFFFFFFFF), RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 10, RegistryValueKind.DWord); // Default is 10
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.System
|
||||||
|
{
|
||||||
|
internal class SpeedUpShutdown : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control";
|
||||||
|
private const string valueName = "WaitToKillServiceTimeout";
|
||||||
|
private const string recommendedValue = "1000"; // Set to 1000 ms (1 second)
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue} ms";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Speed Up Shutdown Time";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature reduces the WaitToKillServiceTimeout value, which speeds up the shutdown process by reducing the time Windows waits for services to stop.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.StringEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.String);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error in SpeedUpShutdown: " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, "5000", RegistryValueKind.String); // Default value
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error in SpeedUpShutdown (Undo): " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.System
|
||||||
|
{
|
||||||
|
internal class SystemResponsiveness : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile";
|
||||||
|
private const string valueName = "SystemResponsiveness";
|
||||||
|
private const int recommendedValue = 10;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Optimize System Responsiveness";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Enhances system responsiveness by prioritizing CPU resources for foreground tasks, improving performance during active use.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 20, RegistryValueKind.DWord); // Default is typically 20 on Windows 11
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.System
|
||||||
|
{
|
||||||
|
internal class TaskbarEndTask : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\TaskbarDeveloperSettings";
|
||||||
|
private const string valueName = "TaskbarEndTask";
|
||||||
|
private const int recommendedValue = 1;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Enable End Task";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "Adds 'End Task' to the Windows 11 taskbar context menu, allowing you to directly kill unresponsive apps.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Failed to enable End Task: " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Failed to disable End Task: " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.System
|
||||||
|
{
|
||||||
|
internal class VerboseStatus : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System";
|
||||||
|
private const string valueName = "VerboseStatus";
|
||||||
|
private const int recommendedValue = 1;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Enable Verbose Logon status messages";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This method allows you to see what processes are hanging when shutting down and turning on the machine.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.UI
|
||||||
|
{
|
||||||
|
internal class DisableBingSearch : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search";
|
||||||
|
private const string valueName = "BingSearchEnabled";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Bing Search";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature disables Bing integration in Windows Search.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error in DisableBingSearch: " + ex.Message, LogLevel.Error);
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error undoing DisableBingSearch: " + ex.Message, LogLevel.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Personalization
|
||||||
|
{
|
||||||
|
internal class FullContextMenus : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32";
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Show Full context menus in Windows 11";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will enable full context menus";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
object value = Registry.GetValue(keyName, "", null);
|
||||||
|
return Task.FromResult(value != null); // Return true if value is not null
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error occurred while checking: " + ex.Message, LogLevel.Error);
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, "", "", RegistryValueKind.String);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error occurred while enabling: " + ex.Message, LogLevel.Error);
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.CurrentUser.DeleteSubKeyTree(@"Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}", false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error occurred while disabling: " + ex.Message, LogLevel.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.UI
|
||||||
|
{
|
||||||
|
internal class DisableSearchBoxSuggestions : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer";
|
||||||
|
private const string valueName = "DisableSearchBoxSuggestions";
|
||||||
|
private const int recommendedValue = 1;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Search Box Suggestions";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature disables Bing search and web suggestions in the Windows Start Menu.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => true;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(Utils.IntEquals(keyName, valueName, recommendedValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error in DisableSearchBoxSuggestions: " + ex.Message, LogLevel.Error);
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord); // 0 = Enable suggestions
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error undoing DisableSearchBoxSuggestions: " + ex.Message, LogLevel.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Personalization
|
||||||
|
{
|
||||||
|
internal class SearchboxTaskbarMode : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search";
|
||||||
|
private const string valueName = "SearchboxTaskbarMode";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Hide search box on taskbar";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will hide search box on taskbar";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 2, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Personalization
|
||||||
|
{
|
||||||
|
internal class ShowOrHideMostUsedApps : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer";
|
||||||
|
private const string valueName = "ShowOrHideMostUsedApps";
|
||||||
|
private const int recommendedValue = 2;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Hide Most used apps in start menu";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will hide Most used apps in start menu for all users";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, recommendedValue, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Personalization
|
||||||
|
{
|
||||||
|
internal class ShowTaskViewButton : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced";
|
||||||
|
private const string valueName = "ShowTaskViewButton";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended: {recommendedValue} (Task View off – cleaner taskbar, unless you use it often)";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Hide Task view button on taskbar";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will hide the Task view button on taskbar";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Personalization
|
||||||
|
{
|
||||||
|
internal class DisableSnapAssistFlyout : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced";
|
||||||
|
private const string valueName = "EnableSnapAssistFlyout";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Snap Assist Flyout";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature disables the Snap Assist flyout, which appears when you snap a window.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error in DisableSnapAssistFlyout: " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error in DisableSnapAssistFlyout (Undo): " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Personalization
|
||||||
|
{
|
||||||
|
internal class StartLayout : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced";
|
||||||
|
private const string valueName = "Start_Layout";
|
||||||
|
private const int recommendedValue = 1;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Pin more Apps on start menu";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will allow pinning more Apps on start menu";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Personalization
|
||||||
|
{
|
||||||
|
internal class Transparency : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize";
|
||||||
|
private const string valueName = "EnableTransparency";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Suggestion: {recommendedValue} (No transparency – smoother performance, still stylish)";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Disable Transparency Effects";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature disables transparency effects for Start menu, taskbar, and other surfaces.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
return Task.FromResult(
|
||||||
|
Utils.IntEquals(keyName, valueName, recommendedValue)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error in DisableTransparency: " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Error in DisableTransparency (Undo): " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using Flyoobe;
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Settings.Personalization
|
||||||
|
{
|
||||||
|
internal class WLockScreen : FeatureBase
|
||||||
|
{
|
||||||
|
private const string keyName = @"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization";
|
||||||
|
private const string valueName = "NoLockScreen";
|
||||||
|
private const int recommendedValue = 0;
|
||||||
|
|
||||||
|
public override string GetFeatureDetails()
|
||||||
|
{
|
||||||
|
return $"{keyName} | Value: {valueName} | Recommended Value: {recommendedValue}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ID()
|
||||||
|
{
|
||||||
|
return "Don't use personalized lock screen";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Info()
|
||||||
|
{
|
||||||
|
return "This feature will disable the personalized lock screen.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string SupportedOS() => "Windows 10, Windows 11";
|
||||||
|
public override bool IsRecommended => false;
|
||||||
|
|
||||||
|
public override Task<bool> CheckFeature()
|
||||||
|
{
|
||||||
|
bool result = !Utils.IntEquals(keyName, valueName, recommendedValue);
|
||||||
|
return Task.FromResult(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<bool> DoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 1, RegistryValueKind.DWord);
|
||||||
|
return Task.FromResult(true);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.FromResult(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool UndoFeature()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Registry.SetValue(keyName, valueName, 0, RegistryValueKind.DWord);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log("Code red in " + ex.Message, LogLevel.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,326 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{50CA0D4D-45AD-4E03-BFC5-64FFF4CDA36C}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<RootNamespace>Flyoobe</RootNamespace>
|
||||||
|
<AssemblyName>Flyo</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup>
|
||||||
|
<ApplicationIcon>AppIcon.ico</ApplicationIcon>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Management" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Deployment" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
<Reference Include="Windows">
|
||||||
|
<HintPath>..\..\..\..\..\..\Program Files (x86)\Windows Kits\8.1\References\CommonConfiguration\Neutral\Annotated\Windows.winmd</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="AboutForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="AboutForm.Designer.cs">
|
||||||
|
<DependentUpon>AboutForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Helper\DonationHelper.cs" />
|
||||||
|
<Compile Include="Helper\CopilotHelper.cs" />
|
||||||
|
<Compile Include="InstallView\BackupDriversProvider.cs" />
|
||||||
|
<Compile Include="InstallView\BootMenuInfoProvider.cs" />
|
||||||
|
<Compile Include="InstallView\InPlaceRepairProvider.cs" />
|
||||||
|
<Compile Include="InstallView\InstallProviders.cs" />
|
||||||
|
<Compile Include="InstallView\MctProvider.cs" />
|
||||||
|
<Compile Include="InstallView\MountIsoProvider.cs" />
|
||||||
|
<Compile Include="InstallView\NativeResetProvider.cs" />
|
||||||
|
<Compile Include="InstallView\RebootToUefiProvider.cs" />
|
||||||
|
<Compile Include="InstallView\RufusProvider.cs" />
|
||||||
|
<Compile Include="InstallView\RunSetupFromIsoProvider.cs" />
|
||||||
|
<Compile Include="InstallView\ToolHelper.cs" />
|
||||||
|
<Compile Include="InstallView\VentoyProvider.cs" />
|
||||||
|
<Compile Include="UpgradeView\IsoHandler.cs" />
|
||||||
|
<Compile Include="LogForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="LogForm.Designer.cs">
|
||||||
|
<DependentUpon>LogForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="ToolHubView\ToolDefinition.cs" />
|
||||||
|
<Compile Include="ToolHubView\ToolHubControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="ToolHubView\ToolHubControlView.Designer.cs">
|
||||||
|
<DependentUpon>ToolHubControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="ToolHubView\ToolItemControl.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="ToolHubView\ToolItemControl.Designer.cs">
|
||||||
|
<DependentUpon>ToolItemControl.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\AccountControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\AccountControlView.Designer.cs">
|
||||||
|
<DependentUpon>AccountControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\AppsControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\AppsControlView.Designer.cs">
|
||||||
|
<DependentUpon>AppsControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Features\FeatureBase.cs" />
|
||||||
|
<Compile Include="Features\FeatureLoader.cs" />
|
||||||
|
<Compile Include="Features\FeatureManager.cs" />
|
||||||
|
<Compile Include="Features\FeatureNode.cs" />
|
||||||
|
<Compile Include="Features\Ads\FileExlorerAds.cs" />
|
||||||
|
<Compile Include="Features\Ads\FinishSetupAds.cs" />
|
||||||
|
<Compile Include="Features\Ads\LockScreenAds.cs" />
|
||||||
|
<Compile Include="Features\Ads\PersonalizedAds.cs" />
|
||||||
|
<Compile Include="Features\Ads\SettingsAds.cs" />
|
||||||
|
<Compile Include="Features\Ads\StartmenuAds.cs" />
|
||||||
|
<Compile Include="Features\Ads\TailoredExperiences.cs" />
|
||||||
|
<Compile Include="Features\Ads\TipsAndSuggestions.cs" />
|
||||||
|
<Compile Include="Features\Ads\WelcomeExperienceAds.cs" />
|
||||||
|
<Compile Include="Features\AI\ClickToDo.cs" />
|
||||||
|
<Compile Include="Features\AI\CopilotTaskbar.cs" />
|
||||||
|
<Compile Include="Features\AI\Recall.cs" />
|
||||||
|
<Compile Include="Features\Edge\BrowserSignin.cs" />
|
||||||
|
<Compile Include="Features\Edge\DefaultTopSites.cs" />
|
||||||
|
<Compile Include="Features\Edge\DefautBrowserSetting.cs" />
|
||||||
|
<Compile Include="Features\Edge\EdgeCollections.cs" />
|
||||||
|
<Compile Include="Features\Edge\EdgeShoppingAssistant.cs" />
|
||||||
|
<Compile Include="Features\Edge\FirstRunExperience.cs" />
|
||||||
|
<Compile Include="Features\Edge\GamerMode.cs" />
|
||||||
|
<Compile Include="Features\Edge\HubsSidebar.cs" />
|
||||||
|
<Compile Include="Features\Edge\ImportOnEachLaunch.cs" />
|
||||||
|
<Compile Include="Features\Edge\StartupBoost.cs" />
|
||||||
|
<Compile Include="Features\Edge\TabPageQuickLinks.cs" />
|
||||||
|
<Compile Include="Features\Edge\UserFeedback.cs" />
|
||||||
|
<Compile Include="Features\Gaming\GameDVR.cs" />
|
||||||
|
<Compile Include="Features\Gaming\PowerThrotteling.cs" />
|
||||||
|
<Compile Include="Features\Gaming\VisualFX.cs" />
|
||||||
|
<Compile Include="Features\Issues\BasicCleanup.cs" />
|
||||||
|
<Compile Include="Features\Issues\WingetUpgrade.cs" />
|
||||||
|
<Compile Include="Features\Privacy\ActivityHistory.cs" />
|
||||||
|
<Compile Include="Features\Privacy\LocationTracking.cs" />
|
||||||
|
<Compile Include="Features\Privacy\PrivacyExperience.cs" />
|
||||||
|
<Compile Include="Features\Privacy\Telemetry.cs" />
|
||||||
|
<Compile Include="Features\System\BSODDetails.cs" />
|
||||||
|
<Compile Include="Features\System\Hibernation.cs" />
|
||||||
|
<Compile Include="Features\System\MenuShowDelay.cs" />
|
||||||
|
<Compile Include="Features\System\NetworkThrottling.cs" />
|
||||||
|
<Compile Include="Features\System\SpeedUpShutdown.cs" />
|
||||||
|
<Compile Include="Features\System\SystemResponsiveness.cs" />
|
||||||
|
<Compile Include="Features\System\TaskbarEndTask.cs" />
|
||||||
|
<Compile Include="Features\System\VerboseStatus.cs" />
|
||||||
|
<Compile Include="Features\UI\BingSearch.cs" />
|
||||||
|
<Compile Include="Features\UI\FullContextMenus.cs" />
|
||||||
|
<Compile Include="Features\UI\WLockScreen.cs" />
|
||||||
|
<Compile Include="Features\UI\SearchBoxSuggestions.cs" />
|
||||||
|
<Compile Include="Features\UI\SearchboxTaskbarMode.cs" />
|
||||||
|
<Compile Include="Features\UI\ShowOrHideMostUsedApps.cs" />
|
||||||
|
<Compile Include="Features\UI\ShowTaskViewButton.cs" />
|
||||||
|
<Compile Include="Features\UI\SnapAssistFlyout.cs" />
|
||||||
|
<Compile Include="Features\UI\StartLayout.cs" />
|
||||||
|
<Compile Include="Features\UI\Transparency.cs" />
|
||||||
|
<Compile Include="Views\DefaultsControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\DefaultsControlView.Designer.cs">
|
||||||
|
<DependentUpon>DefaultsControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\ExperienceControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\ExperienceControlView.Designer.cs">
|
||||||
|
<DependentUpon>ExperienceControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Helper\Logger.cs" />
|
||||||
|
<Compile Include="Views\DeviceControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\DeviceControlView.Designer.cs">
|
||||||
|
<DependentUpon>DeviceControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="IView.cs" />
|
||||||
|
<Compile Include="MainForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="MainForm.Designer.cs">
|
||||||
|
<DependentUpon>MainForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Helper\Utils.cs" />
|
||||||
|
<Compile Include="ViewNavigator.cs" />
|
||||||
|
<Compile Include="Views\HomeControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\InstallerControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\InstallerControlView.Designer.cs">
|
||||||
|
<DependentUpon>InstallerControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\NetworkControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\NetworkControlView.Designer.cs">
|
||||||
|
<DependentUpon>NetworkControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\PersonalizationControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\PersonalizationControlView.Designer.cs">
|
||||||
|
<DependentUpon>PersonalizationControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="InstallView\InstallControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="InstallView\InstallControlView.Designer.cs">
|
||||||
|
<DependentUpon>InstallControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\UpdatesControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Views\UpdatesControlView.Designer.cs">
|
||||||
|
<DependentUpon>UpdatesControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UpgradeView\UpgradeControlView.cs">
|
||||||
|
<SubType>UserControl</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="UpgradeView\UpgradeControlView.Designer.cs">
|
||||||
|
<DependentUpon>UpgradeControlView.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<EmbeddedResource Include="AboutForm.resx">
|
||||||
|
<DependentUpon>AboutForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="LogForm.resx">
|
||||||
|
<DependentUpon>LogForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="ToolHubView\ToolHubControlView.resx">
|
||||||
|
<DependentUpon>ToolHubControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="ToolHubView\ToolItemControl.resx">
|
||||||
|
<DependentUpon>ToolItemControl.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Views\AccountControlView.resx">
|
||||||
|
<DependentUpon>AccountControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Views\AppsControlView.resx">
|
||||||
|
<DependentUpon>AppsControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Views\DefaultsControlView.resx">
|
||||||
|
<DependentUpon>DefaultsControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Views\ExperienceControlView.resx">
|
||||||
|
<DependentUpon>ExperienceControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Views\DeviceControlView.resx">
|
||||||
|
<DependentUpon>DeviceControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="MainForm.resx">
|
||||||
|
<DependentUpon>MainForm.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Views\InstallerControlView.resx">
|
||||||
|
<DependentUpon>InstallerControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Views\NetworkControlView.resx">
|
||||||
|
<DependentUpon>NetworkControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Views\PersonalizationControlView.resx">
|
||||||
|
<DependentUpon>PersonalizationControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="InstallView\InstallControlView.resx">
|
||||||
|
<DependentUpon>InstallControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Views\UpdatesControlView.resx">
|
||||||
|
<DependentUpon>UpdatesControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="UpgradeView\UpgradeControlView.resx">
|
||||||
|
<DependentUpon>UpgradeControlView.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<None Include="app.manifest" />
|
||||||
|
<None Include="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<COMReference Include="WUApiLib">
|
||||||
|
<Guid>{B596CC9F-56E5-419E-A622-E01BB457431E}</Guid>
|
||||||
|
<VersionMajor>2</VersionMajor>
|
||||||
|
<VersionMinor>0</VersionMinor>
|
||||||
|
<Lcid>0</Lcid>
|
||||||
|
<WrapperTool>tlbimp</WrapperTool>
|
||||||
|
<Isolated>False</Isolated>
|
||||||
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
|
</COMReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="assetCopilot.png" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="AppIcon.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
public static class CopilotHelper
|
||||||
|
{
|
||||||
|
// Path to the Copilot icon file
|
||||||
|
private static readonly string IconPath = Path.Combine("app", "copilot.png");
|
||||||
|
|
||||||
|
|
||||||
|
// The Shell URI to launch the Copilot app
|
||||||
|
private const string CopilotAppUri = "shell:AppsFolder\\Microsoft.Copilot_8wekyb3d8bbwe!App";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Loads and scales the Copilot icon if available.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="baseSize">Base size for the icon</param>
|
||||||
|
/// <returns>Scaled icon image or null if icon file missing</returns>
|
||||||
|
public static Image LoadScaledIcon(int baseSize)
|
||||||
|
{
|
||||||
|
if (!File.Exists(IconPath))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
using (var img = Image.FromFile(IconPath))
|
||||||
|
{
|
||||||
|
int scaledSize = GetScaledIconSize(baseSize);
|
||||||
|
return new Bitmap(img, new Size(scaledSize, scaledSize));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Calculates the scaled icon size based on current screen DPI.
|
||||||
|
/// </summary>
|
||||||
|
public static int GetScaledIconSize(int baseSize)
|
||||||
|
{
|
||||||
|
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
|
||||||
|
return (int)(baseSize * (g.DpiX / 96f));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Attempts to launch the Copilot app.
|
||||||
|
/// </summary>
|
||||||
|
public static void LaunchCopilot()
|
||||||
|
{
|
||||||
|
string appFolder = Path.Combine(
|
||||||
|
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||||
|
"Packages",
|
||||||
|
"Microsoft.Copilot_8wekyb3d8bbwe"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!Directory.Exists(appFolder))
|
||||||
|
{
|
||||||
|
MessageBox.Show(
|
||||||
|
"Copilot is currently unavailable. You're the captain now...",
|
||||||
|
"Copilot Launch Failed",
|
||||||
|
MessageBoxButtons.OK,
|
||||||
|
MessageBoxIcon.Warning
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Process.Start(new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = "explorer.exe",
|
||||||
|
Arguments = CopilotAppUri,
|
||||||
|
UseShellExecute = true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets up the Copilot button with the icon and tooltip.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="btn"></param>
|
||||||
|
/// <param name="iconBaseSize"></param>
|
||||||
|
public static void SetupCopilotButton(Button btn, int iconBaseSize)
|
||||||
|
{
|
||||||
|
if (File.Exists(IconPath))
|
||||||
|
{
|
||||||
|
btn.Visible = true;
|
||||||
|
btn.Image = LoadScaledIcon(iconBaseSize);
|
||||||
|
|
||||||
|
var tooltip = new ToolTip();
|
||||||
|
tooltip.SetToolTip(btn, "Ask Copilot");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
btn.Visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace Flyoobe
|
||||||
|
{
|
||||||
|
public enum LogLevel
|
||||||
|
{
|
||||||
|
Info,
|
||||||
|
Warning,
|
||||||
|
Error
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Logger
|
||||||
|
{
|
||||||
|
// Event raised when a warning or error is logged
|
||||||
|
public static event Action<string, LogLevel> OnNotificationLogged;
|
||||||
|
|
||||||
|
private static readonly List<string> _logBuffer = new List<string>();
|
||||||
|
private static readonly string _logFilePath;
|
||||||
|
|
||||||
|
// Static constructor initializes the log file path
|
||||||
|
static Logger()
|
||||||
|
{
|
||||||
|
string exeDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||||||
|
string appDirectory = Path.Combine(exeDirectory, "app");
|
||||||
|
_logFilePath = Path.Combine(appDirectory, "log.txt");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Logs a message with timestamp and log level.
|
||||||
|
/// Also appends the message to the log file.
|
||||||
|
/// </summary>
|
||||||
|
public static void Log(string message, LogLevel level = LogLevel.Info)
|
||||||
|
{
|
||||||
|
var timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
|
var levelStr = level.ToString().ToUpper();
|
||||||
|
var logLine = $"[{timestamp}] [{levelStr}] {message}";
|
||||||
|
|
||||||
|
_logBuffer.Add(logLine);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.AppendAllText(_logFilePath, logLine + Environment.NewLine);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Failed to write to log file: {ex.Message}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fire event if level is Warning or Error
|
||||||
|
if (level == LogLevel.Warning || level == LogLevel.Error)
|
||||||
|
{
|
||||||
|
OnNotificationLogged?.Invoke(message, level);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the full log history stored in memory.
|
||||||
|
/// </summary>
|
||||||
|
public static string GetLog()
|
||||||
|
{
|
||||||
|
return string.Join(Environment.NewLine, _logBuffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
using Microsoft.Win32;
|
||||||
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Security.Principal;
|
||||||
|
|
||||||
|
namespace Flyoobe
|
||||||
|
{
|
||||||
|
internal static class Utils
|
||||||
|
{
|
||||||
|
private const string GitHubUrl = "https://github.com/builtbybel/Flyoobe";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if a registry value equals a specified integer.
|
||||||
|
/// </summary>
|
||||||
|
public static bool IntEquals(string keyName, string valueName, int expectedValue)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
object value = Registry.GetValue(keyName, valueName, null);
|
||||||
|
return value is int intValue && intValue == expectedValue;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log($"Registry check failed for {keyName}\\{valueName}: {ex.Message}", LogLevel.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if a registry value equals a specified string.
|
||||||
|
/// </summary>
|
||||||
|
public static bool StringEquals(string keyName, string valueName, string expectedValue)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
object value = Registry.GetValue(keyName, valueName, null);
|
||||||
|
return value is string strValue && strValue == expectedValue;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log($"Registry check failed for {keyName}\\{valueName}: {ex.Message}", LogLevel.Error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Opens the GitHub project page in the default browser.
|
||||||
|
/// </summary>
|
||||||
|
public static void OpenGitHubPage(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Process.Start(new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = GitHubUrl,
|
||||||
|
UseShellExecute = true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Log($"Failed to open GitHub page: {ex.Message}", LogLevel.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if the application is running with administrative privileges.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool IsRunningAsAdmin()
|
||||||
|
{
|
||||||
|
using (var identity = WindowsIdentity.GetCurrent())
|
||||||
|
{
|
||||||
|
var principal = new WindowsPrincipal(identity);
|
||||||
|
return principal.IsInRole(WindowsBuiltInRole.Administrator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Detects if the current OS is Windows 11 or newer.
|
||||||
|
/// </summary>
|
||||||
|
public static bool DetectWindows11()
|
||||||
|
{
|
||||||
|
object buildObj = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "CurrentBuildNumber", null);
|
||||||
|
if (buildObj != null && int.TryParse(buildObj.ToString(), out int build))
|
||||||
|
{
|
||||||
|
return build >= 22000; // Windows 11 starts at build 22000
|
||||||
|
}
|
||||||
|
return false; // If unable to detect, assume not Windows 11
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loaded 100 of 150 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user