2016-05-10 28 views
0

我有一個接收USART字節的代碼,代表在我製作的鍵盤上單擊的按鈕並將其顯示在控制檯窗口中。 我想知道如何使按下的按鈕導致實際按鈕按下,以便它可以在其他應用程序中使用,並可能在後臺運行。在Windows上運行。如何在C編寫外部鍵盤的驅動程序#

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

[SendInput()](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v = vs.85).aspx) –

回答

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 - 向下,C向下,C向上,Ctrl向上。

相關問題