4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330

Узнать по Handle ProcessId

09.09.2015, 17:40. Показов 9755. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Надо по handle узнать id процесса! В инете поискал, понял что это как-то делается с помощью
Delphi
1
GetWindowThreadProcessId
Но как это делать именно на Delphi, я не нашёл!
Код по которому я узнаю Handle процесса:
Сначала в private:
Delphi
1
procedure ShowHwndAndClassName(CrPos: TPoint) ;
Сам код(функция):
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.ShowHwndAndClassName(CrPos: TPoint) ;
var
   hWnd: THandle;
   aName,
   Text : array [0..255] of char;
begin
   hWnd := WindowFromPoint(CrPos) ;
   Label3.Caption := 'Handle : ' + IntToStr(hWnd) ;
 
   if boolean(GetClassName(hWnd, aName, 256)) then
     Label5.Caption := 'Класс : ' + string(aName)
   else
     Label5.Caption := 'ClassName : not found';
   SendMessage(hWnd, WM_GETTEXT,
               SizeOf(Text), integer(@Text)) ;
   Label7.Caption := 'Заголовок :' + Text;
end;
hWnd : Наш заветный handle по которому нужно узнать Id процесса!

Код(таймер):
Delphi
1
2
3
4
5
6
7
procedure TForm1.Timer1Timer(Sender: TObject);
var
   rPos: TPoint;
begin
   if boolean(GetCursorPos(rPos))
   then ShowHwndAndClassName(rPos) ;
end;
Мне нужно не объяснение как она работает и т.п. а пример(КОД)!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.09.2015, 17:40
Ответы с готовыми решениями:

Узнать Handle по файлу
Доброго времени суток уважаемые! Суть проблемы только частично отражена в заголовке темы поэтому прошу не отсылать меня на Яндекс и...

Как узнать handle файла....???
Всем привет! Подскажите пожалуйста, как узнать handle файла? Только не нужно GetModuleHandle. Так как это функция узнает дескриптор...

Как узнать handle окна к которому подключена dll
Ставлю глобальных хук с помощью dll ( SetWindowsHookEx(WH_CBT, @WindowProc, HInstance, 0) ), мне нужно узнать handle окна к которому эта...

9
пофигист широкого профиля
4761 / 3197 / 861
Регистрация: 15.07.2013
Сообщений: 18,553
09.09.2015, 17:47
Цитата Сообщение от Zagadohnik37 Посмотреть сообщение
Код по которому я узнаю Handle процесса:
Цитата Сообщение от Zagadohnik37 Посмотреть сообщение
hWnd : Наш заветный handle по которому нужно узнать Id процесса!
Это ни разу не handle процесса. Это handle окна.
0
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
09.09.2015, 17:52  [ТС]
Ок, значит я нуб в этом...
Хотя-бы по этому handle можно узнать id процесса? Если нет, то как узнать id процесса на котором находится курсор!?
Просто в инете я нашёл только такой код!
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
09.09.2015, 20:29
Цитата Сообщение от Zagadohnik37 Посмотреть сообщение
по этому handle можно узнать id процесса?
Для этого как раз и предназначена ф-ция GetWindowThreadProcessId

Цитата Сообщение от Zagadohnik37 Посмотреть сообщение
процесса на котором находится курсор
Курсор он на окне, а не на процессе.
Окно принадлежит нити, нить принадлежит процессу.

Нет процесса - нет нити.
Нет нити - нет окна.

Вот такая суровая сермяжная правда жизни)
0
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
10.09.2015, 16:44  [ТС]
Я это уже понял.
Объясните мне как работает эта долбаная функция GetWindowThreadProcessId в Delphi!
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
10.09.2015, 17:54
Zagadohnik37,

Функция GetWindowThreadProcessId возвращает обратно идентификатор потока, который создал определяемое окно, но необязательно идентификатор процесса, который создал это окно.

Синтаксис

Delphi
1
2
3
4
5
6
DWORD GetWindowThreadProcessId(
 
 HWND hWnd,            // дескриптор окна
PDWORD lpdwProcessId  // адрес переменной для 
                      // идентификатора процесса
);
Параметры

