Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/30: Рейтинг темы: голосов - 30, средняя оценка - 4.83
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033

Своя кнопка в чужом окне

16.04.2013, 17:54. Показов 6067. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте Господа!!! Хочу внедрить свою кнопку в чужой процесс , при помощи DLL , итак делаю .dll в DLL_PROCESS_ATTACH пишу так -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
case DLL_PROCESS_ATTACH:
 
        if(FindWindow(NULL,"z")){
    
InitCommonControls ();
 
    hw=FindWindow(NULL,"z");
 
hButton = CreateWindow("button", "Свернуть",
                                WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
                                75, 75, 75, 75, hw, (HMENU)BTN, 
                                ::GetModuleHandle(NULL), NULL);
 
if(hButton==0){MessageBoxA(hw,"Error","Info",MB_OK);}
 
else{MessageBoxA(hw,"Ok!!!","Info",MB_OK);}
 
}
 
        break;
кнопка создалась в чужом окне и соответственно выскочил MessageBox с надписью "ок!!!" , но вот беда , после того как я нажал в MessageBox - е ок , вместе с ним исчезает и кнопка , так вот вопрос с чего она вообще куда то делась , прикрепляю скрин до и после
Миниатюры
Своя кнопка в чужом окне   Своя кнопка в чужом окне  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.04.2013, 17:54
Ответы с готовыми решениями:

Рисование в чужом окне
Дано окно чужой программы. Требуется что-то на нем нарисовать. Скажем, дырку в том месте, куда мышкой кликнули. Гуглил на эту тему,...

Жмём по кнопках в чужом окне
Мне нужно проделывать кое-какие действия с кнопкой чужого окна, а именно эмулировать нажатие левой клавиши мыши (то есть нажать на кнопку)....

Как нарисовать текст в чужом окне?

24
22 / 7 / 2
Регистрация: 15.10.2012
Сообщений: 33
16.04.2013, 20:52
возможно месседж бокс закрывается, окно З становится активным, перерисовывается, а твоя кнопка нет... она есть но не перерисовалась
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.04.2013, 21:09
А может быть потому, что DLL выгружается, а с этим становится не валидной кнопка, созданная с hInstance DLL-ки !?
Вариант с перерисовкой тут явно не при чем.
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
16.04.2013, 21:20  [ТС]
Цитата Сообщение от lazybiz Посмотреть сообщение
Вариант с перерисовкой тут явно не при чем
вот тут соглашусь , а вот с этим -

Цитата Сообщение от lazybiz Посмотреть сообщение
А может быть потому, что DLL выгружается, а с этим становится не валидной кнопка, созданная с hInstance DLL-ки !?
извени , но не согласен так как в dll есть такой код -
C++
1
2
3
case DLL_PROCESS_DETACH:
        MessageBoxW(0,(LPCWSTR)L"Detaching",(LPCWSTR)L"OK!",MB_OK);
        break;
и он не выскакивает , а вот когда закрываешь приложение вот тогда и показывается - detaching
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.04.2013, 21:25
А у тебя в DLL_PROCESS_ATTACH после успешного создания кнопки функция DllMain что возвращает?
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
16.04.2013, 22:02  [ТС]
lazybiz, возращает true
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.04.2013, 22:11
Ну тогда не знаю. Может тебе весь код DLL-ки показать!?
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
16.04.2013, 22:20  [ТС]
пожалуйста -
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
47
48
49
50
51
52
53
54
55
56
57
58
59
#define BTN 1000
#pragma comment(lib,"comctl32.lib")
#pragma once
#include <Windows.h>
#include <commctrl.h>
 
#ifndef EXTF
#define EXTF extern "C" __declspec(dllimport)
#endif
 
 
#define EXTF extern "C" __declspec(dllexport)
#include "windows.h"
 
 
    HWND hw;
 HWND hButton=0;
 
BOOL WINAPI DllMain(HINSTANCE hInstDll,DWORD fdwReason, LPVOID Res)
{
 
    switch(fdwReason)
    {
 
    case DLL_PROCESS_ATTACH:
 
 
        if(FindWindow(NULL,"z")){
    
InitCommonControls ();
 
    hw=FindWindow(NULL,"z");
 
hButton = CreateWindow("button", "Свернуть",
                                WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
                                75, 75, 75, 75, hw, (HMENU)BTN, 
                                ::GetModuleHandle(NULL), NULL);
 
if(hButton==0){MessageBoxA(hw,"Error","Info",MB_OK);}
 
else{MessageBoxA(hw,"Ok!!!","Info",MB_OK);}
 
}
 
        break;
 
    case DLL_PROCESS_DETACH:
        MessageBoxW(0,(LPCWSTR)L"Detaching",(LPCWSTR)L"OK!",MB_OK);
        break;
 
    case DLL_THREAD_ATTACH:
        break;
    case DLL_THREAD_DETACH:     
        break;
    default:
        break;
    }
    return TRUE;
}
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.04.2013, 22:33
А если создать кнопку с hInstance чужого процесса ?
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
16.04.2013, 23:04  [ТС]
Цитата Сообщение от lazybiz Посмотреть сообщение
А если создать кнопку с hInstance чужого процесса ?
а я что делаю ?

Цитата Сообщение от Игорь с++ Посмотреть сообщение
::GetModuleHandle(NULL), NULL);
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.04.2013, 23:08
А ты её создаешь с hInstance DLL.
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
16.04.2013, 23:11  [ТС]
Цитата Сообщение от lazybiz Посмотреть сообщение
А ты её создаешь с hInstance DLL.
я её создаю с того HINSTANCE куда поселилась dll
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.04.2013, 23:16
Нет.
C++
1
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved )
Тут hinstDLL - это то же самое что и GetModuleHandle( NULL ), и это:
hinstDLL
A handle to the DLL module. The value is the base address of the DLL. The HINSTANCE of a DLL is the same as the HMODULE of the DLL, so hinstDLL can be used in calls to functions that require a module handle.
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
16.04.2013, 23:16
В другом потоке попробуй создать..
Вот немного по теме http://sim0n.wordpress.com/200... rom-a-dll/
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
16.04.2013, 23:31  [ТС]
lazybiz, попробуй создай dll и вызови - GetModuleFileNameA он тебе вернёт название процесса куда встроился.

ISergey, пробывал я это всё запихнуть в поток -
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DWORD WINAPI ThreadProc(LPVOID Param)
{
 
if(FindWindow(NULL,"z")){
    
InitCommonControls ();
 
    hw=FindWindow(NULL,"z");
 
hButton = CreateWindow("button", "Свернуть",
                                WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
                                75, 75, 75, 75, hw, (HMENU)BTN, 
                                ::GetModuleHandle(NULL), NULL);
 
if(hButton==0){MessageBoxA(hw,"Error","Info",MB_OK);}
 
else{MessageBoxA(hw,"Ok!!!","Info",MB_OK);}
 
}
 
return 0;
 
}
не чего не получается.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
16.04.2013, 23:52
Игорь с++, с какими параметрами вызывать GetModuleFileNameA ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33377 / 21501 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
17.04.2013, 01:51
Игорь с++, проверил твою DLL-ку (в Code::Blocks). Нормально создается кнопка, и никуда не исчезает... До закрытия приложения:


Что я делаю не так?
1
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
17.04.2013, 09:44  [ТС]
UI, до закрытие приложение которое инжектило dll ? Если да ,то почему она после закрывается , если код уже в другом приложений ? Хотя я постоянно закрывал приложение которое инжектило,надо будет проверить,тогда отпишусь.

Добавлено через 37 минут
UI, а вы какие нибудь настройки делали при создании проекта,просто я тоже сначало в code:blocks пробовал,но что то даже кнопка не появлялась.

Добавлено через 2 минуты
UI, а вы какие нибудь настройки делали при создании проекта,просто я тоже сначало в code:blocks пробовал,но что то даже кнопка не появлялась.
lazybiz, как и написанно в msdn если запускается данная функция в своём приложени,то первый параметр должен быть -NULL.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33377 / 21501 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
17.04.2013, 09:49
Игорь с++, меня почему-то терзают смутные сомнения. Вот это всё выполнено:
Цитата Сообщение от Джеффри Рихтер
1. Выделите блок памяти в адресном пространстве удаленного процесса через VirtualAllocEx.
2. Вызвав WriteProcessMemory, скопируйте строку с полным именем файла DLL в блок памяти, выделенный в п.1.
3. Используя GetProcAddress, получите истинный адрес функции LoadLibraryA или LoadLibraryW внутри Kernel32.dll.
4. Вызвав CreateRemoteThread, создайте поток в удаленном процессе, который вызовет соответствующую функцию LoadLibrary, передав ей адрес блока памяти, выделенного в п.1.
? Если выполнено - то и после закрытия инжектирующего процесса кнопка останется на месте.
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
17.04.2013, 09:57  [ТС]
да с этим всё норм.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.04.2013, 09:57
Помогаю со студенческими работами здесь

Отслеживание нажатия моей кнопки в чужом окне
Доброго времени суток прошу вашей помощи в некой задаче Вобщем есть приложение через которое я запускаю другое приложение получая его...

Рисование в чужом окне
Собственно, я понимаю как рисовать, мне больше интересно 2 момента: 1) Если я просто буду рисовать на окне, то при его перерисовке всё...

Рисование в чужом окне
всем привет как рисовать текст в чужом окне не используя своего окна и не имея его

Клик в чужом окне
Как можно реализовать множественный клик правой кнопкой мыши в чужом окне?

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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 Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru