Что нового

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

Sanke

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

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

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

Заранее спасибо.
 
Автор
S

Sanke

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

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ленивым помогать тут не любят. Если "как не искал, не смог найти", значит "не искал вообще, найдите за меня". 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
Репутация
182
Здесь неплохой пример увеличилки.
Прицел , думаю сам сможешь прикрутить..
Как определить цвет zlo-kazan тебе уже написал...
 
Автор
S

Sanke

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

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
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
 
Верх