|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Очертить область проверки PixelChecksum(x1,y1,x2,y2). |
|
[решено] Очертить область проверки PixelChecksum(x1,y1,x2,y2).
|
Пользователь Сообщения: 143 |
Профиль | Отправить PM | Цитировать Использую команду PixelChecksum(100,100,200,200), а можно каким нить способом очертить проверяемую область, да таким образом чтобы фон был прозрачным.
Спасибо. |
|
Отправлено: 20:42, 25-06-2009 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать банальные варианты
#region: - Options Opt('GUIOnEventMode', 1) Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) #endregion #include <GUIConstants.au3> #include <WindowsConstants.au3> #Include <WinAPI.au3> HotKeySet('{ESC}', '_Pro_Exit') Local $iCheckSum $iCheckSum = _PixelChecksum1(200, 200, 200, 200) MsgBox(64, 'Пример #1', 'GUI окна в виде линий') $iCheckSum = _PixelChecksum2(200, 200, 200, 200, 100) MsgBox(64, 'Пример #2', 'Прозрачное GUI окно') _Pro_Exit() #region: - Sleep, Exit, OnAutoItExit While 1 Sleep(10) WEnd Func _Pro_Exit() Exit EndFunc #endregion Func _PixelChecksum1($iLeft, $iTop, $iRght, $iBottom, $iTrans=255, $iStep=1) Local $hTop = GUICreate('Top', $iRght, 1, $iLeft, $iTop, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT)) Local $hBottom = GUICreate('Bottom', $iRght, 1, $iLeft, $iTop+$iBottom, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT)) Local $hLeft = GUICreate('Left', 1, $iBottom, $iLeft+$iRght, $iTop, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT)) Local $hRight = GUICreate('Right', 1, $iBottom, $iLeft, $iTop, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT)) WinSetTrans($hTop, '', $iTrans) GUISetBkColor(0x000000, $hTop) GUISetState(@SW_SHOW, $hTop) WinSetTrans($hBottom, '', $iTrans) GUISetBkColor(0x000000, $hBottom) GUISetState(@SW_SHOW, $hBottom) WinSetTrans($hLeft, '', $iTrans) GUISetBkColor(0x000000, $hLeft) GUISetState(@SW_SHOW, $hLeft) WinSetTrans($hRight, '', $iTrans) GUISetBkColor(0x000000, $hRight) GUISetState(@SW_SHOW, $hRight) Return PixelChecksum($iLeft, $iTop, $iRght, $iBottom, $iStep) EndFunc Func _PixelChecksum2($iLeft, $iTop, $iRght, $iBottom, $iTrans=255, $iStep=1) Local $hWin = GUICreate('Win', $iTop, $iBottom, $iLeft, $iBottom, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT)) WinSetTrans($hWin, '', $iTrans) GUISetBkColor(0xffffff, $hWin) GUISetState(@SW_SHOW, $hWin) Return PixelChecksum($iLeft, $iTop, $iRght, $iBottom, $iStep) EndFunc Обновил со стилем $WS_EX_TRANSPARENT - окна пропускают клики, но всегда сверху. |
------- Последний раз редактировалось proxy, 26-06-2009 в 05:54. Отправлено: 02:33, 26-06-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Пользуюсь таким же методом, но у него есть один существенный минус, границы нарисованного квадрата являются как бы другим окном. Тоесть если я поверх одного окна, нарисую какие либо контуры для выделения нужных мне областей, а патом в попытке ткнуть на нужное мне место в фоновом окне, ткну на границу выделения, запрос до нужного окна не дойдет.
Можно ли с помощью автоит просто нарисовать какую либо фигуру, выделение, которое будет через себя пропускать нажатия мыши и клавиш в лежащее под ним окно? |
Отправлено: 04:19, 26-06-2009 | #3 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать Цитата Belfigor:
Обновил пример. |
|
------- Отправлено: 05:53, 26-06-2009 | #4 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Спасибо, я даже и не думал что все так просто
|
|
Отправлено: 09:51, 26-06-2009 | #5 |
Пользователь Сообщения: 87
|
Профиль | Отправить PM | Цитировать Нашел более интересный на мой взгляд вариант:
Рабочий пример: #include <WindowsConstants.au3> #include <WinAPI.au3> ShowCross(@DesktopWidth / 2, @DesktopHeight / 2, 20, 2, 0xFF, 3000) Func ShowCross($start_x, $start_y, $length, $width, $color, $time) Local $hDC, $hPen, $obj_orig $hDC = _WinAPI_GetWindowDC(0) ; DC of entire screen (desktop) $hPen = _WinAPI_CreatePen($PS_SOLID, $width, $color) $obj_orig = _WinAPI_SelectObject($hDC, $hPen) _WinAPI_DrawLine($hDC, $start_x - $length, $start_y, $start_x - 5, $start_y) ; horizontal left _WinAPI_DrawLine($hDC, $start_x + $length, $start_y, $start_x + 5, $start_y) ; horizontal right _WinAPI_DrawLine($hDC, $start_x, $start_y - $length, $start_x, $start_y - 5) ; vertical up ; _WinAPI_DrawLine($hDC, $start_x, $start_y + $length, $start_x, $start_y + 5) ; vertical down _WinAPI_MoveTo($hDC, $start_x, $start_y + $length) _WinAPI_LineTo($hDC, $start_x, $start_y + 5) Sleep($time) ; show cross over screen for defined seconds ; refresh desktop (clear cross) _WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN) ; clear resources _WinAPI_SelectObject($hDC, $obj_orig) _WinAPI_DeleteObject($hPen) _WinAPI_ReleaseDC(0, $hDC) EndFunc ;==>ShowCross |
Отправлено: 16:15, 01-08-2009 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Область переходов.. (убрать ненужные значки) | НИКoff | Оформление Windows 11/ 10 / 8 / 7 / Vista | 18 | 02-10-2014 04:47 | |
Интерфейс - [решено] пропала область сведений в Windows Vista HELP. | AlanAncord | Microsoft Windows Vista | 3 | 16-02-2009 12:24 | |
Разное - [решено] Пропала область сведений! | cuentagotas | Microsoft Windows Vista | 1 | 06-01-2009 13:00 | |
Интерфейс - [решено] Вход в запароленную область | Радик | Microsoft Windows 2000/XP | 4 | 26-06-2008 20:47 | |
Интерфейс - [решено] Область уведомлений | vitaliyboch | Microsoft Windows Vista | 3 | 20-02-2008 19:31 |
|