簡體   English   中英

C#啟動應用程序 - 流程而不會竊取焦點

[英]C# Start Application-Process without stealing focus

我開始學習C#,現在我想知道是否有辦法在沒有竊取焦點的情況下啟動第三方應用程序,或者只是總是在后台顯示此應用程序/進程的窗口。

更具體一點:我編寫了一個可以使用login-data等參數啟動Steam-Client的應用程序。 據我所知,Steam-Client是用Java編寫的,也許這就是我的一個問題。 我也知道你可以在“靜音模式”下啟動Steam-Client,如下所示:

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

但如果我不希望Steam-Client竊取焦點,這將無濟於事。 前景中有兩個窗口: Login-WindowLoading-Window

我在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();

就像我之前寫的那樣,這不會隱藏Login-Window (Form)和Loading-Window 我還注意到Steam正在啟動像steamwebhelper.exe這樣的子steamwebhelper.exe

我的問題是:在C#中是否有任何方法可以啟動第三方應用程序的進程並阻止它及其子進程竊取焦點或僅強制所有窗口在后台顯示?

編輯:此解決方案也不適用於stackoverflow user32.dll

我想,你在這里看到的是軍備競賽的結果。 Windows開發人員添加了一種在后台啟動應用程序的方法:將一個不顯示/隱藏標志傳遞給流程啟動結構。

開發人員然后決定他們想忽略那個標志,並且無論如何都要顯示在前台。 那些開發人員是壞人。

對於試圖和解決的應用程序而言,微軟明智地停在那里,而不是升級軍備競賽並引入“不顯示窗口我真的意味着它標志”。

因此,如果一個應用程序是由壞人編寫的,那么你真的沒有什么可以簡單地強迫它。 沒有注入鈎子dll和其他這樣的侵入性技術,試圖強迫他們兌現血腥的合同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM