如何在C#中编写外部键盘的驱动程序

时间:2016-05-10 08:41:26

标签: c# windows

我有一个代码,它接收一个USART字节,表示我在键盘上点击的按钮,并在控制台窗口中显示它。 我想知道如何使按下的按钮导致实际的按钮按下,以便它可以在其他应用程序中使用,并可能在后台运行。在Windows上运行。

using System;
using System.IO.Ports;

namespace ConsoleApplication1
{


class Program
{
    public static void Main()
    {
        SerialPort mySerialPort = new SerialPort("COM4");

        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
        mySerialPort.RtsEnable = true;

        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

        mySerialPort.Open();

        Console.WriteLine("Press any key to continue...");
        Console.WriteLine();
        Console.ReadKey();
        mySerialPort.Close();
    }

    private static void DataReceivedHandler(
                        object sender,
                        SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        Console.Write(indata);
    }
}
}

1 个答案:

答案 0 :(得分:2)

您需要keybd_event function

[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

public const int KEYEVENTF_KEYUP = 2; // Flag that we simulate a key being released

public static void simulateKeyPress(byte bVk) {
    // Simulate keydown
    keybd_event(bVk, 0, 0, 0);
    // Simulate keyup
    keybd_event(bVk, 0, KEYEVENTF_KEYUP, 0);
}

您可以使用此功能来模拟和按下或释放按键。

可以找到可用密钥代码列表here

我写的simulateKeyPress辅助函数将模拟keydown和keyup。例如,我们可以像这样模拟按下的回车键:

simulateKeyPress(0x0D); // 0x0D is constant VK_RETURN from the list

...但您可能也需要不同的组合,例如,如果您想发送Ctrl + C,则需要发送Ctrl-down,C-down,C-up,Ctrl-up。