2009-08-28 3 views

답변

4

확인 How to programmatically turn on the Numlock Key

using System; 
using System.Runtime.InteropServices; 

class SetNumlockKeyOn 
{ 
    [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); 

public static void SetNumlockOn() 
{ 
    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); 
} 
+0

링크가 작동하지 않습니다. –

+0

찾은 콘텐츠 ... 복사하는 데 도움이 되길 바랍니다.) –

2

당신은/P를 통해이 작업을 수행 GetKeyboardState 및 keybd_event로 호출 할 수 있습니다.

keybd_event의 MSDN 페이지는 정확히 어떻게 num-lock을 토글하고 상태를 얻는 지 보여줍니다 (C++).

keybd_eventGetKeyboardState에 대해 pinvoke.net에서 사용할 수있는 P/Invoke 서명이 있습니다.

관련 문제