Вызов диспетчера задач вкладка производительность выбраны
в настоящее время я вызываю диспетчер задач windows, используя событие click в WPF. Событие просто выполняет процесс .Start("taskmgr").
мой вопрос: есть ли способ выбрать, какая вкладка внутри диспетчера задач выбрана при запуске / отображении процесса? Я ищу, чтобы вкладка "производительность" выбиралась автоматически при возникновении события click.
Спасибо за помощь.
3 ответов
чтобы расширить пост Филиппа Шмида, я приготовил небольшую демонстрацию:
запустить его как консольное приложение. Вам нужно добавить ссылки на UIAutomationClient
и UIAutomationTypes
.
одно возможное улучшение, которое вы (или я, если хотите) можете сделать, - это скрыть окно изначально, только показав его после выбора правильной вкладки. Я не уверен, что это сработает, однако, поскольку я не уверен, что AutomationElement.FromHandle
смогло бы найти спрятанное окно.
Edit: по крайней мере, на моем компьютере (Windows 7, 32 bit, .Net framework 4.0) следующий код сначала создает скрытый Диспетчер задач и показывает его после выбора правильной вкладки. Я явно не показываю окно После выбора вкладки "производительность", поэтому, вероятно, одна из строк автоматизации делает как побочный эффект.
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();
}
}
}
Почему я уничтожаю предыдущие экземпляры Диспетчера задач? Когда экземпляр уже открыт, вторичный экземпляры откроются, но сразу же закроются. Мой код не проверяет это, поэтому код, который находит дескриптор окна, замерзнет.
пока урочная.exe не имеет аргументов командной строки для указания выбранной вкладки, вы можете использовать автоматизация пользовательского интерфейса Windows для перехода на вкладку Производительность.
к сожалению, taskmgr.exe
не поддерживает аргумент командной строки.
при запуске он всегда активирует вкладку, которая была активна при последнем закрытии.