【问题标题】:How can I get the process that launched my app?如何获取启动我的应用程序的进程?
【发布时间】:2014-10-22 21:53:33
【问题描述】:

尽管您阅读了这些内容,但事实证明 Windows 屏幕保护程序“不仅仅是”一个重命名为 .scr 的 .exe。 .scr 文件不像 EXE 那样直接“启动”。相反,Windows 会在 .scr 文件中查找可执行文件,然后使用 Windows 想要提供给可执行文件的任何命令行参数重新启动该可执行文件。

这意味着,如果您使用自己的参数(例如,“myscreensaver.scr /windowed /doublebuffered”)创建 .scr 文件的快捷方式,当您使用该快捷方式时,Environment.CommandLine 会显示启动的内容是“myscreensaver.scr /S”。请注意,我的参数已被替换。

我了解这里/s、/c 和/p 参数的作用。这无需解释,我在屏幕保护程序中正确使用了它们。但我也想恢复我的 original 参数。是否可以获取启动我的进程的进程的名称,并获取提供给那个进程的命令行参数?

【问题讨论】:

  • 当您创建屏幕保护程序时,您正在制作一个 Windows 窗体并将 exe 重命名为 scr,所以我不确定您从哪里得到 Despite what you read, it turns out that a Windows Screen Saver is not an .exe..。您是创建屏幕保护程序并可以控制它的人。我错过了什么吗?除此之外,如果您不安装屏幕保护程序,为什么还要费心将其重命名为 scr 并且如果您正在安装它,为什么要手动调用 scr(双击)?通过将其重命名为 scr 并安装它,您希望 windows 调用它。
  • 我很确定你需要的东西是不可能的,你需要一种不同的方式,也许是一个配置文件。不过,也许有人会证明我错了。
  • @vesan 要更改屏幕保护程序设置,请使用选项表单。这些设置通常保存并加载到注册表/从注册表加载。就像我说的,如果你想手动调用它,不要让它成为一个 scr 文件。将其保留为 exe。很简单。
  • @vesan 感谢您尝试回答手头的问题,Vesan。我也有同样的怀疑。 :-) 是的,松饼,你错过了一些东西。当您必须从我的报价中删除“公正”时,您应该怀疑您实际上并没有解决该报价。我想我很清楚引用后声明的不同之处。

标签: c# winforms command-line-arguments screensaver windows-screensaver


【解决方案1】:

您对 SCR 文件的看法是正确的。它只是 Windows 使用 /p(预览)、/c(配置)或 /s(显示)启动的 EXE。屏幕保护程序负责其他一切,包括将其设置保存在注册表或其他位置。

不,我不知道如果您直接启动屏幕保护程序,Windows 会用 /S 覆盖命令行参数。不过有点道理。

命令行参数存储在 Windows 内部缓冲区中,可以从程序或外部访问。只有一个缓冲区,所以如果它消失了,它就消失了。

启动你的进程的进程几乎肯定是 Explorer,如果它记得你的命令行参数,它就不会告诉你。

您可以通过查看 Z 顺序找到 shell 之前的最后一个应用程序的窗口。

我能想到的是,与其使用快捷方式,不如编写自己的脚本来启动屏幕保护程序(就像快捷方式一样),但在启动后向它发送一些参数。这很容易做到。

【讨论】:

  • 遗憾的是,客户端的要求非常具体:窗口将启动的屏幕保护程序,以及启动屏幕保护程序的桌面快捷方式,但行为略有不同。事实证明这是不可行的。如果他不修改要求,我想我只会让屏幕保护程序成为启动我的 exe 的存根(传递 Windows 参数),并在同一个 exe 上拥有快捷方式点(带有自己的参数)。
猜你喜欢
  • 2012-11-10
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多