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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2015, 17:48   #1
flesyyykkk
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 21
По умолчанию Найти handle окна по PID

Приветствую!
Запускаю несколько одинаковых процесс при помощи CreateProcess, сохраняю их PID.

Нужно найти Handle основного окна для каждого процесса.
Помогите!

GetWindowThreadProcessId не предлогать, возвращает id потока, а не процесса!

Последний раз редактировалось flesyyykkk; 26.04.2015 в 18:26.
flesyyykkk вне форума Ответить с цитированием
Старый 26.04.2015, 18:07   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

EnumThreadWindows тоже не предлагать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2015, 18:21   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

GetWindowThreadID - это ATL
Раз пользуемся такими Фреймворками, тогда наверно можно GetWindowProcessID использовать.

А так чистом WINAPI функция называется GetWindowThreadProcessId
waleri вне форума Ответить с цитированием
Старый 26.04.2015, 18:27   #4
flesyyykkk
Пользователь
 
Регистрация: 31.07.2012
Сообщений: 21
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
GetWindowThreadID - это ATL
Раз пользуемся такими Фреймворками, тогда наверно можно GetWindowProcessID использовать.

А так чистом WINAPI функция называется GetWindowThreadProcessId
Естественно имелось ввиду последнее, просто уже запутался, перебрал кучу примеров из гугл и везде этот GetWindowThreadProcessId. Но он в упор не совпадает с моим ProcessInfo.dwProcessId.

Код:

procedure TForm1.Button1Click(Sender: TObject);
begin
   CreateProcess(PChar(ExePath), nil, nil, nil, true,
                NORMAL_PRIORITY_CLASS, nil,
                PChar(ExtractFilePath(ExePath)),
                StartUpInfo, ProcessInfo);
   PID := ProcessInfo.dwProcessId;

   EnumWindows(@EnumWindowsProc, 0);
end;

function EnumWindowsProc(Wnd: DWord; Data: Pointer): Bool; stdcall;
var
 p : DWord;
begin
 Result := true;
 GetWindowThreadProcessId(Wnd, p);
 if p = PID then ShowMessage('ok');
end;
не работает. win7 x64

В общем с блокнотом работает, а с моей программой нет.

Какие варианты есть еще? Программа которую запускаю судя по всему на java написана...

Последний раз редактировалось flesyyykkk; 26.04.2015 в 19:22.
flesyyykkk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти Handle окна Paint OmegaBerkut Общие вопросы Delphi 3 06.06.2013 19:13
Получить Handle или PID из процесса в котором dll... rangel Win Api 2 09.02.2012 12:44
Найти Handle главного Thread программы по HWND\PID окна ZaRDaK Win Api 3 20.12.2009 19:10
Как узнать handle окна имея handle обного из его компонентов SeRhy Win Api 2 18.10.2009 19:31
Как имея handle окна узнать handle edit-a который находится в етом окне SeRhy Общие вопросы Delphi 1 20.07.2008 13:48