2016-08-03 37 views
4

アプリケーションから別の.exeを実行すると、アプリケーションがバックグラウンドで起動し、画面上部にアプリケーションが表示されず、代わりにタブレットモードのホーム画面が表示されます私はWindows 10のタブレットモードでそれを実行すると、それはバックグラウンドで開始する上に表示されません。別のアプリケーションをタブレットモードで一番上に起動する

私はmyWindow.TopMost = true;を使用しましたが、Windows 10タブレットモードでは意図したとおりに動作しません。

コードは、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関連のみWPFTopMostのタグによって類似性を持っています。)私は、私はそれを解決する方法を紹介します直面したとおり:私は希望 を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()です。
Ownerを設定しないと、FilterWindowはばかげた動作をしました。

お手伝いします。いいえ、私は応答を削除します。 (それはコメントに収まらない)

+0

回答ありがとうございます。しかし、私は新しいexe(アプリ)を見つめているので、このコードを書くべきですか? 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。 –

0

Moerfiのソリューションの使用Owner = GetParentWindow()は、この解決策に非常に感謝しました。私が持っていたもう一つの問題も解決しました。

親ウィンドウに戻るのではなく、MessageBoxまたはカスタムダイアログコントロールボックスが閉じられるたびに、Windows 10 Proをタブレットモードで実行するSurface 3のアプリケーションを作成しています.Windows 10はスタートメニューに移動します。

ダイアログコントロールを開くと、親ウィンドウがバックグラウンドに配置されているので、ダイアログコントロールを閉じると、Windows 10が元に戻すアクティブなウィンドウはありません。

子ダイアログコントロールの所有者を設定すると、その問題が解決しました。どうもありがとうございました。

関連する問題