2016-08-03 114 views
4

當我從我的應用程序運行另一個.exe時,它將在後臺啓動,並且不在屏幕頂部顯示應用程序,而是顯示平板電腦模式主屏幕,它在正常桌面模式,但是當我在Windows 10平板電腦模式下運行它時,它不會在頂部顯示它在後臺啓動。在平板電腦模式下啓動另一個應用程序

我已經使用myWindow.TopMost = true;,但它在Windows 10 Tablet模式下無法正常工作。

代碼用於啓動exe文件

Process p = new Process(); 
p.StartInfo.RedirectStandardOutput= true; 
p.RedirectStandardInput = true; 
p = Process.Start("myApp.exe"); 
p.WaitForExit(); 

我調用(起點)的exe是我自己的EXE應用程序(它不是系統的應用程序),我在Windows上運行的應用程序10

它只能在平板電腦模式下工作(並且我只針對平板電腦的應用程序)。

任何幫助表示讚賞..!

+0

你應該設置父窗口,它讓你的應用程序癱瘓。沒有設置,'TopMost = true'不會幫助你。 – meorfi

回答

3

正如我遇到了類似的情況,(它不是平板電腦或Windows的10只涉及由WPF最頂層標籤有相似之處。)我會告訴你我是如何解決這個問題: 我想使FilterWindow始終爲TopMost(但僅限於我的應用程序,而不是我的操作系統中的整套應用程序)

請參閱我的代碼。願它能幫助你。

private void OnFilter() { 
    var filterViewModel = ViewModelLocator.FilterViewModel; 

    /* ... */ 

    var filterWindow = new FilterWindow { 
     DataContext = filterViewModel, 
     Owner = GetParentWindow() 
    }; 
    filterWindow.ShowDialog(); 
    SelectedIndex = 0; 
} 

private static Window GetParentWindow() { 
    Window parent = null; 

    var activeWindows = Application.Current.Windows.Cast<Window>().Where(item => (item).IsActive).ToList(); 
    if (activeWindows.Any()) { 
    parent = activeWindows[activeWindows.Count - 1]; 
    } 
    else { 
     foreach (var item in 
      Application.Current.Windows.Cast<object>().Where(item => item.GetType().Name == typeof(RibbonWindow).Name)) { 
      parent = item as Window; 
     } 
    } 
    return parent; 
} 

魔法是Owner = GetParentWindow()
沒有設置OwnerFilterWindow有一個荒謬的行爲。

希望它可以幫助你。如果不是,我會刪除回覆。 (它不適合在評論中)

+0

感謝您的迴應,但我應該在哪裏編寫這段代碼,因爲我正在盯着新的exe(app)。當我發佈我的代碼來從Process.Start()調用exe文件? –

+0

@RahulShirphule,在進程的情況下,你應該從WinApi處理窗口函數。 'SetParent'應該做到這一點(當你啓動EXE時)請參閱:https://msdn.microsoft.com/en-us/library/windows/desktop/ms633541(v=vs.85).aspx。此外,這也可以讓你感興趣:http://stackoverflow.com/questions/8312535/can-you-launch-a-process-on-top-of-the-topmost-window-csharp-wpf – meorfi

+0

是的我經歷了這個鏈接..但是何時調用setParent方法沒有提到,意味着在p = Process.Start之前或之後(「myApp。); p.WaitForExit();我試過都沒有運氣......你有什麼想法..?請讓我知道嗎? –

0

Moerfi的解決方案使用Owner = GetParentWindow()工作得很好,非常感謝這個解決方案。它也解決了我的另一個問題。

我正在爲平板模式下的Windows 10 Pro上運行的Surface 3編寫一個應用程序,無論何時關閉了MessageBox或自定義對話框控件,而不是返回到父窗口,Win 10會進入開始菜單。

就好像一旦對話框控件打開後,父窗口被置於後臺,所以當對話框控件關閉時,沒有活動窗口讓Win 10切換回來。

設置所有者對子對話框控件解決了這個問題。非常感謝你。

相關問題