
Я наконец придумал такую команду:
tasklist /V /NH | find "test"
Он выводит список всех запущенных процессов с «подробной» информацией («заголовок окна» — это то, что нам нужно, поэтому необходимо использовать /V), пропускает строку заголовка, а затем передает ее в «find», чтобы найти только те процессы, которые где-либо содержат «test».
Пока я печатаю это, я понимаю, что он проверяет наличие слова «test» в любом месте строки, выведенной tasklist, что не является намерением (предполагается, что проверяется только часть заголовка окна), но это имеет второстепенное значение, поскольку на практике совпадений никогда не будет, поскольку «test» на самом деле является строкой с несколькими пробелами, которая вряд ли когда-либо появится в остальной части строки.
В любом случае, указанная выше команда выполняется буквально за секунды, и это не из-за конвейеризации для "find", потому что я пробовал без нее. Она просто очень медленно извлекает эту информацию, которая, как вы могли бы подумать, должна быть так легко доступна в оперативной памяти, что вы почти получите ответдовыдавая команду, но, по-видимому, они выполняют какую-то сложную логику, которая, по-видимому, считывает большие фрагменты дискового хранилища. (Как еще объяснить секунды загрузки каждый раз?)
Прочитав руководство по «tasklist», я не могу сказать, что мне важен только «заголовок окна», и это все, что я хочу вывести (что может быть быстрее).
Я заметил, что фильтрация идет намного быстрее, если использовать определенный «образ» (EXE-файл), но мне это не нужно, поскольку предполагается, что проверяется/заботится только о «заголовке окна» (также известном как «заголовок процесса»).
Есть хорошие идеи?
решение1
Вы можете фильтровать по заголовку окна с помощью /FI "WINDOWTITLE eq Window Name"
. Хотя это не намного быстрее.
Того же самого, но гораздо быстрее, можно добиться с помощью PowerShell:
get-process | where-object {$_.mainWindowTitle -like "test*"}
Что завершается примерно через секунду.