Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
#1

Получить HWND по pid - C++ Builder

08.02.2015, 14:20. Просмотров 2011. Ответов 23
Метки нет (Все метки)

Всем доброго времени суток. Кто в курсе как можно по pid получить HWND, делаю так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HWND Window(int id)
{
HWND hwnd=FindWindow(NULL,NULL);//В справке написано что при таком варианте переберёт все окна
// Не выходим из цикла, пока не найдем активное окно
  while (hwnd != 0)
  {
  if (GetProcessId(hwnd)==id)
    {
    ShowMessage(id);
    return hwnd;
    }
  hwnd=GetNextWindow(hwnd,GW_HWNDNEXT);//Вот тут не нашёл функции типа FindWindowNext
  }
  return 0;
}
Вот собственно и вопрос, как сделать поиск следующего окна?
http://www.cyberforum.ru/cpp-builder/thread460564.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2015, 14:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Получить HWND по pid (C++ Builder):

HWND в Label
Пишу такой код: HWND H; H = FindWindow("TForm1", "Test"); if (H == NULL) {...

Узнать PID процесса
Так я узнаю PID процесса, - unsigned long PIDByName(AnsiString AProcessName)...

HWND и отправка им сообщений.
Здравствуйте, я начал изучать язык C++. А также начал обучение для работы с C++...

Глобально задать HWND
Здравствуйте! Я работаю в среде Builder 6. Меня интересует ответ на вопрос: Как...

Convert void to HWND
Ошибка:E2034 Cannot convert 'void *' to 'HWND__ *' Понимаю что вопрос...

23
demmax2004
116 / 138 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
08.02.2015, 16:56 #21
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
struct EnumData {
    DWORD dwProcessId;
    HWND hWnd;
};
 
BOOL CALLBACK EnumProc(HWND hWnd, LPARAM lParam)
{
 
    EnumData& ed = *(EnumData *)lParam;
    DWORD dwProcessId = 0x0;
 
    GetWindowThreadProcessId(hWnd, &dwProcessId);
 
    if (ed.dwProcessId == dwProcessId)
    {
        ed.hWnd = hWnd;
        ::SetLastError(ERROR_SUCCESS);
        return FALSE;
    }
 
    return TRUE;
}
 
HWND FindWindowFromProcessId(DWORD dwProcessId)
{
    EnumData ed = {dwProcessId};
    if (!EnumWindows(EnumProc, (LPARAM)&ed) && (GetLastError() == ERROR_SUCCESS))
    {
        return ed.hWnd;
    }
 
    return NULL;
}
 
 
HWND FindWindowFromProcess(HANDLE hProcess)
{
    return FindWindowFromProcessId(GetProcessId(hProcess));
}
 
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
    ::SetWindowText(FindWindowFromProcessId(4252), "11111111");
}
//---------------------------------------------------------------------------
0
Enno
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
08.02.2015, 16:58 #22
Чувак, ты hwnd после возврата из "FindWindowFromProcessId(6296);" проверяй, может там фигня какая, инвалидный валюе.
0
DrSMERTb
60 / 36 / 10
Регистрация: 12.11.2010
Сообщений: 820
08.02.2015, 17:15  [ТС] #23
мдя.. вёрнусь к первоначальному. Как можно получить список окон с известным классом (допустим один процесс запущен несколько раз)

Добавлено через 5 минут
Всё сделал всем спасиб.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HWND Window(int id)
{
unsigned long i;
HWND hwnd=FindWindow(L"Мой класс",NULL);//В справке написано что при таком варианте переберёт все окна
// Не выходим из цикла, пока не найдем активное окно
  while (hwnd != 0)
  {
  GetWindowThreadProcessId(hwnd,&i);
  if (i==id)
    {
    ShowMessage(id);
    return hwnd;
    }
  hwnd=GetNextWindow(hwnd,GW_HWNDNEXT);//Вот тут не нашёл функции типа FindWindowNext
  }
  return 0;
}
0
SatanaXIII
Супер-модератор
Эксперт С++
5765 / 2763 / 374
Регистрация: 01.11.2011
Сообщений: 6,717
Завершенные тесты: 1
09.02.2015, 11:54 #24
DrSMERTb, вам не кажется, что уместнее задавать подобные вопросы в разделе по WinApi? Просто совет.
1
09.02.2015, 11:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2015, 11:54
Привет! Вот еще темы с решениями:

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

PostMessage(hWnd,WM_KEYDOWN,VK_F5,0)
Добрый день подскажите пож. как передать в другое приложение произвольный...

Узнать имя процесса имея HWND
Возник такой вопрос: как можно узнать имя процесса, имея его HWND? Добавлено...

Поясните разницу между HANDLE и HWND
Здравствуйте! Ребята подскажите по такому вопросу. В чём разница между...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru