【问题标题】:How to remote control a cmd.exe process in C#如何在 C# 中远程控制 cmd.exe 进程
【发布时间】:2011-08-17 11:02:45
【问题描述】:

我真的被一个问题困住了(现在已经 7 天了),在我发疯之前,我想我会征求意见。

我想做的基本上是启动和远程控制一个cmd.exe进程。然而,StandardInput 和 StandardOutput 流并不能完成这项工作,因为它们不是由等待用户输入的“mysql”等命令触发的。

所以我想要的只是读取 cmd.exe 控制台的内容并写入它。但是 write 方法应该能够触发新命令。

我尝试了很多,我很确定 kernel32.dll 可以解决问题:

  • ReadConsoleOutput()
  • WriteConsoleInput()
  • GetConsoleScreenBufferInfo()
  • SetConsoleCursorPosition()

当然,我已经有了一些工作,但我绝对不确定我是否走对了路。因此我不会发布任何代码,因为它可能会让你感到困惑。

如果有人可以向我指出一个工作演示或教程或类似的东西,那就太棒了。即使它是 C++ 或 C - 总比没有好。

提前致谢。

梅维斯·科赫海姆

PS:请不要只发布 pinvoke 或 MSDN 的链接,我需要的内容稍微复杂一些。而且似乎我没有足够的 winapi 经验来独自到达那里:/

编辑:我必须尝试根据你们发布的链接获得的一些新想法。我会回来并发布我的发现。谢谢大家的帮助...

【问题讨论】:

  • “隐形”是什么意思?在任务管理器中?在屏幕上?
  • 在屏幕上,但隐藏窗口实际上并不是问题:) 如果它在任务管理器中不可见,那也可以,但这不是必需的。我编辑了问题以澄清这一点。 “我想做的基本上就是启动和远程控制一个cmd.exe进程。”
  • 如果您已经了解 kernel32.dll 控制台 API (msdn.microsoft.com/en-us/library/ms682073%28v=VS.85%29.aspx),您究竟需要什么?
  • 一个工作示例。我有我需要的所有信息,但显然没有正确的技能。我以 Java Web 开发为生,而 WinAPI 编程对我来说还很陌生。
  • 检查我的答案 - 3 个指向不同示例的链接(虽然不是很具体)...

标签: c# winapi cmd kernel32


【解决方案1】:

here你发现几个关于“远程控制命令提示符”的例子......

另一个link(.NET 这次来自stackoverflow)...

和来自visualstudio杂志的something...

【讨论】:

  • 我已经尝试了链接 1 和 2 中的示例,但没有取得多大成功。今天晚上我会研究链接3。但基本上这样的例子让过去几天变得很糟糕:)
  • 对我来说它们看起来不错...正如我在上面写的:你想用这种方法控制的每个程序都有它自己的“怪癖”,所以当你真的想以这种方式实现它时,它是一些试验和错误...
  • 顺便说一句:mysql 将文本文件作为输入-也许这可以帮助您实现目标...请参阅dev.mysql.com/doc/refman/5.0/en/batch-commands.html
  • MySQL 只是一个例子。而且由于我只想与 cmd 通信,因此在其中运行哪种应用程序并不重要,因为 cmd 应该处理它。这就是为什么我想远程控制 cmd 进程而不只是启动应用程序本身。
  • 我不知道您有多少经验,例如 MySQL(或其他任何东西)绝对有可能以绕过 STDIN 的方式实现(无论出于何种原因,无论是出于安全性还是其他任何东西)......在这种情况下,命令无法“处理”你所期望的......
猜你喜欢
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 2010-10-21
  • 2012-11-22
  • 2021-09-14
相关资源
最近更新 更多