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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2012, 20:40   #1
Berlioz
Изучающий C и ASM
Пользователь
 
Регистрация: 25.05.2012
Сообщений: 89
Вопрос hWnd по имени процесса

Всем привет! Пишу шуточную программу в целях образования по изменению заголовков окон.

Проблема в следующем: не могу получить hWnd процесса по его имени. К примеру, запущен процесс notepad.exe, надо узнать его hWnd.
Google спрашивал. Выдавал в основном FindWindow, но проблема в том, что я заранее не знаю, какой заголовок будет у окна.

Как можно решить эту проблему?
Berlioz вне форума Ответить с цитированием
Старый 09.08.2012, 20:53   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

первое, получаем из списка процессов его PID.
а далее EnumWindows+GetWindowThreadProcessI d чтоб найти нужное окно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.08.2012, 22:53   #3
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Berlioz Посмотреть сообщение
не могу получить hWnd процесса по его имени.
у процесса нет такого свойства.
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Старый 10.08.2012, 16:02   #4
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию

Цитата:
Сообщение от Rock-n-Rolla Посмотреть сообщение
у процесса нет такого свойства.
Есть. hProcess и есть тот самый дескриптор. Почитай про PROCESS_INFORMATION
Цитата:
получить hWnd процесса по его имени.
Код:
PROCESSENTRY32 p = {sizeof(PROCESSENTRY32)};
bool f = Process32First(h, &p);
if(f)
{
           HANDLE hPocess;
	TCHAR info[MAX_PATH] = TEXT("Имя процесса");
	do
	{
		hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, p.th32ProcessID);
		if(<Сравниваешь p.szExeFile и info>)
                                <hProcess  и есть этот дескриптор, делаешь, что тебе нужно>
		f = Process32Next(h, &p);
	}
	while(f);
}
Как-то так.
rmv240899 вне форума Ответить с цитированием
Старый 10.08.2012, 16:06   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Есть. hProcess и есть тот самый дескриптор.
HWND вообще это Window Handle.
а hProcess не имеет отношения к окнам, чуть внимательности к тому что пишет ТС.
Цитата:
if(<Сравниваешь p.szExeFile и info>)
<hProcess и есть этот дескриптор, делаешь, что тебе нужно>
код ужас, где CloseHandle?
зачем сначало открывать процесс, а потом уже сравнивать имя?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.08.2012, 16:32   #6
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
HWND вообще это Window Handle.
а hProcess не имеет отношения к окнам, чуть внимательности к тому что пишет ТС.
код ужас, где CloseHandle?
зачем сначало открывать процесс, а потом уже сравнивать имя?
Во-первых, ТС написал hWnd процесса. То есть имел в виду дескриптор процесса. Во-вторых, код очень приблизительный, взят с потолка. Пусть ТС, если возмет его, исправит и дополнит его при необходимости. Я показала, каков может быть вариант примерной структуры программы.
rmv240899 вне форума Ответить с цитированием
Старый 10.08.2012, 16:36   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

То есть вы прочитали только эту фразу?
а как же:
Цитата:
по изменению заголовков окон.
Цитата:
Выдавал в основном FindWindow, но проблема в том, что я заранее не знаю, какой заголовок будет у окна.
Цитата:
То есть имел в виду дескриптор процесса.
на практике нет.
хотя фиг его знает.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.08.2012, 09:00   #8
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

rmv240899
>если возмет его,
исправит и дополнит его
>Я показала
дальше не читал
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 14.08.2012, 18:12   #9
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

Цитата:
Сообщение от rmv240899 Посмотреть сообщение
Во-первых, ТС написал hWnd процесса.
это всё равно что написать "сухая вода". hWnd и процесс - это заведомо несовместимые понятия
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Старый 14.08.2012, 20:41   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Ну не знаю насчет сухой воды а вот сухой лед есть... И даже если HWND не является свойством процесса, то манипулятор процеса есть свойство окна
waleri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск процесса в потоке, завершение процесса в указааноое время, Дайте совет Человек_Борща Общие вопросы Delphi 3 29.08.2010 12:58
Вычисление имени процесса DVS_Chita Win Api 2 02.05.2010 17:09
Получение имени процесса по его ID Johnson Общие вопросы Delphi 6 07.11.2009 21:55
Получение адресса по имени процесса (Delphi) dyonysos Помощь студентам 5 14.09.2009 16:55