![]() |
|
|
#1
|
||||
|
||||
|
Здравствуйте.Проблема в следующем:
нужно получить хенд кнопки "Отправить" в Skype.Все хендлы окон я получил включая сам edit(поле ввода сообщения),скорее всего эта кнопка как то с ним склеена/совмещена(где вычитывал такое,возможно неправильно понял и ошибаюсь). По этой кнопке нужно щёлкнуть левой кнопкой мыши(vk_return не нужен,именно кнопка мыши).Положение окна может меняться,по этому координаты вычислять тоже неэффективно.Ребят помогите пожалуйста кодом,чтобы щелкнуть по этой кнопке левой кнопкой мыши. приложу скрин)) ![]() |
|
#2
|
||||
|
||||
|
У неё может и не быть хэндла. Эта кнопка может быть простой картинкой, а форма - отслеживать нажатие, когда координаты мыши принадлежат картинке.
|
|
#3
|
|||
|
|||
|
Можно получить координаты окна, высчитать положение кнопки и по нужным координатам клямкнуть мышкой. Как говорилось выше, у этой кнопки хэндла может и не быть...
|
|
#4
|
||||
|
||||
|
хм,можете привести пример?))
если я правильно понимаю,окно может тоже в размерах меняться и кнопка передвигаться соответственно,разве что она высчитывает когда курсор находится на этой картинке анимирует её и при "клаце" выполняет отправку. ок.Дайте код,который бы высчитывал координаты этой голубенькой кнопочки ну а дальше я думаю по переменным расфосую и отдам переменные координатам мыши. p.s. я не представляю как может выглядеть такое. |
|
#5
|
||||
|
||||
|
Код:
var
pr : TPoint;
aRect : TRect;
begin
GetGursorPos(pt); // узнать позицию мышки
ScreenToClient(Wnd, pt); // перевести координаты 'десктопа' в оконные Skype-а
if PtInRect(aRect, pt) then // в aRect уже должны "лежать" предпологаемые координаты кнопки
begin
// что-то делаем
end;
end; |
|
#6
|
||||
|
||||
|
хорошо,завтра попробую.
хотя я всё еще думаю: форму ведь можно растянуть,а вместе с ней и координаты кнопки изменяться.так нужно придумать что бы каждый раз не вбивать новые координаты кнопки(+еще высчитывать).программа будет стоять не только у меня на компьютере,так что надо как то автоматизировать поиск это кнопки(ну или определение её координатов) |
|
#7
|
||||
|
||||
|
Можно найти в памяти программы место, где лежат переменные координат кнопки, и читать оттуда. Только вот скорее всего там было что-то динамическое, и адрес найти будет проблематично.
|
|
#8
|
|||
|
|||
|
Кнопка всегда остается в одном положении относительно двух сторон окна (обычно, извращенный дизайн не рассматриваем). Соответсвенно, получив координаты окна (точнее его Rect), всегда можно посчитать где эта кнопка находится в экранных координатах.
|
|
#9
|
|||
|
|||
|
я писал такой неэффективный брутфорс - делает скриншот и ищет кнопку по нему, если такой нужен, могу поискать его
|
|
#10
|
||||
|
||||
|
Pyro,я так понимаю он по цветам будет искать?) скинь,посмотрю.
lmikle,покажи как пожалуйста.(незнаю,но отношусь скептически.) Bargest, вот это было бы хорошим вариантом.узнать из памяти координаты кнопки на форме и передать их маусу и клацнуть. думаю это более стабильный метод. |
|
#11
|
|||
|
|||
|
особенность: при поиске использует только первую полоску, т.е. what должна но не обязана быть высотой в 1px
Цитата:
|
|
#12
|
||||
|
||||
|
Pyro,за гранью моего понимания.
Приведу пример как делал я: Код:
procedure TForm1.Button1Click(Sender: TObject);
var
h1,h2,h3,h4,h5,h6:HWND;
begin
h1:=FindWindow('tSkMainForm',nil);
h2:=FindWindowEx(h1,0,'TConversationsControl',nil);
h3:=FindWindowEx(h2,0,'TAccessibleEdit',nil);
SendMessage(h3, WM_Settext, 0,integer(pchar('echo123')));
SendMessage(h3, WM_KEYDOWN,VK_RETURN ,0 );
SendMessage(h3, WM_KEYUP, VK_RETURN, 0);
h4:=FindWindow('TConversationForm',nil);
h5:=FindWindowEx(h4,0,'TChatEntryControl',nil);
h6:=FindWindowEx(h5,0,'TChatRichEdit',nil);
SendMessage(h6, WM_Settext, 0,integer(pchar('<u>я тут.</u>')));
SendMessage(h6, WM_KEYDOWN,VK_SHIFT ,0 );
SendMessage(h6, WM_KEYDOWN,VK_CONTROL ,0 );
SendMessage(h6, WM_KEYDOWN,VK_RETURN ,0 );
SendMessage(h6, WM_KEYUP, VK_RETURN, 0);
SendMessage(h6, WM_KEYUP,VK_SHIFT ,0 );
SendMessage(h6, WM_KEYUP,VK_CONTROL ,0 );
end;
end.надеюсь вы суть поняли=)) нужно отправить текст форматированный html'ом=) в скайпе отправляеться сочетанием клавиш ctrl+shift+левая кнопка мыши. enter'ом не отправляет. |
|
#13
|
|||
|
|||
|
пример работы той функции, для поиска картинки на экране
(особенность: при поиске использует только первую полоску, т.е. what должна но не обязана быть высотой в 1px) Последний раз редактировалось Pyro, 05.03.2013 в 07:26. |
|
#14
|
||||
|
||||
|
Pyro,значит мне нужно в image1 вставить картинку моей кнопки со скайпа?
как в 1 посте например картинка. |
|
#15
|
||||
|
||||
|
есть еще API,предоставляемый скайпом.Skype4com,но там я не нашёл как отправить текст форматированный html'ом.по возможности гляньте пожалуйста.
p.s. другого выхода кроме предложенного Pyro нету?)) |