8

現在、WPF でクリック イベントを使用して Windows タスク マネージャーを呼び出しています。このイベントは、'Process.Start("taskmgr") を実行するだけです。

私の質問は、プロセスの開始/表示時にタスクマネージャー内のどのタブが選択されるかを選択する方法はありますか? クリックイベントが発生するたびに「パフォーマンス」タブが自動的に選択されるようにしています。

助けてくれてありがとう。

4

4 に答える 4

7

Philipp Schmidの投稿を拡張するために、私は小さなデモを作成しました。

コンソールアプリケーションとして実行します。とへの参照を追加する必要がUIAutomationClientありUIAutomationTypesます。

あなた(またはあなたが望むなら私)が行うことができる1つの可能な改善は、最初にウィンドウを非表示にし、正しいタブが選択された後にのみウィンドウを表示することです。それがうまくいくかどうかはAutomationElement.FromHandleわかりませんが、隠されたウィンドウを見つけることができるかどうかはわかりません。

編集:少なくとも私のコンピューター(Windows 7、32ビット、.Net Framework 4.0)では、次のコードは最初に非表示のタスクマネージャーを作成し、正しいタブが選択された後に表示します。[パフォーマンス]タブを選択した後、ウィンドウを明示的に表示しないので、おそらく自動化ラインの1つが副作用として表示されます。

using System;
using System.Diagnostics;
using System.Windows.Automation;

namespace ConsoleApplication2 {
    class Program {
        static void Main(string[] args) {
            // Kill existing instances
            foreach (Process pOld in Process.GetProcessesByName("taskmgr")) {
                pOld.Kill();
            }

            // Create a new instance
            Process p = new Process();
            p.StartInfo.FileName = "taskmgr";
            p.StartInfo.CreateNoWindow = true;
            p.Start();

            Console.WriteLine("Waiting for handle...");

            while (p.MainWindowHandle == IntPtr.Zero) ;

            AutomationElement aeDesktop = AutomationElement.RootElement;
            AutomationElement aeForm = AutomationElement.FromHandle(p.MainWindowHandle);
            Console.WriteLine("Got handle");

            // Get the tabs control
            AutomationElement aeTabs = aeForm.FindFirst(TreeScope.Children,
  new PropertyCondition(AutomationElement.ControlTypeProperty,
    ControlType.Tab));

            // Get a collection of tab pages
            AutomationElementCollection aeTabItems = aeTabs.FindAll(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty,
    ControlType.TabItem));

            // Set focus to the performance tab
            AutomationElement aePerformanceTab = aeTabItems[3];
            aePerformanceTab.SetFocus();
        }
    }
}

タスクマネージャの以前のインスタンスを破棄するのはなぜですか?インスタンスがすでに開いている場合、セカンダリインスタンスは開きますが、すぐに閉じます。私のコードはこれをチェックしないので、ウィンドウハンドルを見つけるコードはフリーズします。

于 2011-08-08T19:18:32.013 に答える
2

taskmgr.exe には、選択したタブを指定するためのコマンド ライン引数がありませんが、Windows UI オートメーションを使用してパフォーマンス タブに移動できます。

于 2011-08-08T19:10:14.167 に答える
1

残念ながら、taskmgr.exeコマンド ライン引数はサポートされていません。

実行すると、最後に閉じたときにアクティブだったタブが常にアクティブになります。

于 2011-08-08T19:02:41.677 に答える
0

Windows 10 ビルド 18305 以降では、優先タブを設定して、既定でタスク マネージャーを開くことができるようになりました。

更新するには:

  • スタート メニューをクリックし、検索ボックスに「Windows Update」と入力します。
  • 「Windows Update 設定」を選択
  • 左側のパネルで [ビルドのプレビュー] をクリックします。
  • 今すぐ「チェック」をクリックしてください。
  • 新しいビルドをダウンロードします。

StartUpTab更新後、Win レジストリ キー の dword 値を変更します。HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\TaskManager

0 – Processes tab
1 – Performance tab
2 – App history tab
3 – Startup tab
4 – Users tab
5 – Details tab
6 – Services tab

勝利コマンド:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\TaskManager /v "startup" /t REG_DWORD /d "1"

この (実験的な) 機能は、一部の Windows Insider のみが利用できます。

Win 10 の古いビルドでは、「スタートアップ」以外のタブはサポートされていません。
taskmgr /4 /startup

リセットするには:
reg delete HKCU\Software\Microsoft\Windows\CurrentVersion\TaskManager /v "Preferences" /f

変更されたキーを確認するには:
REG ADD "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit" /v "LastKey" /d "HKCU\Software\Microsoft\Windows\CurrentVersion\TaskManager" /f & regedit

Win 10 CMD でテスト済み

于 2020-04-06T14:41:57.793 に答える