C#启动应用程序 - 流程而不会窃取焦点

时间:2015-10-29 10:11:54

标签: c# windows process focus steam

我开始学习C#,现在我想知道是否有办法在没有窃取焦点的情况下启动第三方应用程序,或者只是总是在后台显示此应用程序/进程的窗口。

更具体一点:我编写了一个应用程序,可以使用login-data等参数启动Steam-Client。据我所知,Steam-Client是用Java编写的,也许这就是我的一个问题。我也知道你可以像“静音模式”一样启动Steam-Client:

"C:\Programs\Steam\Steam.exe" -silent -login user password

但如果我不希望Steam-Client窃取焦点,这将无济于事。前台有两个窗口:登录窗口加载窗口

我在stackoverflow上搜索并使用谷歌搜索解决方案,但没有一个对我有效。一种可能的解决方案是,但对我不起作用:

Process startsteam = new Process();
startsteam.StartInfo.FileName = cursteampath;
startsteam.StartInfo.Arguments = "-silent -login " + user + " " + password;
startsteam.StartInfo.CreateNoWindow = true;
startsteam.StartInfo.ErrorDialog = false;
startsteam.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
startsteam.Start();

就像我之前写的那样,这不会隐藏登录窗口(表单)和加载窗口。我还注意到Steam正在启动子进程,如steamwebhelper.exe

我的问题是:在C#中是否有任何方法可以启动第三方应用程序的进程并防止它及其子进程窃取焦点或仅强制所有窗口显示在背景?

修改:此解决方案对我stackoverflow user32.dll

也不起作用

1 个答案:

答案 0 :(得分:-1)

我认为,你在这里看到的是军备竞赛的结果。 Windows开发人员为应用程序添加了一种在后台启动的方法:将不显示/隐藏标志传递给流程启动结构。

然后开发人员决定忽略该标志,并在前台显示。那些开发人员都是坏人。

而不是升级军备竞赛并引入一个不显示窗口,我真的意味着它标志着#34;对于试图和解决的应用程序,微软明智地停在那里。

因此,如果一个应用程序是由坏人编写的,那么你真的没有什么可以简单地强迫它。没有注射钩子dll和其他这样的侵入性技术,试图强迫他们兑现血腥的合同。