Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Очертить область проверки PixelChecksum(x1,y1,x2,y2).

Ответить
Настройки темы
[решено] Очертить область проверки PixelChecksum(x1,y1,x2,y2).

Пользователь


Сообщения: 143
Благодарности: 24

Профиль | Отправить PM | Цитировать


Использую команду PixelChecksum(100,100,200,200), а можно каким нить способом очертить проверяемую область, да таким образом чтобы фон был прозрачным.

Спасибо.

Отправлено: 20:42, 25-06-2009

 

Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить 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
и конечно же можно рисовать с помощью: _WinAPI_DrawLine

Обновил со стилем $WS_EX_TRANSPARENT - окна пропускают клики, но всегда сверху.

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Последний раз редактировалось proxy, 26-06-2009 в 05:54.

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:33, 26-06-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Belfigor

Пользователь


Сообщения: 87
Благодарности: 11

Профиль | Отправить PM | Цитировать


Пользуюсь таким же методом, но у него есть один существенный минус, границы нарисованного квадрата являются как бы другим окном. Тоесть если я поверх одного окна, нарисую какие либо контуры для выделения нужных мне областей, а патом в попытке ткнуть на нужное мне место в фоновом окне, ткну на границу выделения, запрос до нужного окна не дойдет.

Можно ли с помощью автоит просто нарисовать какую либо фигуру, выделение, которое будет через себя пропускать нажатия мыши и клавиш в лежащее под ним окно?

Отправлено: 04:19, 26-06-2009 | #3


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Цитата Belfigor:
Можно ли с помощью автоит просто нарисовать какую либо фигуру, выделение, которое будет через себя пропускать нажатия мыши и клавиш в лежащее под ним окно? »
Окно, да. На самом деле очень просто, сам бы не поверил. За это отвечает доп-стиль: $WS_EX_TRANSPARENT
Обновил пример.

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:53, 26-06-2009 | #4


Аватара для Belfigor

Пользователь


Сообщения: 87
Благодарности: 11

Профиль | Отправить PM | Цитировать


Спасибо, я даже и не думал что все так просто

Отправлено: 09:51, 26-06-2009 | #5


Аватара для Belfigor

Пользователь


Сообщения: 87
Благодарности: 11

Профиль | Отправить PM | Цитировать


Нашел более интересный на мой взгляд вариант:
Код: Выделить весь код
#Include <WinAPI.au3>
_WinAPI_DrawLine($hDC, $iX1, $iY1, $iX2, $iY2)
Рабочий пример:
Код: Выделить весь код
#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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Очертить область проверки PixelChecksum(x1,y1,x2,y2).

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Область переходов.. (убрать ненужные значки) НИК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




 
Переход