Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我有一个c代码来打开/关闭键盘led。我想知道代码的工作原理_C# - Fatal编程技术网

C# 我有一个c代码来打开/关闭键盘led。我想知道代码的工作原理

C# 我有一个c代码来打开/关闭键盘led。我想知道代码的工作原理,c#,C#,这是我想熟悉的代码: public partial class Form1 : Form { [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo); const int KEYEVENTF_EXTENDEDKEY = 0x1; const int KEYEVENTF_KEYUP =

这是我想熟悉的代码:

public partial class Form1 : Form
{

    [DllImport("user32.dll")]
    static extern void keybd_event(byte bVk, byte bScan, uint dwFlags,
    UIntPtr dwExtraInfo);
    const int KEYEVENTF_EXTENDEDKEY = 0x1;
    const int KEYEVENTF_KEYUP = 0x2;
    const int CAPSLOCK = 0x14;
    const int NUMLOCK = 0x90;
    const int SCROLLLOCK = 0x91; 
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        keybd_event(CAPSLOCK, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0);
        keybd_event(CAPSLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0);
    }
}
从msdn网站:

keybd_事件函数合成击键。系统可以使用这样的 生成WM_KEYUP或WM_KEYDOWN消息的合成击键。 键盘驱动程序的中断处理程序调用keybd_事件 功能

  • bVk-虚拟密钥代码。代码的值必须介于1到1之间 254
  • bScan-密钥的硬件扫描代码
  • dwFlags-控制函数操作的各个方面
  • 关于此函数,您需要了解的所有信息如下:

    您可能会看到您的
    KEYEVENTF\u EXTENDEDKEY
    KEYEVENTF\u KEYUP
    是标志。通过使用
    flag1 | flag2 | flag3
    可以传递多个标志

    也许最重要的部分是:

    注意:此功能已被取代。改用SendInput


    这段代码没有什么需要理解的。它只是调用来模拟capslock键事件……不清楚您的意思。理解代码的问题到底在哪里?难道你不知道常数是什么吗?你不知道外部的吗。。。我不知道这个函数是如何工作的。我指的是值0x1、0x2等。UIntPtr的目的是什么以及| gate是如何工作的。