Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нажать кнопку 
:(
    Опции темы
asdnmg7sdkw
Дата 7.9.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 17.8.2007

Репутация: нет
Всего: нет



В чужом приложении есть некоторая панелька. На ней размещена кнопка которую нужно нажать. Класс этой панели определяется как 'Afx:00400000:8:00010011:00000000:00000000'. И вот нужно нажать кнопку на этой панели в свернутом приложение. Вот я нашел тока 2 способа как можно это сделать
Код

  Sendmessage(h,WM_LBUTTONDOWN,MK_LBUTTON,MakeLParam(1,1));
  Sendmessage(h,WM_LBUTTONUP,MK_LBUTTON,MakeLParam(1,1));

Код

procedure TForm1.Button1Click(Sender: TObject);
var
h:HWND;
h_coord : TRect;
Cur_pos : TPoint;
h_old : HWND;
begin

h:=FindWindow(nil, '---');
if h <> 0 then
begin

  h_old := GetForegroundWindow;
  GetCursorPos(Cur_pos);
  GetWindowRect(h,h_coord);

  SetCursorPos(h_coord.left + 100, h_coord.top + 60);
  setforegroundwindow(h);

  Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
  Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0);

  SetCursorPos(Cur_pos.x,Cur_pos.y);
  setforegroundwindow(h_old);
end;
end;

1-ый способ результата не дал.
2-ой нажимает кнопку, но окно должно быть при этом развернуто, а это не подходит.
PM MAIL   Вверх
W4FhLF
Дата 7.9.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Код

SendMessage(hCmd, WM_SETFOCUS, 1, 0);
SendMessage(hCmd, BM_SETSTATE, 1, 0);
PostMessage(hCmd, WM_KILLFOCUS, 0, 0);




--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
asdnmg7sdkw
Дата 7.9.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 17.8.2007

Репутация: нет
Всего: нет



Если я правельно понял то hCmd это хендл кнопки, но у меня нету хендла самой кнопки, а только панели на которой она расположена.
PM MAIL   Вверх
W4FhLF
Дата 7.9.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Код

hPanel := FindWindow('Afx:00400000:8:00010011:00000000:00000000',nil);
hCmd := FindWindowEx(hPanel, 0, ButtonClass, ButtonCaption);



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
asdnmg7sdkw
Дата 7.9.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 17.8.2007

Репутация: нет
Всего: нет



Цитата

FindWindowEx(hPanel, 0, 0, ButtonCaption);
hPanel - хендл панели
ButtonCaption - текст на кнопке

Возвращает 0...

Это сообщение отредактировал(а) asdnmg7sdkw - 7.9.2007, 15:58
PM MAIL   Вверх
W4FhLF
Дата 7.9.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Попробуй добавить перед текстом в переменной ButtonCaption символ & (&Text), ну или же ищи по классу. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
asdnmg7sdkw
Дата 7.9.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 17.8.2007

Репутация: нет
Всего: нет



А как надо '&' добавлять? ButtonCaption := '&ABC';? если так то ничего не находит.
Хмм а как искать кнопку по классу не зная ее класса...

Это сообщение отредактировал(а) asdnmg7sdkw - 7.9.2007, 16:27
PM MAIL   Вверх
BaD_SeCt0R
Дата 7.9.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lazy Coder
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 9.10.2006
Где: Анапа

Репутация: 3
Всего: 18



Цитата(asdnmg7sdkw @  7.9.2007,  16:27 Найти цитируемый пост)
А как надо '&' добавлять? ButtonCaption := '&ABC';? если так то ничего не находит.
Хмм а как искать кнопку по классу не зная ее класса...


Организуй поиск по всем подокнам окна. Выведи их на экран и, в конце концов, посмотри, какой класс у окна (не думаю, что он будет меняться от запуска к запуску smile).


--------------------
Кто владеет информацией - владеет миром. (С) Френсис Бэкон.
PM MAIL ICQ   Вверх
asdnmg7sdkw
Дата 7.9.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 17.8.2007

Репутация: нет
Всего: нет



'Afx:00400000:8:00010011:00000000:00000000' вот класс окна и что? Кнопку я найти немогу, пользовался разнными утилитами типо 'InqSoft Window Scanner' и они отображают всю панель как единое целое.
PM MAIL   Вверх
BaD_SeCt0R
Дата 8.9.2007, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lazy Coder
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 9.10.2006
Где: Анапа

Репутация: 3
Всего: 18



asdnmg7sdkw, и какие кэпшины у кнопок твоего класса? Что именно мешает найти тебе нужное окно?

P.S. Панель - это только парент


--------------------
Кто владеет информацией - владеет миром. (С) Френсис Бэкон.
PM MAIL ICQ   Вверх
W4FhLF
Дата 8.9.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



asdnmg7sdkw, используй WinSpy или Spy++, если в их списке не будет твоей кнопки, значит она не имеет описателя и работать ты с ней не сможешь(только если использовать второй приведеённый тобою метод).


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
BaD_SeCt0R
Дата 8.9.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lazy Coder
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 9.10.2006
Где: Анапа

Репутация: 3
Всего: 18



Цитата(W4FhLF @  8.9.2007,  08:20 Найти цитируемый пост)
значит она не имеет описателя

Значит это не кнопка (не окно)smile
Но, asdnmg7sdkw, класс же ты нашел. Значит есть и кнопка smile


--------------------
Кто владеет информацией - владеет миром. (С) Френсис Бэкон.
PM MAIL ICQ   Вверх
asdnmg7sdkw
Дата 8.9.2007, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 17.8.2007

Репутация: нет
Всего: нет



Цитата

asdnmg7sdkw, и какие кэпшины у кнопок твоего класса? Что именно мешает найти тебе нужное окно?

P.S. Панель - это только парент 

Обычные кэпшены типо 'Connect', 'Disconnect'. Ничего мне не мешает  smile но найти не могу.

Цитата

asdnmg7sdkw, используй WinSpy или Spy++, если в их списке не будет твоей кнопки, значит она не имеет описателя и работать ты с ней не сможешь(только если использовать второй приведеённый тобою метод).

Если использовать 2-ой способ то пользователю будет мешать перемещения курсора или это все будет незаметно? А можно кликать по приложению за пределами рабочего стола? Вроде приложение туда залезть может, а вот курсор не идет...
PM MAIL   Вверх
W4FhLF
Дата 8.9.2007, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Цитата(BaD_SeCt0R @  8.9.2007,  08:38 Найти цитируемый пост)
Значит это не кнопка (не окно)


Кнопка обязательно должна быть окном?

Цитата(BaD_SeCt0R @  8.9.2007,  08:38 Найти цитируемый пост)
Но, asdnmg7sdkw, класс же ты нашел. Значит есть и кнопка


Он нашёл класс панели, а не кнопки.

asdnmg7sdkw, не знаю, мне быстро надоедает тыкать пальцем в небо и гадать, что и как и почему. Выкладывай программу.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
asdnmg7sdkw
Дата 8.9.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 17.8.2007

Репутация: нет
Всего: нет



Вот прога http://slil.ru/24828794
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.