2009-08-28 3 views

Répondre

4

Vérifier 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

votre lien est mort. –

+0

Contenu trouvé, copié ... j'espère que ça aide;) –

2

Vous pouvez le faire via P/Invoke avec GetKeyboardState et keybd_event.

La page MSDN pour keybd_event montre exactement comment basculer num-lock, ainsi que son état (en C++).

Il existe des tableaux P/Invoke disponibles sur pinvoke.net pour le keybd_event et le GetKeyboardState.

Questions connexes