Что нового

Нужен скрипт аналога AutoIt Window Info Tool

Sanke

Новичок
Сообщения
8
Репутация
0
Добрый день.
Нужен скрипт аналога AutoIt Window Info Tool.

Точнее: Нужна часть этой программы, которая имеет вид лупы, и позволяет точно захватить данные пикселя (x/y/color). Лупа нужна для точного наведения на пиксель.

п.с.: найти похожую тему или самому разобраться в данной проблеме не получилось.

Заранее спасибо.
 

VladUs

Скриптер
Сообщения
621
Репутация
180
http://autoit-script.ru/index.php?topic=4579.0
 
Автор
S

Sanke

Новичок
Сообщения
8
Репутация
0
Аналог, но как не искал, не смог найти в нем нужный мне функционал...
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 593
Репутация
938
Ленивым помогать тут не любят. Если "как не искал, не смог найти", значит "не искал вообще, найдите за меня". au3 версия файла там есть.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
Хм... по моему проще самому сделать через 2 функции... MouseGetPos и PixelGetColor....

Код:
$pos = MouseGetPos()
$Color=PixelGetColor($pos[0],$pos[1])
msgbox(0,"", "X= " & $pos[0] & "  Y= " & $pos[1] & @CRLF & hex($Color,6))
 
Автор
S

Sanke

Новичок
Сообщения
8
Репутация
0
Belfigor сказал(а):
Ленивым помогать тут не любят. Если "как не искал, не смог найти", значит "не искал вообще, найдите за меня". au3 версия файла там есть.
Мозг пытается свернуться в трубочку...
Слишком много строк... без пояснений... так и не смог найти нужное...
Зато умудрился сделать фейк, который будет запускать эту программу вызовом и тырить уже из самого диалогового окна что надо... тупо, раздуто, но пока не найду нужную функцию - буду так делать :(
 

VladUs

Скриптер
Сообщения
621
Репутация
180
Здесь неплохой пример увеличилки.
Прицел , думаю сам сможешь прикрутить..
Как определить цвет zlo-kazan тебе уже написал...
 
Автор
S

Sanke

Новичок
Сообщения
8
Репутация
0
ВО! спасибо большое! то что надо!
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
VladUs
Попробовал пример, нарягает процессор на 50%
Лучше этот вариант

Sanke
Название темы одно, а требуется совсем другое... "Нужна экранная лупа"


По теме лупы переделал немного скрипт. Во первых поместил вызов функции внутрь условия (оптимизация), во вторых добавил управление клавишами и колёсиком мыши.
Код:
; Добавил управление горячими клавишами
; Колёсико мыши - только регулировка увеличения
; Ctrl+Колёсико мыши - регулировка увеличения и размера лупы
; Shift+Колёсико мыши - только изменение размера лупы

; http://www.autoitscript.com/forum/index.php?showtopic=24154&view=findpost&p=168674
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
; Global Const $WM_MOUSEWHEEL = 0x020A
HotKeySet("{ESC}", "_Quit")
GUIRegisterMsg(0x020A , "WM_MOUSEWHEEL")

; установка параметров
Global $MagZoom = 4
Global $MagWidth = $MagZoom*10
Global $MagHeight =$MagZoom*10
Global $LastWidth = $MagWidth*$MagZoom
Global $LastHeight =$MagHeight*$MagZoom
Global $LastZoom, $Tr1=1
; $d = Int($MagWidth/2 + 5)

; Global $SRCCOPY = 0x00CC0020
Global $dll[3], $DeskHDC, $GUIHDC

$dll[1] = DllOpen ( "user32.dll")
$dll[2] = DllOpen ( "gdi32.dll")

Global $GUI = GUICreate ("Zoom x2 Au3", $MagWidth * $MagZoom, $MagHeight * $MagZoom, _ 
    MouseGetPos (0), MouseGetPos (1), $WS_POPUP+$WS_BORDER, $WS_EX_TOPMOST)

GUISetState(@SW_SHOW)

Global $LastPos[2] = [0,0]

While 1
    $MousePos = MouseGetPos() ; получаем координаты мыши
    If $LastPos[0] <> $MousePos[0] Or $LastPos[1] <> $MousePos[1] Or $Tr1=1 Then ; если позиция мыши и зум изменилась, то выполняем перемещение
        WinMove("Zoom x2 Au3", "", $MousePos[0] + $MagWidth/2 + 5, $MousePos[1], $MagWidth * $MagZoom, $MagHeight * $MagZoom)
        $LastPos[0] = $MousePos[0] ; и темпируем координаты и зум
        $LastPos[1] = $MousePos[1]
		$LastZoom = $MagZoom
		$Tr1=0
		MAG()
    EndIf
    Sleep(10)
WEnd

Func MAG()
    $DeskHDC = DLLCall("user32.dll","int","GetDC","hwnd",0)
    $GUIHDC = DLLCall("user32.dll","int","GetDC","hwnd",$GUI)
    If Not @error Then ; если без ошибок открыли DLL, то
        DLLCall("gdi32.dll", "int", "StretchBlt", "int", $GUIHDC[0], "int", _
            0, "int", 0, "int", $MagWidth * $MagZoom, "int", $MagHeight * $MagZoom, "int", $DeskHDC[0], "int", _
            MouseGetPos (0) - $MagWidth/2, "int", MouseGetPos (1) - $MagHeight/2, "int", $MagWidth ,"int", $MagHeight, _
            "long", $SRCCOPY)
        DLLCall("user32.dll","int","ReleaseDC","int",$DeskHDC[0],"hwnd",0)
        DLLCall("user32.dll","int","ReleaseDC","int",$GUIHDC[0],"hwnd",$GUI)
    EndIf
	; размер ящика выходного и координаты ящика сканирования
EndFunc

Func WM_MOUSEWHEEL($hWndGui, $MsgId, $wParam, $lParam)
    If $MsgId = $WM_MOUSEWHEEL Then
        $KeysHeld = BitAND($wParam, 0xFFFF) ; нажатый модификатор
		$direction = BitShift($wParam, 16)
        ; $X = BitShift($lParam, 16) ; координаты мыши
        ; $Y = BitAND($lParam, 0xFFFF)
		
        If $direction > 0 Then
			$MagZoom += 1
        Else
			$MagZoom -= 1
        EndIf
		If $MagZoom < 2 Then $MagZoom = 2

		Switch $KeysHeld
			Case 0 ; ничего
				$MagWidth = $LastWidth/$MagZoom
				$MagHeight =$LastHeight/$MagZoom
			Case 4 ; Shift
				If $direction > 0 Then
					$LastWidth = $MagWidth*$MagZoom
					$LastHeight =$MagHeight*$MagZoom
					
					$MagZoom -= 2
					
					$MagWidth = $LastWidth/$MagZoom
					$MagHeight =$LastHeight/$MagZoom
				Else
					$LastWidth = $MagWidth*$MagZoom
					$LastHeight =$MagHeight*$MagZoom
					
					$MagZoom += 2
					
					$MagWidth = $LastWidth/$MagZoom
					$MagHeight =$LastHeight/$MagZoom
				EndIf				
				$MagZoom=$LastZoom
			Case 8 ; Ctrl
				$LastWidth = $MagWidth*$MagZoom
				$LastHeight =$MagHeight*$MagZoom
		EndSwitch
		$Tr1=1
    EndIf
EndFunc

Func _Quit()
    DllClose ( $dll[1] )
    DllClose ( $dll[2] )
	Exit
EndFunc
 
Верх