본문 바로가기
프로그래밍/c#

[c#, Xamarin] Control(On/Off) Numlock Key in programmatically

by 그래도동 2022. 8. 12.
728x90
반응형
 public static class ControlNumlock
{
    [StructLayout(LayoutKind.Sequential)]
    public struct INPUT
    {
        internal int type;
        internal short wVk;
        internal short wScan;
        internal int dwFlags;
        internal int time;
        internal IntPtr dwExtraInfo;
        int dummy1;
        int dummy2;
        internal int type1;
        internal short wVk1;
        internal short wScan1;
        internal int dwFlags1;
        internal int time1;
        internal IntPtr dwExtraInfo1;
        int dummy3;
        int dummy4;
    }
    [DllImport("user32.dll")]
    static extern int SendInput(uint nInputs, IntPtr pInputs, int cbSize);

    /// <summary>
    /// Press NumLock in Programmatically
    /// </summary>
    public static void PressNumlock()
    {
        const int mouseInpSize = 28;//Hardcoded size of the MOUSEINPUT tag !!!
        INPUT input = new INPUT();
        input.type = 0x01; //INPUT_KEYBOARD
        input.wVk = 0x90; //VK_NUMLOCK
        input.wScan = 0;
        input.dwFlags = 0; //key-down
        input.time = 0;
        input.dwExtraInfo = IntPtr.Zero;

        input.type1 = 0x01;
        input.wVk1 = 0x90;
        input.wScan1 = 0;
        input.dwFlags1 = 2; //key-up
        input.time1 = 0;
        input.dwExtraInfo1 = IntPtr.Zero;

        IntPtr pI = Marshal.AllocHGlobal(mouseInpSize * 2);
        Marshal.StructureToPtr(input, pI, false);
        int result = SendInput(2, pI, mouseInpSize); //Hardcoded size of the MOUSEINPUT tag !!!

        //if (result == 0 || Marshal.GetLastWin32Error() != 0)
        // Console.WriteLine(Marshal.GetLastWin32Error());
        Marshal.FreeHGlobal(pI);
    }
}
728x90
반응형

'프로그래밍 > c#' 카테고리의 다른 글

[Winform, c#] 리소스에 있는 이미지 로드  (0) 2022.01.27
[c#] CreateParams 사용  (0) 2021.01.28
[c#] Region, 소스정리  (0) 2021.01.28
[c#] string.Format 서식  (0) 2021.01.26
[Tip] Visual Studio 단축키  (0) 2021.01.19

댓글