C#SendKeys.Send

时间:2009-06-18 13:28:55

标签: c# sendkeys

我正在使用C#SendKeys.Send方法运行一个问题。我试图用其他键替换键盘键,例如当我在键盘上按“a”时,我希望该键为“s”,例如,当我在我的代码中执行此操作时:

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

}

现在我的记事本中只打印了“sa”字符,但是在这种情况下我不需要打印“sa”而只需要“s”字符,因为当我按下键盘上的“a”时,“a”必须用“s”代替。

我尝试通过添加以下行删除最后一个字符:

SendKeys.Send("{BS}");

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

如何防止这种情况发生?

9 个答案:

答案 0 :(得分:2)

我会改变我的电话:

SendKeys.Send("{BS}");

SendKeys.Send("S");

编辑(问题更新后):

如果您正在处理字符串(对于您的特殊字符),您是否可以捕获按键生成的字符串(“a”)并通过将字符串设置为字符的unicode值来修改它'试图代表?如果人们提到的其他解决方案不起作用,那就是我接下来要尝试的地方......

答案 1 :(得分:2)

我可能会做出错误的假设,但如果你在文本框中使用它,你可以:

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
}

答案 2 :(得分:2)

另一个选择是使用低级键盘钩子来捕获旧角色,然后发送新角色。它需要一些P / Invoke,但它使您能够完全捕获原始密钥,以便应用程序甚至看不到它。

答案 3 :(得分:1)

  

我打印“a”因为退格是   在“s”之后立即发送它   删除“s”字符。我怎么能够   防止这种情况发生?

呃.....

发送s后不立即发送退格?

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

答案 4 :(得分:1)

SendKeys.SendWait

答案 5 :(得分:1)

这可能不是您想要/需要的,但如果您只想重新映射一些键盘键,我建议您使用其他键盘布局或创建自定义布局。您可以使用以下方法创建新布局:

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

答案 6 :(得分:1)

我认为SendKeys.Send("{BS}");方法永远不会有效(按任意顺序)。这是因为在SendKeys.Send发布后处理原始的按键/键释放事件。我认为在目标窗口过程(例如记事本)处理之前,您应该以某种方式取消要删除的字符的按键/键入事件。

答案 7 :(得分:0)

您是否尝试使用.Send({BS})切换.Send("s")?否则,你能澄清一下吗?

答案 8 :(得分:0)

我通过注册全局热键解决了这个问题。谢谢。 This是我用来解决问题的资源。