Что нового

PixelSearch для перекрытого окна

Arei

Скриптер
Сообщения
938
Репутация
115
как получить PixelSearch для нашего Gui,если учесть что оно является неактивным и притом поверх него ещё одно окно.Заранее спасибо.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Re: PixelSearch для перекрытого окна.

Arei
используй хендл окна
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
Re: PixelSearch для перекрытого окна.

я так делал
Код:
$CurWin =""
Global $CurWin_hwnd = WinGetHandle($CurWin)
$Rezul = PixelSearch($Xc, $Yc, $Xv, $Yv, $Col, $Dip_C,1,$CurWin_hwnd)


но он только для неактивного, а если поверх него, что то есть то не работает.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Re: PixelSearch для перекрытого окна.

Arei
тогда двигай окно. можно за пределы экрана и там уже опрашивать. только желательно выставить сначала опцию относительного счета координат
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,662
Репутация
2,461
Re: PixelSearch для перекрытого окна.

Arei
Не нужно добавлять точку в конце названия темы.
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
Код:
Opt("MouseCoordMode", 2)
Opt("PixelCoordMode", 2)

Kaster это?И тогда как его возвращать обратно?

CreatoR убрал,но почему нельзя ставить?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
Arei
если кликать не собираешься, то MouseCoord можно не менять. а вообще, если наличие окна важно, то лучше просто давать ему фокус на время опроса цвета. вариант с задвиганием окна подходит если само окно уже не нужно
 

edward_freedom

Осваивающий
Сообщения
200
Репутация
44
Можно искать и без фокуса
Код:
Func _SearchPix($x1, $y1, $x2, $y2, $coll, $shvar=0, $step=1)
    $ARGB = _WinAPI_IntToDWord(BitOR($coll, 0xFF000000))
    $Size = WinGetClientSize($hWnd)
    $L1 = $Size[0]*($y1-1)+$x1
    $L2 = $Size[0]*($y2-1)+$x2
    $L = $Size[0] * $Size[1]
    $tBits = DllStructCreate('dword[' & $L & ']')
    _WinAPI_GetBitmapBits($hBMP, 4 * $L, DllStructGetPtr($tBits))
    $Offset = -1
    For $i = $L1 To $L2 Step $step
        If DllStructGetData($tBits, 1, $i) = $ARGB Then
            $Offset = $i
            ExitLoop
        EndIf
    Next
    If $Offset = -1 Then
        Return SetError(1)
    Else
        $x = Mod($Offset, $Size[0]) - 1
        $y = Ceiling($Offset / $Size[0]) - 1
        Local $coor[2] = [$x, $y]
        Return $coor
    EndIf
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,662
Репутация
2,461
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
Спасибо CreatoR, почитаю,
edward_freedom x1 координата х верхняя
y1 координата y верхняя
x2 координата х нижняя
y2 координата y нижняя
$coll погрешность?
0xFF000000 цвет? ну это риторический вопрос.
 

edward_freedom

Осваивающий
Сообщения
200
Репутация
44
Прочти тут.Скрипт ищет в неактивном окне или перекрытом, даже за границами экрана
http://autoit-script.ru/index.php?topic=3943.msg36491#msg36491
 
Автор
A

Arei

Скриптер
Сообщения
938
Репутация
115
извините,но ничего не вижу в той теме.
 

Kinjeiro

Новичок
Сообщения
1
Репутация
0
Аналогично. Функция
Код:
_WinAPI_BitBlt($hMemDC, 0, 0, $Size[0], $Size[1], $hDC, 0, 0, $SRCCOPY)

не копирует перекрытое окно.
Вместо нужного результата видим кусок принскрина с перекрывающими окнами.

Вот полный код:
Код:
Func _SearchPix($x1, $y1, $x2, $y2, $color, $shvar=0, $step=1, $hWnd = 0, $withoutFocus=-1)
	if Not $hWnd Then $hWnd = _findCurWindowHandle()
	if $withoutFocus == -1 Then $withoutFocus = get_WithoutFocusMode()
		
	$hWnd = WinGetHandle($hWnd)
	
	Local $Size[2] = [$x2 - $x1, $y2 - $y1]
	Local $hDC = _WinAPI_GetDC($hWnd)
	Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
	Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $Size[0], $Size[1])
	Local $hSv = _WinAPI_SelectObject($hMemDC, $hBitmap)
	
	_WinAPI_BitBlt($hMemDC, 0, 0, $Size[0], $Size[1], $hDC, $x1, $y1, $SRCCOPY)
	 
	_WinAPI_SelectObject($hMemDC, $hSv)
	_WinAPI_DeleteDC($hMemDC)
	_WinAPI_ReleaseDC($hWnd, $hDC)
	
	_PaintBitMap($Size, $hBitmap)


	;----------------------------------------
	
	sleep(5000)
	Exit
EndFunc


Подскажите, пожалуйста.
 
Верх