hWnd

[in] Дескриптор окна.

lpdwProcessId

[out] Указатель на переменную, которая принимает идентификатор процесса. Если этот параметр - не ПУСТО (NULL), функция GetWindowThreadProcessId копирует идентификатор процесса в переменную; иначе, она этого не делает.

Возвращаемые значения

Возвращаемое значение - идентификатор потока, который создал окно.

Добавлено через 7 минут
P.S. Получение дескриптора процесса любого окна, по заголовку этого окна
Delphi
1
2
3
4
5
6
7
8
9
function TakeProcessID(WindowTitle: string): Integer;
var
  WH: THandle;
begin
  result := 0;
  WH := FindWindow(nil, pchar(WindowTitle));
  if WH <> 0 then
    GetWindowThreadProcessID(WH, @Result);
end;
0
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
10.09.2015, 20:21  [ТС]
Короче я попробовал, ничего не понял!
Скажите можно по этому коду:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.ShowHwndAndClassName(CrPos: TPoint) ;
var
   hWnd: THandle;
   aName,
   Text : array [0..255] of char;
begin
   hWnd := WindowFromPoint(CrPos) ;
   Label3.Caption := 'Handle : ' + IntToStr(hWnd) ;
 
   if boolean(GetClassName(hWnd, aName, 256)) then
     Label5.Caption := 'Класс : ' + string(aName)
   else
     Label5.Caption := 'ClassName : not found';
   SendMessage(hWnd, WM_GETTEXT,
               SizeOf(Text), integer(@Text)) ;
   Label7.Caption := 'Заголовок :' + Text;
end;
Сделать так что-бы в label2 выводился id процесса?! А не только заголовок, класс, handle?!!
0
 Аватар для VladWH
243 / 193 / 94
Регистрация: 01.05.2015
Сообщений: 732
10.09.2015, 21:39
Цитата Сообщение от Zagadohnik37 Посмотреть сообщение
Скажите можно по этому коду:
........................................ ........................................ ........................
Сделать так что-бы в label2 выводился id процесса?! А не только заголовок, класс, handle?!!
можно
Delphi
1
2
3
4
.....................
GetWindowThreadProcessID(hWnd, @PID);
label.Caption := IntToStr( PID );
.....................
Цитата Сообщение от Zagadohnik37 Посмотреть сообщение
Короче я попробовал, ничего не понял!
и что тут не понятно?
0
4 / 4 / 1
Регистрация: 23.01.2015
Сообщений: 330
11.09.2015, 19:26  [ТС]
Всё работает збс!
Теперь ещё 1 вопрос: Как по PID узнать путь к файлу я нашёл а вот как по PID узнать процесс я не нашёл!
Как пo PID узнать имя/id процесса ?
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
11.09.2015, 19:57
Цитата Сообщение от Zagadohnik37 Посмотреть сообщение
Как пo PID узнать ..id процесса ?
Ты не поверишь, но PID и есть id процесса, ибо PID = Process ID
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.09.2015, 19:57
Помогаю со студенческими работами здесь

Как дочернему окну в MDI приложении узнать свой Handle?
Здравствуйте. В MDI приложении есть 2 формы: Form1 - fsMDIForm Form2 - fsMDIChild Открываю множество окон Form2 из главной...

Узнать запущено ли уже приложение, если да то узнать его handle
Если приложение уже запущено нужно поучить его handle и передать в него данные Вопрос. С помощью Mutex можно определить запущено ли...

Узнать права handle
Как узнать права handle'a? Например, открываю его с правами PROCESS_QUERY_LIMITED_INFORMATION: HANDLE hProcess =...

Как узнать Handle контрола
Подскажите как в Аксесе узнать хендл контрола(текстовое поле).Это нужно для того чтобы в МЕМО поле ограничить ввод 400 знаками.Чтобы юзер...

Как узнать Handle окна
Суть в названии темы. Как достать handle окна wpf, чтобы передать его в WinAPI функцию ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru