Как узнать pid активного окна в windows
Перейти к содержимому

Как узнать pid активного окна в windows

  • автор:

Как узнать PID процесса Windows

Как посмотреть PID процесса в Windows

Каждый запущенный процесс в Windows имеет свой числовой идентификатор — PID или ИД процесса, который может использоваться для обращения к конкретному процессу, например, для получения информации о нём или принудительного закрытия.

В этой инструкции несколько способов узнать PID процесса в Windows 11 или Windows 10, большинство из которых подойдут и для предыдущих версий системы.

ИД процесса в диспетчере задач

Быстрый и простой способ посмотреть PID процесса в графическом интерфейсе — использовать диспетчер задач Windows, для этого:

  1. Откройте диспетчер задач: вы можете использовать контекстное меню кнопки «Пуск», нажать клавиши Ctrl+Shift+Esc или использовать меню Ctrl+Alt+Delete для этого.
  2. В диспетчере задач переключитесь на вкладку «Сведения» (в Windows 11, переключение выполняется в меню) или «Подробности» (в Windows 10). Просмотр PID процесса в диспетчере задач Windows 11
  3. Обратите внимание на столбец «ИД процесса» — это и есть нужный PID. Если столбец не отображается, нажмите по заголовку таблицы с процессами правой кнопкой мыши и используйте пункт «Выбрать столбцы», чтобы включить показ нужного столбца. Просмотр PID процесса в диспетчере задач Windows 10

Для большинства пользователей этого метода будет достаточно для получения нужной информации.

Однако, если узнать PID запущенного процесса требуется при выполнении какого-либо пользовательского скрипта, могут пригодиться описанные в последней части инструкции методы его получения без использования графического интерфейса — в командной строке или PowerShell.

PID процесса в Мониторе ресурсов

Ещё один метод, очень похожий на предыдущий — использование встроенного инструмента «Монитор ресурсов»:

ИД процессов в Мониторе ресурсов Windows

  1. Нажмите клавиши Win+R на клавиатуре, либо нажмите правой кнопкой мыши по кнопке «Пуск» и выберите пункт «Выполнить».
  2. Введите resmon в диалоговое окно «Выполнить» и нажмите Enter.
  3. Откроется окно «Монитор ресурсов» в нем, на вкладке «Обзор» вы увидите список процессов, распределенных по группам (использование ЦП, Диска, Сети и Памяти) с указанием их ИД в соответствующем столбце.

Process Explorer

Process Explorer — «продвинутый» диспетчер задач из Microsoft Sysinternals, скачать его можно как в комплекте с другими утилитами, так и отдельно с официального сайта.

PID в Process Explorer

После запуска утилиты, информацию о PID процесса вы сможете найти в одноименном столбце.

Командная строка

Получить PID процесса можно с помощью команд командной строки. Шаги будут следующими:

  1. Запустите командную строку, лучше — от имени администратора ( как это сделать).
  2. Чтобы получить список всех процессов, включая информацию об их PID, введите команду

tasklist

Просмотр PID процессов в командной строке

и нажмите Enter.
Для отображения только процессов с заданными именами файлов (в имени допустимы wildcard-символы, например, *) можно использовать следующую команду:

tasklist /FI "IMAGENAME eq имя_файла.exe"

Получить ИД процесса по имени в командной строке

Вы можете вывести результат выполнения команды в текстовый файл, пример:

tasklist > C:\pid.txt

Windows PowerShell или Терминал Windows

И ещё одна возможность для получения PID процессов — использование терминала Windows или PowerShell:

  1. Запустите Windows PowerShell или Терминал Windows, для этого можно использовать меню по правому клику на кнопке «Пуск».
  2. Базовый вариант команды:

Get-Process

Просмотр ИД процессов в PowerShell

выдаст список всех процессов, PID будет отображен в столбце Id
Если в выводе требуется оставить информацию только об имени процесса и его ИД, используйте следующий синтаксис:

Get-Process | Format-Table -Property ProcessName,Id
Get-Process | Where | Format-Table -Property ProcessName,Id

Получение PID конкретного процесса в PowerShell

На этом всё: надеюсь, подходящий для себя способ получить нужную информацию вы нашли. Знаете другие методы получения PID процессов в Windows? — буду рад вашему комментарию ниже.

А вдруг и это будет интересно:

  • Лучшие бесплатные программы для Windows
  • Лучшие редакторы контекстного меню для Windows
  • Дополнительные возможности в Windows 11 OOBE при установке
  • Ошибка 0x80070522 Клиент не обладает требуемыми правами — как исправить?
  • Компьютер не включается или черный экран после установки оперативной памяти
  • Автоматическая установка нескольких программ в Windows 11 и 10
  • Windows 11
  • Windows 10
  • Android
  • Загрузочная флешка
  • Лечение вирусов
  • Восстановление данных
  • Установка с флешки
  • Настройка роутера
  • Всё про Windows
  • В контакте
  • Одноклассники
  • Живые обои на рабочий стол Windows 11 и Windows 10
  • Лучшие бесплатные программы на каждый день
  • Как скачать Windows 10 64-бит и 32-бит оригинальный ISO
  • Как смотреть ТВ онлайн бесплатно
  • Бесплатные программы для восстановления данных
  • Лучшие бесплатные антивирусы
  • Средства удаления вредоносных программ (которых не видит ваш антивирус)
  • Встроенные системные утилиты Windows 10, 8 и 7, о которых многие не знают
  • Бесплатные программы удаленного управления компьютером
  • Запуск Windows 10 с флешки без установки
  • Лучший антивирус для Windows 10
  • Бесплатные программы для ремонта флешек
  • Что делать, если сильно греется и выключается ноутбук
  • Программы для очистки компьютера от ненужных файлов
  • Лучший браузер для Windows
  • Бесплатный офис для Windows
  • Запуск Android игр и программ в Windows (Эмуляторы Android)
  • Что делать, если компьютер не видит флешку
  • Управление Android с компьютера
  • Лучшие редакторы контекстного меню для Windows
  • Дополнительные возможности в Windows 11 OOBE при установке
  • Ctrl+Alt+Delete на Mac — есть ли аналог и как использовать?
  • Ошибка 0x80070522 Клиент не обладает требуемыми правами — как исправить?
  • Компьютер не включается или черный экран после установки оперативной памяти
  • Автоматическая установка нескольких программ в Windows 11 и 10
  • Как удалить Microsoft Edge в Windows 11
  • Как исправить ошибку 0x800F0922 при установке обновления KB5034765
  • При подключении файла ISO возникла проблема — как исправить?
  • Как свернуть все окна в Windows 11 и 10
  • Отложенная автозагрузка программ в Windows — как настроить?
  • Что такое квота на диске в Windows и как её настроить
  • SpaceSniffer — бесплатная утилита для анализа места на диске
  • Please power down and connect the PCIe power cables при загрузке — что делать?
  • Ошибка 0x80073701 при обновлении Windows — как исправить?
  • Windows
  • Android
  • iPhone, iPad и Mac
  • Программы
  • Загрузочная флешка
  • Лечение вирусов
  • Восстановление данных
  • Ноутбуки
  • Wi-Fi и настройка роутера
  • Интернет и браузеры
  • Для начинающих
  • Безопасность
  • Ремонт компьютеров
  • Windows
  • Android
  • iPhone, iPad и Mac
  • Программы
  • Загрузочная флешка
  • Лечение вирусов
  • Восстановление данных
  • Ноутбуки
  • Wi-Fi и настройка роутера
  • Интернет и браузеры
  • Для начинающих
  • Безопасность
  • Ремонт компьютеров

Узнать имя процесса, которому принадлежит активное окно

Как я делаю беру хендл активного окна функцией GetForegroundWindow() , надо по этому хендлу узнать имя процесса при помощи WinAPI. Как это можно сделать?

Отслеживать
11.5k 8 8 золотых знаков 42 42 серебряных знака 70 70 бронзовых знаков
задан 15 янв 2017 в 2:11
Dolphin Scrub Dolphin Scrub
119 3 3 серебряных знака 8 8 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Можно просто и коротко:

#include #include #include int main() < Sleep(1000); // Чтобы успеть переключиться в другое окошко :) DWORD pid; GetWindowThreadProcessId(GetForegroundWindow(),&pid); HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pid); char name[256]; if (GetProcessImageFileName(hProc,name,256)) std::cout #pragma comment(lib,"user32") 

Отслеживать
ответ дан 15 янв 2017 в 6:06
220k 15 15 золотых знаков 120 120 серебряных знаков 233 233 бронзовых знака

  1. Сначала получите идентификатор процесса, которому принадлежит активное окно: GetWindowThreadProcessId() .
  2. Затем получите описатель (дескриптор, хендл) процесса с помощью OpenProcess() . При открытии процесса достаточно указать право на PROCESS_QUERY_INFORMATION — получение ограниченной информации о процессе.
  3. Наконец, извлеките по описателю имя процесса: GetProcessImageFileName() . Данная функция доступна, начиная с Windows XP. Для более ранних версий ОС необходимо использовать GetModuleFilenameEx() , но тогда права доступа к процессу должны быть PROCESS_QUERY_INFORMATION | PROCESS_VM_READ .

Почему я не заменил шаги 1 и 2 на вызов функции GetProcessHandleFromHwnd() ? Дело в том, что эта функция пытается открыть процесс с избыточным набором привилегий, которых у пользователя может и не быть. К примеру, PROCESS_VM_READ (чтение чужой памяти) неприменим к процессам, запущенным не под текущим пользователем (если текущий пользователь не администратор).

#include #include #include #include std::string getForegroundWindowProcessName() < const HWND hForeground = GetForegroundWindow(); if(hForeground) < DWORD dwPID = 0; GetWindowThreadProcessId(hForeground, &dwPID); const HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwPID); if(hProc) < TCHAR szPath[MAX_PATH]; GetProcessImageFileName(hProc, szPath, sizeof(szPath)); CloseHandle(hProc); // Пытаемся извлечь имя файла. Если GetProcessImageFileName по каким-то // причинам предоставил не путь, а просто имя, возвращаем именно его. TCHAR szTitle[MAX_PATH]; if(GetFileTitle(szPath, szTitle, sizeof(szTitle)) == 0) return std::string(szTitle); else return std::string(szPath); >else // Ошибка при открытии процесса. За подробностями — к GetLastError() return std::string(); > else // Ни одно окно не выделено return std::string(); > int main()

WinGet -Autohotkey

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

WinGet, OutputVar [, Cmd, WinTitle, WinText, ExcludeTitle, ExcludeText]

Параметры

OutputVar Имя переменной, куда будет помещён результат.
Cmd Смотрите список ниже.
WinTitle Заголовок или часть заголовка окна (метод поиска можно задавать командой SetTitleMatchMode). Если этот и следующие 3 параметра опущены, будет использовано последнее найденное окно. Чтобы задать окно через его класс, используйте конструкцию ahk_class ТочноеИмяКласса (можно посмотреть программой Window Spy). Чтобы использовать идентификатор процесса (PID), задайте параметр как ahk_pid %ПеременнаяСодержащаяPID%. Чтобы использовать идентификатор окна, задайте параметр как ahk_id %ПеременнаяСодержащаяID%.
WinText Подстрока из одиночного текстового элемента окна (можно посмотреть программой Window Spy). Скрытые текстовые элементы определяются, если включено определение скрытого текста (команда DetectHiddenText).
ExcludeTitle Окна, чей заголовок включает значение этого параметра, исключаются.
ExcludeText Окна, чей текст включает значение этого параметра, исключаются.

