簡體   English   中英

C#SendKeys.Send

[英]C# SendKeys.Send

我正在使用C#SendKeys.Send方法運行一個問題。 我試圖用其他鍵替換鍵盤鍵,例如當我在鍵盤上按“a”時,我希望該鍵為“s”,例如,當我在我的代碼中執行此操作時:

if ((Keys)keyCode== Keys.A)
{                    
    SendKeys.Send("s");                    

}

現在我只在記事本中打印出“sa”字符,但在這種情況下我不需要打印“sa”而只需要“s”字符,因為當我按下鍵盤上的“a”時,必須更換“a”與“s”。

我嘗試通過添加以下行刪除最后一個字符:

SendKeys.Send("{BS}");

但我所得到的只是“s”字符被刪除,而“a”字符就在那里。

我怎樣才能防止這種情況發生?

我會改變我的電話:

SendKeys.Send("{BS}");

SendKeys.Send("S");

編輯(問題更新后):

如果您正在處理字符串(對於您的特殊字符),您是否可以捕獲按鍵(“a”)生成的字符串並通過將字符串設置為您正在嘗試的字符的unicode值來修改它代表什么? 如果人們提到的其他解決方案不起作用,那就是我接下來要嘗試的地方......

我可能會做出錯誤的假設,但如果您使用文本框,則可以:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 'a')
    {
        e.Handled = true;
    }
}

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.A)
    {
        e.Handled = true;
        SendKeys.Send("s");
    }
}

甚至更簡單:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 'a')
    {
        e.Handled = true;
        SendKeys.Send("s");
    }
}

或者,如果這不僅僅用於文本框,那么你不能只是反轉你的退格和密鑰發送嗎?

if ((Keys)keyCode== Keys.A)
{                    
    SendKeys.Send("{BS}"); // remove A
    SendKeys.Send("s");    // add S
}

另一個選擇是使用低級鍵盤鈎子來捕獲舊角色,然后發送新角色。 它需要一些P / Invoke,但它使您能夠完全捕獲原始密鑰,以便應用程序甚至看不到它。

我打印“a”因為在“s”之后立即發送退格並刪除“s”字符。 我怎樣才能防止這種情況發生?

嗯.....

發送s后不要立即發送退格?

if ((Keys)keyCode== Keys.A)
            {
                Sendkeys.Send("{BS}"); // Deletes the "A" (already sent)
                SendKeys.Send("s"); // Sends the "S"
            }

SendKeys.SendWait

這可能不是您想要/需要的,但如果您只想重新映射一些鍵盤鍵,我建議您考慮使用其他鍵盤布局或創建自定義布局。 您可以使用以下方法創建新布局:

http://msdn.microsoft.com/en-ca/goglobal/bb964665.aspx

我認為SendKeys.Send("{BS}"); 方法永遠不會起作用(以任何順序)。 這是因為發布SendKeys.Send后處理原始的按鍵/鍵釋放事件。 我認為在目標窗口過程(例如記事本)處理之前,您應該以某種方式取消要刪除的字符的按鍵/鍵入事件。

您是否嘗試過切換。 .Send({BS}) . .Send("s") 否則,你能澄清一下嗎?

我通過注冊全局熱鍵解決了這個問題。 謝謝。 是我用來解決問題的資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM