Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/120: Рейтинг темы: голосов - 120, средняя оценка - 4.91
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 202
1

Получить HWND окна

22.04.2015, 19:20. Показов 24345. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача такова - загрузить динамическую dll в чужое приложение и получить HWND окна в которое загрузится dll.
dll я загрузил, проверил месаджем, а как получить теперь HWND окна?
При атаче dll нам будет известно только hinstace, может как - нибудь можно узнать по ID процесса?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2015, 19:20
Ответы с готовыми решениями:

Найти HWND окна, зная HWND окна, породившего его
Здравствуйте! Имеется основное окно "А". Это окно создаёт новое недочернее окно "Б". Необходимо...

Получить hwnd окна
Допустим я нахожу hwnd главного окна по названию его класса HWND...

Получить hwnd окна в многопользовательской системе
В win 2003. Как получить Hwnd окна другого пользователя. Для своего рабочего стола понятно. А вот...

Получить HWND активного дочернего окна
Дайте минимальный проверочный код который даст HWND активного дочернего окна. Если кто-то скажет...

20
55 / 55 / 63
Регистрация: 18.03.2014
Сообщений: 386
22.04.2015, 19:48 2
Можно узнать по имени окна и класса
1
2 / 2 / 0
Регистрация: 31.10.2013
Сообщений: 17
22.04.2015, 20:36 3
HWND hwnd = ::FindWindow(_T("тут название твоего окна"));

Добавлено через 22 минуты
ааааа наврал!!

HWND hwnd = ::FindWindow(NULL, _T("название окна"));
1
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 202
22.04.2015, 20:39  [ТС] 4
Спасибо, но теперь вытекает другая проблема - как получить название окна, в которое загрузится dll?
0
55 / 55 / 63
Регистрация: 18.03.2014
Сообщений: 386
22.04.2015, 21:01 5
Можно посмотреть код dll
0
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 202
22.04.2015, 21:04  [ТС] 6
пожалуйста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <Windows.h>
 
bool __stdcall DllMain(HINSTANCE hinstDLL, DWORD fdwReason, void* lpvReserved)
{
    if (fdwReason == 1)
    {
        MessageBoxA(NULL, "Injected", "Проверка", MB_ICONWARNING);
 
        while (1)
        {
            Sleep(1);
        }
    }
    return 0;
}
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.04.2015, 21:09 7
Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
как получить название окна, в которое загрузится dll?
Бессмыслица. dll загружается не в окно, а в процесс. А у процесса
может быть несколько окон или вообще ни одного.
0
55 / 55 / 63
Регистрация: 18.03.2014
Сообщений: 386
22.04.2015, 21:09 8
Лучший ответ Сообщение было отмечено ДЕСАНТУРА как решение

Решение

Скорее всего dll загружается в активное окно, чтобы получить активное окно используй
C++
1
 HWND hWnd = GetForegroundWindow();
1
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.04.2015, 21:09 9
Да, и еще MessageBox из DllMain+DLL_PROCESS_ATTACH легко
положит процесс (а в некоторых ситуациях и всю систему).
0
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 202
22.04.2015, 21:12  [ТС] 10
да нет процесс не положит - просто тормазнет весь процесс, пока я не нажму "ОК"
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.04.2015, 21:14 11
Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
да нет процесс не положит - просто тормазнет весь процесс, пока я не нажму "ОК"
Только если в процесс уже загружена user32.dll и если
это не системный процесс типа winlogon.exe.
0
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 202
22.04.2015, 21:23  [ТС] 12
и если нет стримового обмена с сервером данными, нет у меня простое окно которое я же и создал для опытов, инфу прошу для благих целей и повышения опыта программирования
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.04.2015, 21:31 13
Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
и если нет стримового обмена с сервером данными
Вот тут не понял.
У DllMain есть ряд ограничений, которые нужно знать и строго соблюдать, иначе
начнут всплывать такие баги, о которых мозг среднестатистического программиста
даже в своих фантазиях не сможет придумать... Подробнее здесь:

DllMain entry point
https://msdn.microsoft.com/en-... 85%29.aspx

Dynamic-Link Library Best Practices
https://msdn.microsoft.com/en-... _practices

Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
у меня простое окно которое я же и создал для опытов
FindWindow найдет окно. Только при чем тут dll тогда ?
1
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 202
22.04.2015, 21:51  [ТС] 14
хочу сделать так:
1. загрузить в процесс(заранее зная что это окно) dll
2. загруженная dll должна создать поинтер на девайс директ икса, проинициализировать интерфейс директ икса, чтобы инициализировать интерфейс, нужен hwnd текущего окна
3.нарисовать стредствами директ икса что - нибудь в этом окне
0
55 / 55 / 63
Регистрация: 18.03.2014
Сообщений: 386
22.04.2015, 21:55 15
Как получить hwnd текущего окна я уже писал, а с DirectX я не знаком)
1
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
22.04.2015, 21:57 16
Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
1. загрузить в процесс(заранее зная что это окно) dll
Открываем процесс (OpenProcess), выделяем в нем память (VirtualAllocEx),
пишем туда путь к своей dll (WriteProcessMemory). Затем создаем в процессе
удаленный поток (CreateRemoteThread), в качестве точки входа указываем
адрес функции LoadLibrary, а в качестве аргумента - указатель на
выделенный блок. Получаем классический инжект по Рихтеру.

Цитата Сообщение от ДЕСАНТУРА Посмотреть сообщение
2. загруженная dll должна создать поинтер на девайс директ икса, проинициализировать интерфейс директ икса, чтобы инициализировать интерфейс, нужен hwnd текущего окна
FindWindow, FindWindowEx, EnumWindows, EnumChildWindows...
Способов тут куча.
1
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 202
22.04.2015, 22:03  [ТС] 17
да что ж Вы все не верно поняли меня, как инжектить я знаю, как инициализировать средства директ икса - знаю, я не знал просто как получить HWND текущего окна в которое я загружаю dll, Вы мне подсказали, Вам всем спасибо за советы!!!
0
55 / 55 / 63
Регистрация: 18.03.2014
Сообщений: 386
22.04.2015, 22:11 18
А для того, чтобы вы без труда могли определить HWND окна, у меня есть небольшая программка, она немного не доделана, но основную функцию выполняет)
EnumWindow.zip
1
6 / 6 / 5
Регистрация: 25.02.2015
Сообщений: 202
23.04.2015, 08:19  [ТС] 19
благодарю
0
14 / 20 / 14
Регистрация: 20.03.2018
Сообщений: 485
20.05.2018, 22:36 20
Какие то окна видит, какие то нет. То которое мне надо не увидела. DLL ошибки не выдает, но и HWND тоже не выдает хД, надо делать для таких инжекторов отдельные h библиотеки для всплывающего окна в котором инфу выдаст. Так вообще не понятно она робит или нет
0
20.05.2018, 22:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2018, 22:36
Помогаю со студенческими работами здесь

Как получить HWND окна/процесса/консоли
Как получить HWND окна/процесса/консоли? мне надо для Shellexecute. Реализация в Dll #include...

Не могу получить HWND ресурсов диалогового окна
Помогите разобраться, создаю диалоговое окно после чего хочу получить хэндлы созданых ресурсов в...

Как получить HWND окна на панели задач по координатам мыши?
Как получить хэндл свернутого на панель задач окна, на которое наведена мышка?) Добавлено через...

Как получить HWND, созданного функцией CreateProcess, окна консоли
Есть обычное оконное прижоление на Win Api. В какой-то момент вызываю CreateProcessW и подсовываю...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru