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

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

  • автор:

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

Как я делаю беру хендл активного окна функцией 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()

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

Ничего не найдено.

  • Скачать приложения для дома
  • Скачать приложения для бизнеса
  • Поддержка приложений для дома
  • Поддержка приложений для бизнеса

Бесплатные сервисы и утилиты

  • Проверить файл или ссылку
  • Бесплатные утилиты

Выберите язык

Сменить язык

Нет результатов

Для всех приложений

Общие вопросы

Показать меню

Как узнать идентификатор процесса (PID или ИД процесса) в Windows

Статья обновлена: 31 октября 2023 ID: 6325

Вы можете узнать идентификатор процесса (PID или ИД процесса) с помощью Диспетчера задач или командной строки.

Как узнать PID c помощью Диспетчера задач

  1. Нажмите Ctrl+Shift+Esc на клавиатуре.
  2. Нажмите правой кнопкой мыши на заголовок таблицы и в контекстном меню выберите ИД процесса.

Добавление столбца с ИД процессов в Диспетчере задач.

  1. Найдите идентификатор нужного процесса в столбце ИД процесса.

Как узнать 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 11 и 10
  • Как удалить Microsoft Edge в Windows 11
  • Как исправить ошибку 0x800F0922 при установке обновления KB5034765
  • При подключении файла ISO возникла проблема — как исправить?
  • Как свернуть все окна в 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 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 — как исправить?
  • Как открыть расположение исполняемого EXE файла программы в Windows
  • Режим ограниченной функциональности или совместимости в Word, Excel, PowerPoint — что означает?
  • 0x800706ba Проблема с конфигурацией принтера — как исправить?
  • Fontdrvhost.exe — что это за процесс и решение возможных проблем
  • У вас нет разрешения на подключение файла ISO в Windows — как исправить?
  • Windows
  • Android
  • iPhone, iPad и Mac
  • Программы
  • Загрузочная флешка
  • Лечение вирусов
  • Восстановление данных
  • Ноутбуки
  • Wi-Fi и настройка роутера
  • Интернет и браузеры
  • Для начинающих
  • Безопасность
  • Ремонт компьютеров
  • Windows
  • Android
  • iPhone, iPad и Mac
  • Программы
  • Загрузочная флешка
  • Лечение вирусов
  • Восстановление данных
  • Ноутбуки
  • Wi-Fi и настройка роутера
  • Интернет и браузеры
  • Для начинающих
  • Безопасность
  • Ремонт компьютеров

Get-Process

Возвращает процессы, выполняемые на локальном компьютере.

Синтаксис

Get-Process [[-Name] ] [-Module] [-FileVersionInfo] []
Get-Process [[-Name] ] -IncludeUserName []
Get-Process -Id [-Module] [-FileVersionInfo] []
Get-Process -Id -IncludeUserName []
Get-Process -InputObject [-Module] [-FileVersionInfo] []
Get-Process -InputObject -IncludeUserName []

Описание

Командлет Get-Process получает процессы на локальном компьютере.

Без параметров этот командлет получает все процессы на локальном компьютере. Можно также указать конкретный процесс по имени процесса или идентификатору процесса (PID) или передать объект процесса через конвейер в этот командлет.

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

Примеры

Пример 1. Получение списка всех активных процессов на локальном компьютере

Get-Process

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

Пример 2. Получение всех доступных данных об одном или нескольких процессах

Get-Process winword, explorer | Format-List *

Эта команда возвращает все доступные данные о процессах Winword и проводника на компьютере. Он использует параметр Name для указания процессов, но не указывает необязательное имя параметра. Оператор конвейера передает | данные Format-List командлету, который отображает все доступные свойства ( * ) объектов winword и Обозреватель процесса.

Процессы также можно определить по идентификаторам (PID). Например, Get-Process -Id 664, 2060 .

Пример 3. Получение всех процессов с рабочим набором больше указанного размера

Get-Process | Where-Object

Эта команда возвращает все процессы, размер рабочего набора которых превышает 20 МБ. Он использует Get-Process командлет для получения всех выполняемых процессов. Оператор конвейера ( | ) передает объекты Where-Object процесса командлету, который выбирает только объект со значением, превышающим 20 000 000 байт для свойства WorkingSet .

WorkingSet — это одно из многих свойств объектов процесса. Чтобы просмотреть все свойства, введите Get-Process | Get-Member . По умолчанию значения всех свойств объема указываются в байтах, несмотря на то что по умолчанию отображаются они отображаются в килобайтах и мегабайтах.

Пример 4. Перечисление процессов на компьютере в группах на основе приоритета

$A = Get-Process $A | Get-Process | Format-Table -View priority

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

Вторая команда передает объект Process , хранящийся в $A переменной Get-Process командлету, а затем Format-Table командлету, который форматирует процессы с помощью представления "Приоритет ".

Представление приоритета и другие представления определяются в файлах формата PS1XML в домашнем каталоге PowerShell ( $pshome ).

Пример 5. Добавление свойства в стандартное отображение выходных данных Get-Process

Get-Process pwsh | Format-Table ` @>, @>, @>, @>, @>>, Id, ProcessName, StartTime -AutoSize NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName StartTime ------ ----- ----- ----- ------ -- ----------- --------- 143 239540 259384 2366162 22.73 12720 pwsh 12/5/2022 3:21:51 PM 114 61776 104588 2366127 11.45 18336 pwsh 12/5/2022 7:30:53 AM 156 77924 82060 2366185 10.47 18812 pwsh 12/5/2022 7:30:52 AM 85 48216 115192 2366074 1.14 24428 pwsh 12/8/2022 9:14:15 AM

В этом примере извлекаются процессы с локального компьютера. Извлеченные процессы передаются Format-Table в команду, которая добавляет свойство StartTime в стандартное Get-Process выводное отображение.

Пример 6. Получение сведений о версии для процесса

Get-Process pwsh -FileVersionInfo ProductVersion FileVersion FileName -------------- ----------- -------- 6.1.2 6.1.2 C:\Program Files\PowerShell\6\pwsh.exe

Эта команда использует параметр FileVersionInfo для получения сведений о версии файла pwsh.exe , который является основным модулем для процесса PowerShell.

Чтобы выполнить эту команду с процессами, которые не принадлежат в Windows Vista и более поздних версиях Windows, необходимо открыть PowerShell с помощью параметра "Запуск от имени администратора ".

Пример 7. Получение модулей, загруженных с помощью указанного процесса

Get-Process SQL* -Module

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

Чтобы запустить эту команду в Windows Vista и более поздних версиях Windows с процессами, которыми вы не владеете, необходимо запустить PowerShell с параметром запуска от имени администратора .

Пример 8. Поиск владельца процесса

Get-Process pwsh -IncludeUserName Handles WS(K) CPU(s) Id UserName ProcessName ------- ----- ------ -- -------- ----------- 782 132080 2.08 2188 DOMAIN01\user01 pwsh

В этом примере показано, как найти владельца процесса. В Windows параметр IncludeUserName требует повышенных прав пользователя (запуск от имени Администратор istrator). Выходные данные показывают, что владелец Domain01\user01 .

Пример 9. Используйте автоматическую переменную для идентификации процесса, в котором размещен текущий сеанс.

Get-Process pwsh NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName ------ ----- ----- ------ -- -- ----------- 83 96.21 105.95 4.33 1192 10 pwsh 79 83.81 117.61 2.16 10580 10 pwsh Get-Process -Id $PID NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName ------ ----- ----- ------ -- -- ----------- 83 96.21 77.53 4.39 1192 10 pwsh

Эти команды показывают, как использовать $PID автоматическую переменную для идентификации процесса, в котором размещается текущий сеанс PowerShell. Этот метод можно использовать для различения процесса узла от других процессов PowerShell, которые могут потребоваться остановить или закрыть.

Первая команда получает все процессы PowerShell в текущем сеансе.

Вторая команда получает процесс PowerShell, на котором размещен текущий сеанс.

Пример 10. Получение всех процессов с заголовком главного окна и их отображение в таблице

Get-Process | Where-Object | Format-Table Id, Name, mainWindowtitle -AutoSize

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

Свойство mainWindowTitle является лишь одним из многих полезных свойств возвращаемого объекта Get-Process Process. Чтобы просмотреть все свойства, передайте результаты Get-Process команды командлету Get-Member Get-Process | Get-Member .

Параметры

-FileVersionInfo

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

В Windows Vista и более поздних версиях Windows необходимо открыть PowerShell с параметром "Запуск от имени администратора ", чтобы использовать этот параметр в процессах, которые не принадлежат.

Использование этого параметра эквивалентно получению свойства MainModule.FileVersionInfo каждого объекта процесса. При использовании этого параметра Get-Process возвращает объект FileVersionInfo System.Diagnostics.FileVersionInfo, а не объект процесса. Таким образом, вы не можете передать выходные данные команды командлету, который ожидает объект процесса, например Stop-Process .

Type: SwitchParameter
Aliases: FV, FVI
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Id

Указывает один или несколько процессов по идентификатору процесса (PID). При указании нескольких идентификаторов разделяйте их запятыми. Чтобы найти ИДЕНТИФИКАТОР процесса, введите Get-Process .

Type: Int32 [ ]
Aliases: PID
Position: Named
Default value: None
Required: True
Accept pipeline input: True
Accept wildcard characters: False

-IncludeUserName

Указывает, что значение UserName объекта Process возвращается с результатами команды.

Type: SwitchParameter
Position: Named
Default value: None
Required: True
Accept pipeline input: False
Accept wildcard characters: False

-InputObject

Указывает один или несколько объектов процесса. Введите переменную, которая содержит объекты, или команду или выражение, которое возвращает объекты.

Type: Process [ ]
Position: Named
Default value: None
Required: True
Accept pipeline input: True
Accept wildcard characters: False

-Module

Указывает, что этот командлет получает модули, загруженные процессами.

В Windows Vista и более поздних версиях Windows необходимо открыть PowerShell с параметром "Запуск от имени администратора ", чтобы использовать этот параметр в процессах, которые не принадлежат.

Этот параметр эквивалентен получению свойства Modules каждого объекта процесса. При использовании этого параметра этот командлет возвращает объект ProcessModule System.Diagnostics.ProcessModule, а не объект процесса. Таким образом, вы не можете передать выходные данные команды командлету, который ожидает объект процесса, например Stop-Process .

При использовании параметров Module и FileVersionInfo в одной команде этот командлет возвращает объект FileVersionInfo с информацией о версии файла всех модулей.

Type: SwitchParameter
Position: Named
Default value: False
Required: False
Accept pipeline input: False
Accept wildcard characters: False

-Name

Указывает один или несколько процессов по имени процесса. Можно ввести несколько имен процессов (разделенных запятыми) и использовать подстановочные знаки. Имя параметра ( Name ) является необязательным.

Type: String [ ]
Aliases: ProcessName
Position: 0
Default value: None
Required: False
Accept pipeline input: True
Accept wildcard characters: True

Входные данные

Объект процесса можно передать в этот командлет.

Выходные данные

По умолчанию этот командлет возвращает объект System.Diagnostics.Process .

При использовании параметра FileVersionInfo этот командлет возвращает объект FileVersionInfo .

При использовании параметра Module без параметра FileVersionInfo этот командлет возвращает объект ProcessModule .

Примечания

PowerShell включает следующие псевдонимы для Get-Process :

На компьютерах с 64-разрядной версией Windows 64-разрядная версия PowerShell получает только 64-разрядные модули процессов, а 32-разрядная версия PowerShell получает только 32-разрядные модули процессов.

Чтобы получить сведения о процессе с удаленного компьютера, используйте Invoke-Command командлет. Дополнительные сведения см. в разделе Invoke-Command.

Свойства и методы инструментария управления Windows (WMI Win32_Process) можно использовать в PowerShell. Дополнительные сведения см. в Win32_Process .

По умолчанию процесс отображается как таблица, которая содержит следующие столбцы. Описание всех свойств объектов процесса см. в разделе "Свойства процесса".

  • Обрабатывает: количество открытых дескрипторов.
  • NPM(K): объем нестраничной памяти, используемой процессом в килобайтах.
  • PM(K): объем страницы памяти, используемой процессом в килобайтах.
  • WS(K): размер рабочего набора процесса в килобайтах. Рабочий набор состоит из страниц памяти, на которые недавно ссылался процесс.
  • VM(M): объем виртуальной памяти, используемой процессом в мегабайтах. Виртуальная память используется для хранения файлов подкачки на диске.
  • ЦП: время процессора, используемое для всех процессоров в секундах.
  • Идентификатор: идентификатор процесса (PID) процесса процесса.
  • ProcessName: имя процесса. Описание понятий, связанных с процессами, см. в центре справки и поддержки, а также в справке диспетчера задач.

Вы также можете использовать встроенные альтернативные представления процессов, доступных в Format-Table таких процессах, как StartTime и Priority, и вы можете создавать собственные представления.

Связанные ссылки

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

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

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