|
#1
|
||||
|
||||
Хендл окна
Здравствуйте.Проблема в следующем:
нужно получить хенд кнопки "Отправить" в Skype.Все хендлы окон я получил включая сам edit(поле ввода сообщения),скорее всего эта кнопка как то с ним склеена/совмещена(где вычитывал такое,возможно неправильно понял и ошибаюсь). По этой кнопке нужно щёлкнуть левой кнопкой мыши(vk_return не нужен,именно кнопка мыши).Положение окна может меняться,по этому координаты вычислять тоже неэффективно.Ребят помогите пожалуйста кодом,чтобы щелкнуть по этой кнопке левой кнопкой мыши. приложу скрин)) |
#2
|
||||
|
||||
У неё может и не быть хэндла. Эта кнопка может быть простой картинкой, а форма - отслеживать нажатие, когда координаты мыши принадлежат картинке.
jmp $ ; Happy End! The Cake Is A Lie. |
#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; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
||||
|
||||
хорошо,завтра попробую.
хотя я всё еще думаю: форму ведь можно растянуть,а вместе с ней и координаты кнопки изменяться.так нужно придумать что бы каждый раз не вбивать новые координаты кнопки(+еще высчитывать).программа будет стоять не только у меня на компьютере,так что надо как то автоматизировать поиск это кнопки(ну или определение её координатов) |
#7
|
||||
|
||||
Можно найти в памяти программы место, где лежат переменные координат кнопки, и читать оттуда. Только вот скорее всего там было что-то динамическое, и адрес найти будет проблематично.
jmp $ ; Happy End! The Cake Is A Lie. |
#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 нету?)) |