Можно ли получить PID по заголовку окна?

Вопрос или проблема

Я запускаю несколько разных экземпляров одного и того же приложения на Windows 10.

Один из них завис, и мне нужно его перезапустить. Это стороннее программное обеспечение, и единственное, что я могу сделать, чтобы отличить это приложение заранее, – это отображать разные заголовки окон.

Есть ли способ получить PID зависшего процесса, о котором у меня есть только заголовок окна (и имя процесса; но имена процессов имеют дубликаты)?

Выполните эту команду в PowerShell, чтобы вывести PID и все открытые заголовки окон:

Get-Process | Where MainWindowTitle | Select ID,MainWindowTitle

   Id MainWindowTitle                                                      
   -- ---------------                                                      
12908 Calculator                                                           
15728 Calculator

Или вы можете фильтровать по конкретным заголовкам окон, как показано здесь:

Get-Process | Where MainWindowTitle -Like '*Calc*' | Select ID,MainWindowTitle

Используя команду tasklist из командной строки:

tasklist /fi "windowtitle eq some_window_title"

Где /fi – это фильтр, который указывает типы процессов для включения или исключения из запроса.

Также можно указать вывод процессов со статусом not running, как показано ниже:

tasklist /fi "windowtitle eq specific_title" /fi "status ne running"

Пример:

tasklist /fi "windowtitle eq Calculator"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
ApplicationFrameHost.exe      2996 Console                   16     40,864 K
CalculatorApp.exe            19360 Console                   16     82,492 K

Ответ или решение

Чтобы решить проблему получения идентификатора процесса (PID) из заголовка окна в операционной системе Windows 10, когда ваш запущенный процесс заморожен, и его необходимо перезапустить, важно понимать, как системы Windows обрабатывают процессы и идентификацию окон. В данном случае, когда происходит несколько запусков одной и той же программы, которые отличаются только заголовками окон, основная задача — найти PID процесса с определённым заголовком окна.

Теория

Каждое приложение или процесс, работающий в Windows, имеет уникальный идентификатор процесса (PID). Однако, в случае, когда несколько экземпляров одного приложения запущены одновременно, они могут иметь одинаковые имена процессов, что затрудняет их индивидуальную идентификацию. Заголовки окон могут служить отличительным признаком, особенно, если заранее установлены уникальные для каждого экземпляра приложения.

В Windows процессы можно просматривать и управлять ими с использованием утилит командной строки, таких как Get-Process в PowerShell или tasklist в командной строке. Эти команды позволяют фильтровать процессы по различным критериям, включая заголовки окон, что мы и будем использовать.

Пример

Чтобы получить PID по заголовку окна, можно использовать несколько подходов, которые вкратце приведены ниже.

Powershell

  1. Получение списка процессов с заголовками окон:

    Используйте команду PowerShell для получения списка всех процессов с их заголовками окон:

    Get-Process | Where MainWindowTitle | Select ID, MainWindowTitle

    Эта команда выведет список всех процессов, у которых заполнен заголовок окна, включая их PID.

  2. Фильтрация по конкретному заголовку:

    Если вы знаете часть или весь заголовок окна, используйте фильтр -Like:

    Get-Process | Where MainWindowTitle -Like '*YourWindowTitle*' | Select ID, MainWindowTitle

    Эта команда отфильтрует процессы, заголовки окон которых содержат установленный шаблон, и покажет только их ID и заголовки.

Командная строка (cmd)

  1. Удаление процесса с определённым заголовком окна:

    Используйте команду tasklist для фильтрации стандартного списка процессов по заголовку окна:

    tasklist /fi "windowtitle eq Window_Title"

    В этой команде Window_Title следует заменить на точное название заголовка окна. Эта команда покажет процессы с данным заголовком и их PID.

  2. Вывод процессов, которые не выполняются:

    Чтобы отфильтровать процессы, которые не в состоянии "running", используйте дополнительный фильтр:

    tasklist /fi "windowtitle eq Window_Title" /fi "status ne running"

Применение

Теперь, когда вы знакомы с методами, описанными выше, вы можете применять их в своей IT практике:

  1. Идентификация замороженного процесса:

    • Воспользуйтесь Get-Process или tasklist, чтобы идентифицировать процессы с нужным заголовком окна и записать их PID.
  2. Перезапуск или завершение процесса:

    • После определения PID нужного процесса, можно использовать команду Stop-Process в PowerShell или taskkill в командной строке, чтобы остановить процесс:

      Stop-Process -Id PID

      В cmd используйте:

      taskkill /PID PID
    • ‘PID’ следует заменить на фактический идентификатор процесса.
  3. Перезапуск приложения:

    • После завершения процесса вручную перезапустите приложение, чтобы оно вернулось к нормальной работе.

Следуя этому пошаговому руководству вы сможете эффективно управлять приложениями в Windows, получая PID процессов по заголовкам их окон и управляя ими для поддержания стабильности работы системы.

Оцените материал
Добавить комментарий

Капча загружается...