// 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; internal static class NativeKeyboardHelper { [StructLayout(LayoutKind.Sequential)] [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:Accessible fields should begin with upper-case letter", Justification = "Matching Native Structure")] internal struct INPUT { internal INPUTTYPE type; internal InputUnion data; internal static int Size { get { return Marshal.SizeOf(); } } } [StructLayout(LayoutKind.Explicit)] [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:Accessible fields should begin with upper-case letter", Justification = "Matching Native Structure")] internal struct InputUnion { [FieldOffset(0)] internal MOUSEINPUT mi; [FieldOffset(0)] internal KEYBDINPUT ki; [FieldOffset(0)] internal HARDWAREINPUT hi; } [StructLayout(LayoutKind.Sequential)] [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:Accessible fields should begin with upper-case letter", Justification = "Matching Native Structure")] internal struct MOUSEINPUT { internal int dx; internal int dy; internal int mouseData; internal uint dwFlags; internal uint time; internal UIntPtr dwExtraInfo; } [StructLayout(LayoutKind.Sequential)] [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:Accessible fields should begin with upper-case letter", Justification = "Matching Native Structure")] internal struct KEYBDINPUT { internal short wVk; internal short wScan; internal uint dwFlags; internal int time; internal UIntPtr dwExtraInfo; } [StructLayout(LayoutKind.Sequential)] [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.NamingRules", "SA1307:Accessible fields should begin with upper-case letter", Justification = "Matching Native Structure")] internal struct HARDWAREINPUT { internal int uMsg; internal short wParamL; internal short wParamH; } internal enum INPUTTYPE : uint { INPUT_MOUSE = 0, INPUT_KEYBOARD = 1, INPUT_HARDWARE = 2, } [Flags] internal enum KeyEventF { KeyDown = 0x0000, ExtendedKey = 0x0001, KeyUp = 0x0002, Unicode = 0x0004, Scancode = 0x0008, } }