虚拟机,远程桌面,SendKeys C#

时间:2015-01-30 19:49:26

标签: c# keyboard virtual-machine sendkeys

我正在尝试使用通过RDP访问的VM执行以下操作:

  1. 启动命令提示符 thread.sleep足够长的时间来断开RDP会话(10秒,如果它更长的话就可以了)

  2. Sendkeys命令提示符以启动以交互模式工作的exe。一个完美的例子是FTP。如果启动不带参数的FTP,则会收到交互式提示。它是一个关于安全性的长篇故事,但是命令行参数不起作用,它需要是交互式的。这个过程在连接到RDP时不会运行

  3. 除了一个主要问题外,我的一切都在工作。一旦我从RDP断开连接,就没有键盘可供sendkeys使用。我不记得确切的错误,但它基本上是'没有键盘连接'

    我有一个想法,也许我可以创建一个在RDP会话结束时仍然可以“连接”的虚拟键盘。

    我已经验证了断开RDP后进程,甚至来自命令提示符的DOS将继续运行。未连接时,问题与发送密钥和VM的键盘隔离。

    我已经搜索过高低,但这个让我难过。我知道这是一种解决方法,而不是在源头解决问题,但我只有这个选项。

    我能想到的唯一另一种选择是,如果像SendKeys一样工作,但没有键盘连接吗?

    编辑 只是为了更清楚一点。我找到了许多可行的解决方案,但我只留下这个想法。

    规则是:

    1. 虚拟机上无法安装任何内容,例如“测试自动化”工具

    2. 所有内容都必须使用VS2012 C#.net从头开始内置到4.5。

    3. 也许我可以找到一个开源测试自动化工具,但是没有时间研究和转换看似可能很复杂的应用程序。

      非常感谢任何想法。

1 个答案:

答案 0 :(得分:0)

当您正确创建Process对象集 StartInfo 时:

var proc = new Process {
    StartInfo = new ProcessStartInfo {
        FileName = "program.exe",
        Arguments = "command line arguments to your executable",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    }
};

然后开始这个过程并从中读取:

proc.Start();
while (!proc.StandardOutput.EndOfStream) {
    string line = proc.StandardOutput.ReadLine();
    // do something with line
}

取自here

要发送一些东西,您只需使用:

proc.StandardInput.WriteLine("Something");

您只需在while循环中检查某些触发器,然后将一些数据写入流中。