【问题标题】:Cmd start command ignores /min switchCmd 启动命令忽略 /min 开关
【发布时间】:2017-04-01 17:39:11
【问题描述】:

我正在运行 Windows 2012,每当我在控制台中输入以下内容时:

start /min calc.exe

它会打开应用程序,但它没有最小化到任务栏。

在 Windonws 8.1 上,它实际上确实将其最小化。

有什么想法吗?

编辑:我想具体说明这个问题,因为它变得很混乱。

上面的

calc.exe 只是一个示例,说明 /min 开关不起作用。

我的真正目标是通过命令行在 Win 2012 R2 中启动 pythonchrome

当使用 /min 开关时,它们都在 8.1 中最小化了启动。

【问题讨论】:

  • 可能是calc.exe 的特性。如果您尝试对cmd.exe 进行相同操作,它会按预期运行。
  • 在 windows 10 中它也不会最小化,我猜是因为它是一个 UWP 应用程序。
  • 这很有趣。 cmd.exe 正在启动最小化。但是,我想最小化启动 Python 和 Chrome 应用程序,但它不起作用。仍然无法理解为什么,因为它适用于 Windows 8.1
  • 你的意思是Windows Server 2012 R2吗?也就是Windows 8.1对应的服务器版本。
  • 不确定 windows 2012,在 windows 10 中 calc.exe 启动另一个可执行文件 (calculator.exe) 。您可以请求最小化第一个,但您无法控制第二个的启动方式。

标签: windows shell cmd minimize windows2012


【解决方案1】:

start /min file.exe 使用CreateProcess API 调用启动进程,STARTUPINFO 结构中的适当信息由lpStartupInfo 参数指向。

在这个结构中,有一个wShowWindow 成员来指示如何显示已启动进程的窗口。它的文档说明

wShowWindow

如果 dwFlags 指定 STARTF_USESHOWWINDOW,则此成员可以是任何 可以在 nCmdShow 参数中为 ShowWindow 函数,SW_SHOWDEFAULT 除外。否则,该成员 被忽略。

对于 GUI 进程,第一次调用 ShowWindow 时,它的 nCmdShow 参数被忽略 wShowWindow 指定默认值。在 随后对 ShowWindow 的调用,则使用 wShowWindow 成员,如果 nCmdShow ShowWindow 的参数设置为 SW_SHOWDEFAULT。

也就是说,您依赖启动的进程如何处理其窗口管理。在start 命令中您无法确保新窗口将被最小化。

注意start 命令在可执行文件的情况下使用CreateProcess,但不同的参数(文档、URL 等)导致使用不同的 API(例如 @ 987654332@ 或 ShellExecuteEx),但在走不同的路后会遇到同样的问题。

注意 2:如前所述,在某些情况下(我的情况是 windows 10,calc.exe),您启动一​​个进程,它会启动另一个进程。您无法控制第二个启动的过程。

【讨论】:

  • 我可以尝试任何替代的 cmd 命令吗?也许直接从命令行调用 CreateProcess?我喜欢一些例子。
  • @Anonymous,直接调用 CreateProcess(启动命令已经做的事情)会有同样的问题。意识到 Nirsoft 的 AdvancedRun 等工具在其窗口处理中也发出警告 “请注意,此选项仅影响支持它的程序”。 Ì已经测试了chrome.exepython.exe 并且都接受了Windows 10 中的start /min,但是它们中的任何一个在启动后都不受start 命令的控制。
  • @MCND,我怀疑 OPs 问题是平板电脑上报告的类似问题的变体,Windows 故意未能将标志传递给新应用程序。
  • @HarryJohnston,也许你是对的(在 Windows 10 中,在平板电脑模式下,chrome 有时会最小化,其他的则不会)不幸的是,我仅限于 Windows 7 和 10,无法在 OP 环境中进行测试。在任何情况下,如前所述,直接使用操作系统提供的功能,您所能做的就是要求系统在启动时最小化窗口。对于 Windows 10 calc 案例,即使是 Lee Cottrell 回答中的方法(以任何状态开始然后最小化)也会失败。如果不为任务编写特定代码,我看不到处理 OP 问题的明确方法。
  • 从 SO 的角度来看,我同意。如果我是对的(我完全不确定),这可能更像是一个服务器故障问题。
【解决方案2】:

我无法在命令提示符中执行此操作,但可以在 PowerShell 中执行此操作。由于您在 2012 年,请从服务器管理器安装 Powershell ISE |管理 |添加角色和功能。

首先我从这个页面创建了函数 Set Window Style function

然后我写了这些行(Python 可能在你的计算机上命名不同)

 (Get-Process -Name Python).MainWindowHandle | foreach { Set-WindowStyle MINIMIZE $_ }
 (Get-Process -Name Chrome).MainWindowHandle | foreach { Set-WindowStyle MINIMIZE $_ }

最后,我将它保存为脚本并粘贴到桌面上。

【讨论】:

    【解决方案3】:

    你没有写,你不想使用任何工具,所以这里有一个,可以解决你的问题。 无需安装,它来自受信任的分销商 (Nirsoft),因此您应该尝试一下。 链接:http://www.nirsoft.net/utils/advanced_run.html

    首先你必须通过 gui 创建一个配置文件,然后你可以通过调用 AdvancedRun.exe /run config.cfg 来启动程序

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      相关资源
      最近更新 更多