我有一个代码,它接收一个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);
}
}
}
答案 0 :(得分:2)
[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。