【问题标题】:How to send backspace using sendmessage(C#) to cmd.exe如何使用 sendmessage(C#) 将退格键发送到 cmd.exe
【发布时间】:2010-12-16 07:57:40
【问题描述】:

我正在尝试将击键发送到从我的应用程序启动的 cmd.exe。这样做,我可以发送所有键盘字符,但是如果我尝试发送 Backspace,它似乎没有生效。以下是sn-p向cmd.exe发送消息的代码:

SendMessage((int)shell.MainWindowHandle, WM_KEYDOWN, ((int)e.KeyCode), 0);
SendMessage((int)shell.MainWindowHandle, WM_KEYUP, ((int)e.KeyCode), 0);

知道为什么这不起作用吗?从 C# 应用程序发送到 cmd.exe 的标准输入的最佳方式是什么?

提前致谢

【问题讨论】:

    标签: c# stdin cmd sendmessage


    【解决方案1】:

    您必须 P/Invoke SendInput(),因为 Backspace 是由键盘驱动程序直接处理的。

    【讨论】:

      【解决方案2】:

      string msg = "Hello Cmd";

      int i=0; for (i=0; i < msg.Length ; i++)

      SendMessage(cmdHwnd, WM_CHAR, (int)msg[i], 0);

      上述方法可帮助您输入字符串中的任何字符,同时考虑 CAPS 和空格。

      唯一的问题是我面临的问题是,如果您之前发送消息并且它仍在处理中,那么具有相同字符两次的字符串(如“通道”)然后输入的字符串是 chanel 而不是通道。 我目前正在寻找解决此问题的方法。

      Murali 可以和我分享一下 KEYDOWN 和 KEYUP 的代码吗?

      BR,

      拉胡尔

      【讨论】:

        【解决方案3】:

        使用ASCII码: 退格 --> OCT 0x10, char 'BS'

        【讨论】:

        • sendinput 的问题在于它要求控制台应用程序处于前台。但我实际上是把它隐藏起来并捕获它的输入和输出。 :( e.KeyCode 也是 0x8 与 BS 的 ascii 代码匹配
        猜你喜欢
        • 2021-05-05
        • 2012-08-01
        • 2011-08-04
        • 2019-09-22
        • 1970-01-01
        • 2011-07-21
        • 2013-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多