Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/35: Рейтинг темы: голосов - 35, средняя оценка - 4.94
60 / 57 / 8
Регистрация: 22.07.2011
Сообщений: 436

Найти окно, если известен ID и хэндл процесса

14.10.2011, 22:40. Показов 7254. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли найти окно, принадлежащее определённому процессу (хэндл и ID процесса известны)?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2011, 22:40
Ответы с готовыми решениями:

Хэндл процесса по названию
Всем Доброго Времени Суток! Нигде не могу найти информацию по этому поводу. Я запустил программу через ShellExecute и нужно поймать хэндл...

Закрыто ли окно, если известен хэндл
Собственно вопрос прост: Зная хэндл окна Wnd := GetForegroundWindow(); GetWindowText(Wnd, buff, sizeof(buff)); ...

Получить ID процесса если известно его хэндл, название окна или название процесса
а как получить ID процесса если известно его хэндл, название окна или название процесса?

4
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
15.10.2011, 14:47
можно.
если на вскидку, то попробуйте EnumWindows,если не подойдет, то надо будет подумать)
0
60 / 57 / 8
Регистрация: 22.07.2011
Сообщений: 436
15.10.2011, 17:41  [ТС]
Чёт я недогоняю, как ей пользоваться. Можно пример?
0
Android Programmer
141 / 142 / 10
Регистрация: 08.12.2010
Сообщений: 421
15.10.2011, 19:11
EnumWindows перебирает все окна системы, видимые и не видимые.
C++
1
2
3
4
5
6
7
8
9
10
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
        DWORD pid;
        GetWindowThreadProcessID(HWND hWnd, &pid)
    if(pid==yourPid)
            //вот оно наше окно
    return TRUE;
}
        //вызываем там где нужно.
    EnumWindows(EnumWindowsProc,NULL); //вместо NULL можно передать PID процесса, окно которого ищем, тоггда оно будет передано в lparam EnumWindowsProc.
2
60 / 57 / 8
Регистрация: 22.07.2011
Сообщений: 436
16.10.2011, 16:49  [ТС]
Блин, я ошибся. Одна из кнопок искала окно с помощью FindWindow и находила. Как только поправил перестала прога искать окно.
И кстати. Разве функция не должна возвращать FALSE если окно найдено?

Добавлено через 13 минут
У меня получилось так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    DWORD pid;
        GetWindowThreadProcessId(hwnd, &pid);
        if(pid == lParam) //В lParam передаётся PID моего процесса
        {
         MessageBox(NULL, "Найдено", "", MB_OK);
         WindowHandle = hwnd;
        return FALSE;
        }
        else
        {
        return TRUE;
        }
}
Он выводит MessageBox, "найдено", но в WindowHandle записывается не тот хэндл, который нужен. в чём проблема?

Добавлено через 1 час 35 минут
в spy++ нашёл, что у этого процесса есть ещё одно диалоговое поверхностное окно, и моя прога находит его.

Добавлено через 28 минут
Ура, получилось!
Проблема заключалась в том, что у моего процесса есть не 1 поверхностное окно, а целых 4 и я находил первое(оно не являлось нужным). Попробовал искать по классу окна и получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    DWORD pid;
    char ClName[50];
        GetWindowThreadProcessId(hwnd, &pid);
        if(pid == lParam)
        {
        GetClassName(hwnd, ClName, sizeof(ClName));
        if(!strcmp(ClName, CLASSNAME)) //Где CLASSNAME - класс окна, которое ищем
        {
        WindowHandle = hwnd;
        return FALSE;
         }
        }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2011, 16:49
Помогаю со студенческими работами здесь

Есть процесс A и дочерний процесс B, который находит хэндл родительского процесса A. И этот хэндл в разных случаях РАЗНЫЙ! Почему?
Друзья! Вот код A.exe, суть которого просто стать родительским для B.exe и висеть в системе. #include <stdio.h> #include...

Чтение памяти другого процесса по таймеру: нужно ли закрывать хэндл процесса?
В моём варианте работает так: По таймеру (0,1 сек) определяю ID процесса по ехе-шнику, получаю хэндл процесса(открываю процесс) ...

Найти число, если известен результат вычислений с ним
При делении на 7 двойной суммы неизвестного числа и при делении на 8 в части получили 4, а в нацело число 2. Найти неизвестное число ...

Найти число, если известен результат вычислений с ним
Кароче есть вот такая задача: С оператором While она решалась так: #include <stdio.h> #include <conio.h> #include...

Как найти экземпляр класса в коллекции, если известен ClientPCId?
имеется коллекция ObservableCollection<Task> класс Task: public partial class Task { #region Primitive Properties ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru