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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 11:50   #1
Goldz60
 
Регистрация: 10.06.2010
Сообщений: 9
По умолчанию Создал кнопку в чужой форме.Как обработать событие Click

Прошу помощи
Создал кнопку в чужой форме.Как обработать событие Click
Пишу на C#
Создал с помощью
IntPtr hWnd = CreateWindowEx(0, "BUTTON", "ddddddd",
WS_VISIBLE, 420, 120, 120, 120, handle, 0, (IntPtr)0, null);

Теперь знаю хендел кнопки

Куда идти дальше ??
Goldz60 вне форума Ответить с цитированием
Старый 10.06.2010, 15:31   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

во внедренние ДЛЛ, в которой уже перехватывайте обработчик окна(которому кнопку сунули)
далее в этом(своем) обработчике обрабатывайте сообщение от кнопки, а если другое сообщение то возвращайте управление оригинальной процедуре обработки(её надо сохранить)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.06.2010, 03:22   #3
Goldz60
 
Регистрация: 10.06.2010
Сообщений: 9
По умолчанию

Большая просьба поподробнее
То что Вы сообщили я придставлял, но как этосделать?
Goldz60 вне форума Ответить с цитированием
Старый 11.06.2010, 03:43   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

шарпа не знаю, поэтому пример кода на С++ будет.
у ДЛЛ же есть EntryPoint в которой можно выделить событие присоединения к процессу(флаг fdwReason установлен в DLL_PROCESS_ATTACH)

нам нужна глобальная переменная типа
Код:
LRESULT(CALLBACK*OldWndProc)(HWND,UINT,WPARAM,LPARAM);
HWND buttonHandle;
соответственно обработчик для кнопки

Код:
LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
     if((uMsg==WM_COMMAND)&&(HIWORD(wParam)==BN_CLICKED)&&(buttonHandle==(HWND)lParam))
     {
           //на кнопку нажали
           return 0;
     }
     return OldWndProc(hWnd,uMsg,wParam,lParam);
}
далее в том самом событии DLL_PROCESS_ATTACH
делаем
Код:
 HWND h=FindWindow//находим нужное нам окно
 buttonHandle=CreateWindowEx(0,"BUTTON","ddddddd",WS_VISIBLE,420,120,120,120,h,0,0, null);//создаем кнопку
 OldWndProc=SetWindowLong(h,GWL_WNDPROC,(LONG)&WndProc);//скорее всего приведение типов надо
если у нас будет выгружатся ДЛЛ до того как умрет приложение то надо при DLL_PROCESS_DETACH возвращать обработчик на место.

в общем примерно так
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.06.2010, 04:20   #5
Goldz60
 
Регистрация: 10.06.2010
Сообщений: 9
По умолчанию

Все разговоры крутятся вокруг DLL
Почему?
Опишу ситуацию.

Есть программа которая расшаривает порты COM(splitter)
Но она не запоминает настройки

Пришла мысль создать в ней кнопку которая будет запускать и выгружать splitter с сохранением настроек

Пробовал получить доступ к занятому порту, увы мозга нехватило
Goldz60 вне форума Ответить с цитированием
Старый 11.06.2010, 04:39   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

потому что у другого процесса свое адресное пространство, программа при всем желании не сможет перейти в ваш процесс и выполнить ваш код.(только если вы его(код) перенесете внутрь того процесса, что через DLL легко делается)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.06.2010, 06:33   #7
Goldz60
 
Регистрация: 10.06.2010
Сообщений: 9
По умолчанию

Как перенести внутрь того процесса?
Goldz60 вне форума Ответить с цитированием
Старый 11.06.2010, 06:35   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

пишем ДЛЛ согласно посту 4, потом Инжектим ДЛЛ(погуглите, ибо я не занимался инжектом ДЛЛ)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.06.2010, 08:46   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Но она не запоминает настройки
Не проще ли достать другую программу. Подобную этой?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как поменять рисунок на чужой форме. Aleksandr Безопасность, Шифрование 4 28.05.2014 11:29
как создать кнопку в форме, которая будет создавать отчет Tatu Microsoft Office Access 3 04.03.2010 19:13
Событие click по заголовку формы? Polotenchik Общие вопросы Delphi 3 24.06.2009 12:48