Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2011, 13:35   #1
saylar_06
Пользователь
 
Регистрация: 01.12.2009
Сообщений: 46
По умолчанию [Вопрос]Как найти процесс приложения зная его заголовок?

Собственно вопрос думаю понятен, но для наглядно отпишусь подробнее...

Нашел я окно через FindWindow(); теперь как мне найти его процесс зная его заголовок?

Нашел такую функцию Function GetWindowThreadProcessId(hwnd:HWND; var dwprocessId:Cardinal):Cardinal;

но многие пишут что:
Цитата:
По этой функции у меня находит какой-то поток данного процесса, а можно ли выйти на сам процесс через этот поток?
так как мне найти имя_процесса.exe зная его заголовок?
saylar_06 вне форума Ответить с цитированием
Старый 10.07.2011, 14:02   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

вообщето процессы это и есть потоки. Каждый процесс это поток. По этому GetWindowThreadProcessId, почти всегда вернёт тебе id основного потока к оторому прнадлежит окно. За исключением того случая, что окно будет динамически созданно в другом потоке. Тогда придётся повозится... крутить список процессов, искать к какому процессу принадлежит поток, чей id был вернут функцией.
Человек_Борща вне форума Ответить с цитированием
Старый 10.07.2011, 14:52   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
вообщето процессы это и есть потоки.
ни в коем случае.
Цитата:
По этому GetWindowThreadProcessId, почти всегда вернёт тебе id основного потока к оторому прнадлежит окно.
читаем описание функции, а не гадаем на кофейной гуще:
GetWindowThreadProcessId Function
про второй параметр функции.
Цитата:
lpdwProcessId [out, optional]

Type: LPDWORD

A pointer to a variable that receives the process identifier. If this parameter is not NULL, GetWindowThreadProcessId copies the identifier of the process to the variable; otherwise, it does not.
потом имея ид, вы можете через tlHelp32 узнать его имя.

так что ТС, не читайте что пишут многие, а читайте сначало оффициальную документацию по функции.

применять так:
Код:
var PID:DWORD;
begin
 GetWindowThreadProcessId(<хендл окна>,PID);
в PID будет идентификатор процесса, по которому уже можно работать с процессом.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2011, 15:52   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Код:
ни в коем случае.
Разве у процесса нет основного VCL потока?

И тот же пример:
Что вернёт функция если окно будет создано в том же TThread?

Вернёт id потока или процесса к которому принадлежит поток?
Человек_Борща вне форума Ответить с цитированием
Старый 10.07.2011, 15:59   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
нет основного VCL потока?
VCL может и не быть
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.07.2011, 16:03   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

С консольками да=) Но в случае ТС это исключено. Берёт же он hwnd откуда-то
Человек_Борща вне форума Ответить с цитированием
Старый 10.07.2011, 16:12   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
С консольками да=)
Ошибаешся
Цитата:
Берёт же он hwnd откуда-то
Я тебя подкалываю - VCL не все ЯВУ используют
А правильный ответ ему уже был дан.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.07.2011, 17:57   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Что вернёт функция если окно будет создано в том же TThread?
вернет id данного потока.
так как она всегда возвращает id потока, в котором создано окно.
а вот через второй параметр вернет id процесса.
Цитата:
Разве у процесса нет основного VCL потока?
не существует понятия VCL поток. любой поток может иметь окна.(это в Делфи решено что первичный поток должен владеть окнами)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.07.2011, 18:43   #9
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

спасибо, за ещё немного пищи для ума. +++
Человек_Борща вне форума Ответить с цитированием
Старый 10.07.2011, 21:17   #10
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Код:
uses THelp32;
...
procedure TForm1.Button1Click(Sender: TObject);
var
 hSnap:THandle;
 pe:TProcessEntry32;
 pid: DWORD;
begin
Plist.Clear;
pe.dwSize:=SizeOf(pe);
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 If Process32First(hSnap,pe) then
   While Process32Next(hSnap,pe) do
      begin
           if ExtractFileName(pe.szExeFile)='ваш_экзешник.exe' then
          begin
            pid:=pe.th32ProcessID;
//ваши действа
          end;
      end;
)Игнат( вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как убить процесс зная его имя? One.Love Win Api 14 18.02.2012 14:31
найти файл зная лишь часть его имени DeDoK Общие вопросы Delphi 3 16.12.2010 21:06
Как найти название класса процеса зная его handle? Dazz Win Api 3 16.03.2010 11:35
Как зная хендл окна закрыть его SeRhy Общие вопросы Delphi 1 24.08.2008 11:02
Как завершить процесс, зная его имя Никки Win Api 6 14.01.2008 14:04