2012-01-14 72 views
2

我們有一個腳本引擎(在Windows下運行),在我們開展工作時幾千次啓動另一個應用程序。這個其他應用程序有一個繁忙的用戶界面(主窗口彈出,閃爍幾個對話框,它是否工作,然後關閉)。理想情況下,我們希望完全禁止子應用程序的用戶界面,以便用戶可以繼續在工作站上工作。在Windows中抑制應用程序用戶界面

我們沒有任何控制其他應用程序的代碼,所以我們需要能夠從我們的外部過程中實現這個結果。我們正在啓動其他流程,因此我們的應用程序是新流程的所有者,如果有幫助的話。

通過在啓動後發送窗口消息來強制應用程序的主窗口最小化似乎不是一個好策略,因爲我們在運行過程中啓動了數千次應用程序(我們可以儘量減少每個主窗口,但是我認爲,對於用戶來說,經驗的焦點將會改變並且中斷其餘的工作)。此外,該應用程序似乎故意調用SW_SHOW,所以即使我們儘量減少應用程序,它也會回來。

有沒有人有任何創意或巧妙的方法呢?也許某種方式將應用的用戶界面推入不會影響用戶正常工作的不同桌面? (這裏的問題是,我敢肯定,Windows不支持虛擬桌面......)。

請注意,我完全禁止了子應用程序的用戶界面。

+0

另一個想法:許多Win應用程序將在用戶上次離開時​​留下的相同屏幕座標下啓動。也就是說,如果你啓動它,將窗口的左邊位置移動到currentcreenwidth + 1,它可能會在那裏啓動,直到你將它移回去,除非該應用程序足夠聰明,可以計算出它的偏移量並向後移動。 – 2012-01-14 16:16:32

+2

@Steve雖然它可能會假設焦點,但如果焦點窗口不在屏幕上,則會更混亂 – 2012-01-14 16:23:37

+0

您也不能將窗口移動到「當前屏幕寬度」+1。很多人現在有多個顯示器。這是程序員在Windows 95中犯下的一個錯誤。我本來希望認爲我們已經超越了現在。 :-( – 2012-01-15 07:26:09

回答

2

Windows實際上確實支持虛擬desktops。您建議的解決方案應該很好地工作。

創建一個新的桌面與CreateDesktop但不切換到它(顯然)。然後,當您創建該進程時,請在STARTUPINFO結構中指定此桌面,該結構將傳遞給CreateProcess

+0

輝煌 - 我會給你一個鏡頭 – 2012-01-14 17:10:59

+0

優雅的使用虛擬桌面來隱藏錯誤行爲的應用程序我喜歡它 – 2012-01-15 07:26:32

+0

好的 - 這隻讓我參與其中 - 我可以讓應用程序在單獨的環境中啓動桌面,但我似乎無法通過DDE與它交互,我將這個標記爲答案,並打開關於DDE的另一個問題。如果有人正在尋找示例代碼,請參閱http:// stac koverflow.com/questions/1395351/createdesktop-with-vista-and-uac-on-c-windows – 2012-02-03 01:57:15

相關問題