Cmd задаёт выполняемую операцию. Значение по умолчанию - ID. Ниже перечислены возможные значения.

ID. Bозвращает уникальный идентификационный номер (HWND/handle) окна. Если окна, подходящего под указанные параметры, нет, выходная переменная будет пустой. Функции WinExist() и WinActive() также могут быть использованы для определения идентификатора окна. Например, WinExist("A") - быстрый способ узнать ID активного окна. Чтобы узнать HWND элемента управления (для последующего использования с Post/SendMessage или DllCall) воспользуйтесь командами ControlGet Hwnd или MouseGetPos.

IDLast. То же, что выше, но будет возвращён идентификатор самого нижнего из совпадающих с критериями окон. Если подходящее окно только одно, действует идентично ID. Это то же правило, по которому действует команда WinActivateBottom.

PID. Возвращает идентификатор процесса, которому принадлежит окно.

ProcessName. Определяет имя процесса (например, notepad.exe).

Count. Возвращает число существующих окон, подходящих под параметры WinTitle, WinText, ExcludeTitle и ExcludeText (вернёт 0, если таких нет). Чтобы пересчитать вообще все существующие окна, опустите все эти параметры. Скрытые окна считаются, если включено определение скрытых окон (команда DetectHiddenWindows).

List. Возвращает ID всех существующих окон, подходящих под параметры WinTitle, WinText, ExcludeTitle и ExcludeText. Чтобы получить список вообще всех существующих окон, опустите все эти параметры. Каждый идентификатор сохраняется в элементе массива, имя элемента начинается с имени выходной переменной. В саму выходную переменную помещается число найденных окон (0, если не найдено ни одного). Например, если переменная названа MyArray и было найдено два окна, MyArray1 будет содержать ID первого окна, MyArray2 - второго, а сама MyArray - число 2. Окна перечисляются в порядке от верхнего к нижнему (согласно с их расположением на рабочем столе). Скрытые окна учитываются, только если включено определение скрытых окон (команда DetectHiddenWindows). Если команда применяется внутри функции, но нужно, чтобы выходной массив был глобальным, объявите MyArray как глобальную переменную до выполнения команды (обратное верно для функций, где все переменные глобальны по умолчанию, а массив должен быть локальным).

MinMax. Определяет состояние окна (свёрнуто/развёрнуто). Выходная переменная пуста, если окно не найдено; иначе принимает одно из следующих значений:

-1 Окно свёрнуто (WinRestore восстановит его).

1 Окно развёрнуто (WinRestore восстановит его).

0 Окно не свёрнуто и не развёрнуто.

ControlList. Возвращает имена всех элементов управления окна. Если подходящего окна не найдено или оно не содержит элементов управления, выходная переменная будет пустой. Иначе каждое имя состоит из имени класса элемента и его порядкового номера (ClassNN), так же, как это показывает программа Window Spy.

