|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Использование User32.dll вместо MouseClick |
|
|
[решено] Использование User32.dll вместо MouseClick
|
Пользователь Сообщения: 143 |
Профиль | Отправить PM | Цитировать Интересует такая штучка: к примеру имею вот такой код:
#include <IE.au3> $oIE = _IECreate ("www.autoitscript.com") ;1способ ;_IEImgClick ($oIE, "Download AutoIt", "alt") ;2-й способ $oImgs = _IEImgGetCollection ($oIE) For $oImg In $oImgs if $oImg.alt == "Download AutoIt" Then $iScreenX = _IEPropertyGet($oImg, "screenx") $iScreenY = _IEPropertyGet($oImg, "screeny") MouseClick('LEFT', $iScreenX + $oImg.width,$iScreenY + $oImg.height) EndIf Next Наткнулся как делают: на примере кнопки START const Int32 WM_LBUTTONDOWN = 0x0201; [DllImport("User32.dll")] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("User32.dll")] private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("user32.dll")] private static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam); IntPtr hTaskBar = FindWindow("Shell_TrayWnd", null); // ищем таскбар if(hTaskBar != IntPtr.Zero) { // находим кнопку Start IntPtr hStartBtn = FindWindowEx(hTaskBar,IntPtr.Zero,"Button", null); // кликаем ее if(hStartBtn != IntPtr.Zero) SendMessage(hStartBtn, WM_LBUTTONDOWN, 0, 0); } Одним словом, что спрашивается как клацнуть по картинке, как во втором способе но не используя мышку? Спасибо. |
|
Отправлено: 20:12, 28-03-2010 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать А ControlClick не подходит?
Цитата HORRIBLE:
|
|
------- Отправлено: 22:52, 28-03-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 143
|
Профиль | Отправить PM | Цитировать Creat0R,через ControlClick вы вот так имеете в виду ?
#include <IE.au3> $oIE = _IECreate ("www.autoitscript.com") ;1способ ;_IEImgClick ($oIE, "Download AutoIt", "alt") ;2-й способ $oImgs = _IEImgGetCollection ($oIE) For $oImg In $oImgs if $oImg.alt == "Download AutoIt" Then $iScreenX = _IEPropertyGet($oImg, "screenx") $iScreenY = _IEPropertyGet($oImg, "screeny") ;MouseClick('LEFT', $iScreenX + $oImg.width/2,$iScreenY + $oImg.height/2) ControlClick('',"","[CLASS:Internet Explorer_Server; INSTANCE:1]","left","", $iScreenX + $oImg.width/2, $iScreenY + $oImg.height/2) EndIf Next А _SendMessage($hWnd, $WM_LBUTTONDOWN, 0, 0), а как сюда привязать координаты картинки ? |
Отправлено: 23:09, 28-03-2010 | #3 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 23:13, 28-03-2010 | #4 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Вот так работает:
#include <IE.au3> $oIE = _IECreate("www.autoitscript.com") $oImgs = _IEImgGetCollection($oIE) For $oImg In $oImgs If $oImg.Alt == "Download AutoIt" Then $iScreenX = _IEPropertyGet($oImg, "browserx") $iScreenY = _IEPropertyGet($oImg, "browsery") ControlClick("[CLASS:IEFrame]", "", "Internet Explorer_Server1", "Main", 1, $iScreenX, $iScreenY) EndIf Next |
|
------- Отправлено: 23:52, 28-03-2010 | #5 |
Пользователь Сообщения: 143
|
Профиль | Отправить PM | Цитировать Спасибо.
|
Отправлено: 00:06, 29-03-2010 | #6 |
Пользователь Сообщения: 143
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:51, 29-03-2010 | #7 |
Старожил Сообщения: 467
|
Профиль | Отправить PM | Цитировать Хм, мне интерестно, каким образом можно применить SendMessage к картинке на страничке... Ведь SendMessage только для тех елементов, у которых хендл есть...
|
------- Отправлено: 22:19, 29-03-2010 | #8 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата HORRIBLE:
#include <WinAPI.au3> .... $iScreenX = _IEPropertyGet($oImg, "screenx") $iScreenY = _IEPropertyGet($oImg, "screeny") $hWnd = WinGetHandle("[CLASS:IEFrame]") $tPoint = DllStructCreate("int X;int Y;") DllStructSetData($tPoint, "X", $iScreenX) DllStructSetData($tPoint, "Y", $iScreenY) _WinAPI_ScreenToClient($hWnd, $tPoint) $iScreenX = DllStructGetData($tPoint, "X") $iScreenY = DllStructGetData($tPoint, "Y") .... Цитата crashtuak:
|
||
------- Отправлено: 23:32, 29-03-2010 | #9 |
Пользователь Сообщения: 143
|
Профиль | Отправить PM | Цитировать Creat0R, спасибо, но оно почему то не туда кликает:
#include <IE.au3> #include <WinAPI.au3> Opt("MouseCoordMode", 2) $oIE = _IECreate("www.autoitscript.com") $oImgs = _IEImgGetCollection($oIE) For $oImg In $oImgs If $oImg.Alt == "Download AutoIt" Then $iScreenX = _IEPropertyGet($oImg, "screenx") $iScreenY = _IEPropertyGet($oImg, "screeny") $hWnd = WinGetHandle("[CLASS:IEFrame]") $tPoint = DllStructCreate("int X;int Y;") DllStructSetData($tPoint, "X", $iScreenX) DllStructSetData($tPoint, "Y", $iScreenY) _WinAPI_ScreenToClient($hWnd, $tPoint) $iScreenX = DllStructGetData($tPoint, "X") $iScreenY = DllStructGetData($tPoint, "Y") MouseMove($iScreenX, $iScreenY) ControlClick("[CLASS:IEFrame]", "", "Internet Explorer_Server1", "Main", 1, $iScreenX, $iScreenY) EndIf Next |
Отправлено: 01:18, 30-03-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ошибка - [решено] Ошибка: системная библиотека user32.dll перемещена в памяти... | ruddystepa | Microsoft Windows 2000/XP | 127 | 05-08-2017 21:58 | |
Разное - Использование AppLocker с dll файлами | vasili111 | Microsoft Windows 7 | 3 | 13-09-2009 11:40 | |
Разное - Использование команд из user.exe(dll) | n9271217 | Microsoft Windows 2000/XP | 0 | 13-01-2009 14:58 | |
Загрузка - после восстановления User32.dll появляется черный экран | ymuhin | Microsoft Windows 2000/XP | 14 | 14-12-2008 19:56 | |
Загрузка - user32.dll - Точка входа в процедуру Close Clip... | kolchoz | Microsoft Windows 2000/XP | 7 | 10-08-2007 19:24 |
|