mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 02:36:19 +02:00
[New utility]Sysinternals ZoomIt (#35880)
* ZoomIt initial code dump * Change vcxproj to normalize dependency versions * Fix code quality to build * Add to PowerToys solution * Clean out C-style casts * Fix some more analyzer errors * Constexpr a function * Disable some warnings locally that it seemed better not to touch * Add ZoomIt module interface * Add GPO * Add Settings page with Enable button * Output as PowerToys.ZoomIt.exe * Extract ZoomIt Settings definition to its own header * Make ZoomItModuleInterface build with ZoomItSettings too * WinRT C++ interop for ZoomItSettings * From Registry To PowerToys Json * Properly fix const_cast analyzer error * Initial Settings page loading from registry * Zoom mode settings * Save settings * Add file picker and DemoType file support * Remaining DemoType settings * Have ZoomIt properly reloading Settings and exiting * Remove context menu entries for Options and Exit * ZoomIt simple Break Options * Break advanced options * Simple Record settings * Record Microphone setting * Fix break background file picker title * Font setting * Fix build issues after merge * Add ZoomIt conflict warning to Settings * Exclude Eula from spell checking * Fix spellcheck errors * Fix spell check for accelerated menu items * Remove cursor files from spellcheck. They're binary * Fix forbidden patterns * Fix XAML style * Fix C# analyzers * Fix signing * Also sign module interface dll * Use actual ZoomIt icon * Add OOBE page for ZoomIt * ZoomIt image for Settings * Flyout and Dashboard entries * Fix type speed slider labels * Correctly load default Font * Correctly register shortcuts on ZoomIt startup first run * Fix modifier keys not changing until restart * Show MsgBox on taken shortcut * Start PowerToys Settings * Normalize ZoomIt file properties with rest of PowerToys * Add attribution * Add ZoomIt team to Community.md * More copyright adjustments * Fix spellcheck * Fix MsgBox simultaneous instance to the front * Add mention of capturevideosample code use * Add ZoomIt to process lists * Add telemetry * Add logging * React to gpo * Normalize code to space identation * Fix installer build * Localize percent setting * Fix XAML styling * Update src/settings-ui/Settings.UI/Strings/en-us/Resources.resw Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com> * Fix spellcheck * One more spellcheck fix * Integrate LiveDraw feature changes from upstream * Fix name reuse in same scope * Fix c-style casts * Also register LIVEDRAW_HOTKEY * Fix newLiveZoomToggleKey * Update LiveZoom description in Settings to take LiveDraw into account * Fix spellcheck * Fix more spellcheck * Fix Sysinternals capitalization * Fix ARM64 Debug build * Support Sysinternals build (#36873) * Remove unneeded files * Make build compatible with Sysinternals * Separate PowerToys ZoomIt product name (#36887) * Separate PowerToys ZoomIt product name To help maintain the Sysinternals branding in the standalone version. * Clarify branding-related includes * Remove ZoomIt.sln * Add foxmsft to spell-check names * Add ZoomIt to README * Add ZoomIt to GH templates * Add ZoomIt events to DATA_AND_PRIVACY.md * Remove publish_config.json * Remove publish_config.json from vcxproj too --------- Co-authored-by: Mark Russinovich <markruss@microsoft.com> Co-authored-by: Alex Mihaiuc <69110671+foxmsft@users.noreply.github.com> Co-authored-by: John Stephens <johnstep@microsoft.com> Co-authored-by: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com>
This commit is contained in:
70
src/settings-ui/Settings.UI/Helpers/CHOOSEFONT.cs
Normal file
70
src/settings-ui/Settings.UI/Helpers/CHOOSEFONT.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Microsoft.PowerToys.Settings.UI.Helpers
|
||||
{
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:Accessible fields should begin with upper-case letter", Justification = "Keep original names from original structure")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1306:Field names should begin with lower-case letter", Justification = "Keep original names from original structure")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1401:Fields should be private", Justification = "Structure used for win32 interop. We need to access the fields")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1805:Do not initialize unnecessarily", Justification = "Let's have initializations be explicit for these win32 interop types")]
|
||||
|
||||
// Class to select the Dialog options to call ChooseFont.
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
||||
public class CHOOSEFONT
|
||||
{
|
||||
public int lStructSize = Marshal.SizeOf(typeof(CHOOSEFONT));
|
||||
public IntPtr hwndOwner = IntPtr.Zero;
|
||||
public IntPtr hDC = IntPtr.Zero;
|
||||
public IntPtr lpLogFont = IntPtr.Zero;
|
||||
public int iPointSize = 0;
|
||||
public int Flags = 0;
|
||||
public int rgbColors = 0;
|
||||
public IntPtr lCustData = IntPtr.Zero;
|
||||
public IntPtr lpfnHook = IntPtr.Zero;
|
||||
public string lpTemplateName = null;
|
||||
public IntPtr hInstance = IntPtr.Zero;
|
||||
public string lpszStyle = null;
|
||||
public short nFontType;
|
||||
private short __MISSING_ALIGNMENT__;
|
||||
public int nSizeMin;
|
||||
public int nSizeMax;
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum CHOOSE_FONT_FLAGS
|
||||
{
|
||||
CF_SCREENFONTS = 0x00000001,
|
||||
CF_PRINTER_FONTS = 0x00000002,
|
||||
CF_BOTH = CF_SCREENFONTS | CF_PRINTER_FONTS,
|
||||
CF_SHOW_HELP = 0x00000004,
|
||||
CF_ENABLE_HOOK = 0x00000008,
|
||||
CF_ENABLETEMPLATE = 0x00000010,
|
||||
CF_ENABLETEMPLATE_HANDLE = 0x00000020,
|
||||
CF_INITTOLOGFONTSTRUCT = 0x00000040,
|
||||
CF_USE_STYLE = 0x00000080,
|
||||
CF_EFFECTS = 0x00000100,
|
||||
CF_APPLY = 0x00000200,
|
||||
CF_ANSI_ONLY = 0x00000400,
|
||||
CF_SCRIPTS_ONLY = CF_ANSI_ONLY,
|
||||
CF_NO_VECTOR_FONTS = 0x00000800,
|
||||
CF_NO_OEM_FONTS = CF_NO_VECTOR_FONTS,
|
||||
CF_NO_SIMULATIONS = 0x00001000,
|
||||
CF_LIMITSIZE = 0x00002000,
|
||||
CF_FIXED_PITCH_ONLY = 0x00004000,
|
||||
CF_WYSIWYG = 0x00008000,
|
||||
CF_FORCE_FONT_EXIST = 0x00010000,
|
||||
CF_SCALABLE_ONLY = 0x00020000,
|
||||
CF_TT_ONLY = 0x00040000,
|
||||
CF_NO_FACE_SEL = 0x00080000,
|
||||
CF_NO_STYLE_SEL = 0x00100000,
|
||||
CF_NO_SIZE_SEL = 0x00200000,
|
||||
CF_SELECT_SCRIPT = 0x00400000,
|
||||
CF_NO_SCRIPT_SEL = 0x00800000,
|
||||
CF_NO_VERT_FONTS = 0x01000000,
|
||||
CF_INACTIVE_FONTS = 0x02000000,
|
||||
}
|
||||
}
|
||||
125
src/settings-ui/Settings.UI/Helpers/LOGFONT.cs
Normal file
125
src/settings-ui/Settings.UI/Helpers/LOGFONT.cs
Normal file
@@ -0,0 +1,125 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Microsoft.PowerToys.Settings.UI.Helpers
|
||||
{
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:Accessible fields should begin with upper-case letter", Justification = "Keep original names from original structure")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1401:Fields should be private", Justification = "Structure used for win32 interop. We need to access the fields")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1805:Do not initialize unnecessarily", Justification = "Let's have initializations be explicit for these win32 interop types")]
|
||||
|
||||
// Result from calling ChooseFont.
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
|
||||
public class LOGFONT
|
||||
{
|
||||
public int lfHeight = 0;
|
||||
public int lfWidth = 0;
|
||||
public int lfEscapement = 0;
|
||||
public int lfOrientation = 0;
|
||||
public int lfWeight = 0;
|
||||
public byte lfItalic = 0;
|
||||
public byte lfUnderline = 0;
|
||||
public byte lfStrikeOut = 0;
|
||||
public byte lfCharSet = 0;
|
||||
public byte lfOutPrecision = 0;
|
||||
public byte lfClipPrecision = 0;
|
||||
public byte lfQuality = 0;
|
||||
public byte lfPitchAndFamily = 0;
|
||||
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
||||
public string lfFaceName = string.Empty;
|
||||
}
|
||||
|
||||
public enum FontWeight : int
|
||||
{
|
||||
FW_DONT_CARE = 0,
|
||||
FW_THIN = 100,
|
||||
FW_EXTRALIGHT = 200,
|
||||
FW_LIGHT = 300,
|
||||
FW_NORMAL = 400,
|
||||
FW_MEDIUM = 500,
|
||||
FW_SEMIBOLD = 600,
|
||||
FW_BOLD = 700,
|
||||
FW_EXTRABOLD = 800,
|
||||
FW_HEAVY = 900,
|
||||
}
|
||||
|
||||
public enum FontCharSet : byte
|
||||
{
|
||||
ANSI_CHARSET = 0,
|
||||
DEFAULT_CHARSET = 1,
|
||||
SYMBOL_CHARSET = 2,
|
||||
SHIFT_JIS_CHARSET = 128,
|
||||
HANGEUL_CHARSET = 129,
|
||||
HANGUL_CHARSET = HANGEUL_CHARSET,
|
||||
GB2312_CHARSET = 134,
|
||||
CHINESE_BIG5_CHARSET = 136,
|
||||
OEM_CHARSET = 255,
|
||||
JOHAB_CHARSET = 130,
|
||||
HEBREW_CHARSET = 177,
|
||||
ARABIC_CHARSET = 178,
|
||||
GREEK_CHARSET = 161,
|
||||
TURKISH_CHARSET = 162,
|
||||
VIETNAMESE_CHARSET = 163,
|
||||
THAI_CHARSET = 222,
|
||||
EAST_EUROPE_CHARSET = 238,
|
||||
RUSSIAN_CHARSET = 204,
|
||||
MAC_CHARSET = 77,
|
||||
BALTIC_CHARSET = 186,
|
||||
}
|
||||
|
||||
public enum FontPrecision : byte
|
||||
{
|
||||
OUT_DEFAULT_PRECIS = 0,
|
||||
OUT_STRING_PRECIS = 1,
|
||||
OUT_CHARACTER_PRECIS = 2,
|
||||
OUT_STROKE_PRECIS = 3,
|
||||
OUT_TT_PRECIS = 4,
|
||||
OUT_DEVICE_PRECIS = 5,
|
||||
OUT_RASTER_PRECIS = 6,
|
||||
OUT_TT_ONLY_PRECIS = 7,
|
||||
OUT_OUTLINE_PRECIS = 8,
|
||||
OUT_SCREEN_OUTLINE_PRECIS = 9,
|
||||
OUT_PS_ONLY_PRECIS = 10,
|
||||
}
|
||||
|
||||
public enum FontClipPrecision : byte
|
||||
{
|
||||
CLIP_DEFAULT_PRECIS = 0,
|
||||
CLIP_CHARACTER_PRECIS = 1,
|
||||
CLIP_STROKE_PRECIS = 2,
|
||||
CLIP_MASK = 0xf,
|
||||
CLIP_LH_ANGLES = 1 << 4,
|
||||
CLIP_TT_ALWAYS = 2 << 4,
|
||||
CLIP_DFA_DISABLE = 4 << 4,
|
||||
CLIP_EMBEDDED = 8 << 4,
|
||||
}
|
||||
|
||||
public enum FontQuality : byte
|
||||
{
|
||||
DEFAULT_QUALITY = 0,
|
||||
DRAFT_QUALITY = 1,
|
||||
PROOF_QUALITY = 2,
|
||||
NONANTIALIASED_QUALITY = 3,
|
||||
ANTIALIASED_QUALITY = 4,
|
||||
CLEAR_TYPE_QUALITY = 5,
|
||||
CLEAR_TYPE_NATURAL_QUALITY = 6,
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum FontPitchAndFamily : byte
|
||||
{
|
||||
DEFAULT_PITCH = 0,
|
||||
FIXED_PITCH = 1,
|
||||
VARIABLE_PITCH = 2,
|
||||
FF_DONT_CARE = DEFAULT_PITCH,
|
||||
FF_ROMAN = 1 << 4,
|
||||
FF_SWISS = 2 << 4,
|
||||
FF_MODERN = 3 << 4,
|
||||
FF_SCRIPT = 4 << 4,
|
||||
FF_DECORATIVE = 5 << 4,
|
||||
}
|
||||
}
|
||||
@@ -72,6 +72,7 @@ namespace Microsoft.PowerToys.Settings.UI.Helpers
|
||||
case ModuleType.MeasureTool: return generalSettingsConfig.Enabled.MeasureTool;
|
||||
case ModuleType.ShortcutGuide: return generalSettingsConfig.Enabled.ShortcutGuide;
|
||||
case ModuleType.PowerOCR: return generalSettingsConfig.Enabled.PowerOcr;
|
||||
case ModuleType.ZoomIt: return generalSettingsConfig.Enabled.ZoomIt;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
@@ -106,6 +107,7 @@ namespace Microsoft.PowerToys.Settings.UI.Helpers
|
||||
case ModuleType.MeasureTool: generalSettingsConfig.Enabled.MeasureTool = isEnabled; break;
|
||||
case ModuleType.ShortcutGuide: generalSettingsConfig.Enabled.ShortcutGuide = isEnabled; break;
|
||||
case ModuleType.PowerOCR: generalSettingsConfig.Enabled.PowerOcr = isEnabled; break;
|
||||
case ModuleType.ZoomIt: generalSettingsConfig.Enabled.ZoomIt = isEnabled; break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,6 +141,7 @@ namespace Microsoft.PowerToys.Settings.UI.Helpers
|
||||
case ModuleType.MeasureTool: return GPOWrapper.GetConfiguredScreenRulerEnabledValue();
|
||||
case ModuleType.ShortcutGuide: return GPOWrapper.GetConfiguredShortcutGuideEnabledValue();
|
||||
case ModuleType.PowerOCR: return GPOWrapper.GetConfiguredTextExtractorEnabledValue();
|
||||
case ModuleType.ZoomIt: return GPOWrapper.GetConfiguredZoomItEnabledValue();
|
||||
default: return GpoRuleConfigured.Unavailable;
|
||||
}
|
||||
}
|
||||
@@ -173,6 +176,7 @@ namespace Microsoft.PowerToys.Settings.UI.Helpers
|
||||
ModuleType.MeasureTool => typeof(MeasureToolPage),
|
||||
ModuleType.ShortcutGuide => typeof(ShortcutGuidePage),
|
||||
ModuleType.PowerOCR => typeof(PowerOcrPage),
|
||||
ModuleType.ZoomIt => typeof(ZoomItPage),
|
||||
_ => typeof(DashboardPage), // never called, all values listed above
|
||||
};
|
||||
}
|
||||
|
||||
@@ -48,6 +48,12 @@ namespace Microsoft.PowerToys.Settings.UI.Helpers
|
||||
[DllImport("Comdlg32.dll", CharSet = CharSet.Unicode)]
|
||||
internal static extern bool GetOpenFileName([In, Out] OpenFileName openFileName);
|
||||
|
||||
[DllImport("comdlg32.dll", CharSet = CharSet.Auto, EntryPoint = "ChooseFont", SetLastError = true)]
|
||||
internal static extern bool ChooseFont(IntPtr lpChooseFont);
|
||||
|
||||
[DllImport("comdlg32.dll", SetLastError = true)]
|
||||
internal static extern int CommDlgExtendedError();
|
||||
|
||||
#pragma warning disable CA1401 // P/Invokes should not be visible
|
||||
[DllImport("user32.dll")]
|
||||
public static extern bool ShowWindow(System.IntPtr hWnd, int nCmdShow);
|
||||
|
||||
Reference in New Issue
Block a user