Каждая строка списка, кроме последней, оканчивается переводом строки (`n). Для просмотра имён элементов управления по одному используйте цикл разбора, как показано в разделе с примерами ниже.

Элементы перечисляются в Z-порядке, обычно в том же порядке происходит переход между ними по нажатию клавиши TAB, если окно поддерживает такую навигацию.

Элемент управления, находящийся под курсором мыши, может распознаваться командой MouseGetPos.

ControlListHwnd [v1.0.43.06+]. То же, что выше, с тем отличием, что возвращаются оконные идентификаторы (HWND/handle) элементов управления, а не их имена (ClassNN).

Transparent. Возвращает степень прозрачности окна (задать прозрачность можно командой WinSet). Выходная переменная будет пустой, если: 1) операционная система более старая, чем Windows XP; 2) не найдено окон, подходящих под параметры; 3) уровень прозрачности для окна не задан; 4) другие причины (вызванные действиями операционной системы) - например, окно было свёрнуто, восстановлено и/или был изменён его размер после того, как оно было сделано прозрачным. Иначе в переменную будет помещено число от 0 до 255; 0 означает невидимое окно, 255 - полностью видимое. Пример:

MouseGetPos. MouseWin WinGet, Transparent, Transparent, ahk_id %MouseWin% ; Прозрачность окна под курсором мыши.

TransColor. Возвращает цвет, который в окне задан как прозрачный (задаётся командой WinSet). Выходная переменная будет пустой, если: 1) операционная система более старая, чем Windows XP; 2) не найдено окон, подходящих под параметры; 3) окно не имеет прозрачного цвета; 4) другие причины (вызванные действиями операционной системы) - например, окно было свёрнуто, восстановлено и/или был изменён его размер после того, как оно было сделано прозрачным. Иначе в переменную будет помещено 6-значное шестнадцатеричное число, обозначающее цвет в формате RGB (красный-зелёный-синий), например, 0x00CC99. Пример:

MouseGetPos. MouseWin WinGet, TransColor, TransColor, ahk_id %MouseWin% ; Прозрачный цвет у окна под курсором мыши.

Style или ExStyle. Возвращает 8-значное шестнадцатеричное число, представляющее стиль или расширенный стиль окна. Если окон, подходящих под параметры, не найдено, выходная переменная будет пустой. Следующий пример определяет, имеет ли окно стиль WS_DISABLED:

WinGet, Style, Style, My Window Title if (Style & 0x8000000) ; 0x8000000 означает WS_DISABLED. . далее следуют действия на случай, если окно имеет этот стиль.

Следующий пример определяет, имеет ли окно стиль WS_EX_TOPMOST (поверх всех окон):

WinGet, ExStyle, ExStyle, My Window Title if (ExStyle & 0x8) ; 0x8 означает WS_EX_TOPMOST. . далее следуют действия на случай, если окно имеет этот стиль.

Смотрите список некоторых стилей в статье "Стили, используемые командами Gui и GuiControl" ("Styles Usable by the Gui and GuiControl Commands").

Примечания

Номер идентификатора окна действителен только пока существует это окно. Другими словами, если перезапустить приложение, все его окна получат уже другие идентификаторы.

Номера идентификаторов возвращаются этой командой в виде чисел (префикс "ahk_id" не включается) и сохраняются в шестнадцатеричном формате независимо от настроек, устанавливаемых командой SetFormat.

Идентификатор окна под курсором мыши можно узнать через команду MouseGetPos.

Хотя в данное время идентификаторы являются 32-битными числами без указания знака, в будущих версиях они могут стать 64-битными. Поэтому небезопасно совершать над ними числовые операции, такие как сложение, т.к. такие операции требуют, чтобы их входные строки могли быть интерпретированы как числа со знаком.

Заголовки и текст окон чувствительны к регистру. Скрытые окна не определяются, если только это не задано командой DetectHiddenWindows.

Примеры

; Пример №1: Развернуть активное окно и показать его ID: WinGet, active_id, ID, A WinMaximize, ahk_id %active_id% MsgBox, Идентификатор активного окна "%active_id%". ; Пример №2: Этот пример обойдёт все окна в системе и покажет информацию о каждом из них: WinGet, id, list. Program Manager Loop, %id% < this_id := id%A_Index% WinActivate, ahk_id %this_id% WinGetClass, this_class, ahk_id %this_id% WinGetTitle, this_title, ahk_id %this_id% MsgBox, 4, , Обход всех окон`n`n%a_index% из %id%`nahk_id %this_id%`nahk_class %this_class%`n%this_title%`n`nПродолжить? IfMsgBox, NO, break >; Пример №3: Извлекает имя каждого элемента управления активного окна из их списка: WinGet, ActiveControlList, ControlList, A Loop, Parse, ActiveControlList, `n < MsgBox, 4,, Элемент управления №%a_index%: "%A_LoopField%". Продолжить? IfMsgBox, No break >; Пример №4: Показывает в реальном времени список элементов управления активного окна: #Persistent SetTimer, WatchActiveWindow, 200 return WatchActiveWindow: WinGet, ControlList, ControlList, A ToolTip, %ControlList% return

Поиск идентификатора процесса

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

В этом разделе описывается, как определить piD для конкретного приложения с помощью диспетчера задач, команды списка задач Windows, служебной программы TList, команды PowerShell Get-Process или отладчика.

Диспетчер задач

Диспетчер задач можно открыть несколькими способами, но проще всего нажать клавиши CTRL+ALT+DELETE, а затем выбрать диспетчер задач.

В Windows сначала щелкните Дополнительные сведения , чтобы развернуть отображаемые сведения. На вкладке Процессы выберите Сведения , чтобы просмотреть идентификатор процесса, указанный в столбце PID .

Снимок экрана: диспетчер задач в Windows 11 с номерами процессов, отсортированных по имени пользователя.

Щелкните имя любого столбца для сортировки. Щелкните правой кнопкой мыши имя процесса, чтобы просмотреть дополнительные параметры процесса.

Некоторые ошибки ядра могут привести к задержкам в графическом интерфейсе диспетчера задач.

Команда списка задач

Используйте встроенную команду windows tasklist из командной строки для отображения всех процессов, их идентификаторов piD и различных других сведений.

C:\>tasklist Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System Idle Process 0 Services 0 8 K System 4 Services 0 7,428 K Secure System 104 Services 0 40,344 K Registry 164 Services 0 146,596 K smss.exe 592 Services 0 1,176 K csrss.exe 896 Services 0 6,224 K wininit.exe 980 Services 0 6,572 K . 

Используйте tasklist /? для отображения справки из командной строки.

Служебная программа TList

Средство просмотра списка задач (TList), или tlist.exe, — это служебная программа командной строки, которая отображает список задач или процессов в пользовательском режиме, которые в настоящее время выполняются на локальном компьютере. Список TList включен в средства отладки для Windows. Сведения о том, как скачать и установить средства отладки, см. в разделе Средства отладки для Windows.

Если вы установили пакет драйверов Windows в каталоге по умолчанию на 64-разрядном компьютере, средства отладки находятся здесь:

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\

При запуске TList из командной строки отобразится список всех процессов в пользовательском режиме в памяти с уникальным номером PID. Для каждого процесса отображается pid, имя процесса и, если процесс имеет окно, заголовок этого окна.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64>tlist -t System Process (0) System (4) smss.exe (592) Memory Compression (3376) Secure System (104) Registry (164) csrss.exe (896) wininit.exe (980) services.exe (660) svchost.exe (1232) WmiPrvSE.exe (6008) dllhost.exe (1748) WmiPrvSE.exe (1860) . 

Дополнительные сведения см. в разделе TList.

Команда отладчика .tlist

Если в рассматриваемой системе уже запущен отладчик пользовательского режима, команда .tlist (список идентификаторов процессов) отобразит список всех идентификаторов piD в этой системе.

Команда Get-Process PowerShell

Для работы со сценариями автоматизации используйте команду PowerShell Get-Process. Укажите конкретное имя процесса, чтобы просмотреть идентификатор процесса.

C:\> Get-Process explorer Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName ------- ------ ----- ----- ------ -- -- ----------- 2520 404 108948 179284 1,702.95 7656 1 explorer 

Дополнительные сведения см. в разделе Get-Process.

Дополнительные ресурсы

Дополнительные сведения о внутренних компонентах Windows (включая контекст, потоки и процессы) см. в дополнительных ресурсах, таких как Windows Internals Павла Йосифовича, Марка Руссиновича, Дэвида Соломона и Алекса Ионеску.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *