[英]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
這可能不是您想要/需要的,但如果您只想重新映射一些鍵盤鍵,我建議您考慮使用其他鍵盤布局或創建自定義布局。 您可以使用以下方法創建新布局:
我認為SendKeys.Send("{BS}");
方法永遠不會起作用(以任何順序)。 這是因為發布SendKeys.Send
后處理原始的按鍵/鍵釋放事件。 我認為在目標窗口過程(例如記事本)處理之前,您應該以某種方式取消要刪除的字符的按鍵/鍵入事件。
您是否嘗試過切換。 .Send({BS})
. .Send("s")
? 否則,你能澄清一下嗎?
我通過注冊全局熱鍵解決了這個問題。 謝謝。 這是我用來解決問題的資源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.