Что нового

Разбиваем Desktop на части

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Данный пример разбивает Desktop на части и возвращает массив координат каждой из частей. Может пригодится для передачи screenshot'a рабочего стола от сервера к клиенту и наоборот, данная функция запускается 1 раз, далее работаем уже с массивом.

Код:
Код:
#Include <Array.au3>

$aArea = Desktop_GridArea(100)
If (IsArray($aArea) And ($aArea[0][0] > 0)) Then
  _ArrayDisplay($aArea)
EndIf

Func Desktop_GridArea($iDimension)
	Local $aArea[1][4], $iWidth, $iHeight, $xPos, $yPos, $xCount, $yCount, $iY, $iX
	$iWidth  = @DesktopWidth
	$iHeight = @DesktopHeight
	While 1
		$xPos += $iDimension
		If ($xPos > $iWidth) Then
			ExitLoop
		EndIf
		$xCount += 1
	Wend
    While 1
		$yPos += $iDimension
		If ($yPos > $iHeight) Then
			ExitLoop
		EndIf
		$yCount += 1
	Wend
    For $iY = 0 To $yCount
		For $iX = 0 To $xCount
			$aArea[0][0] += 1
			ReDim $aArea[$aArea[0][0] + 1][Ubound($aArea, 2)]
			$aArea[$aArea[0][0]][0] = $iDimension * $iX
			$aArea[$aArea[0][0]][1] = $iDimension * $iY
			If ((($aArea[$aArea[0][0]][0]) + $iDimension) <= $iWidth) Then
				$aArea[$aArea[0][0]][2] = $iDimension
			Else
                $aArea[$aArea[0][0]][2] = ($iWidth - $aArea[$aArea[0][0]][0])
            EndIf
			If ((($aArea[$aArea[0][0]][1]) + $iDimension) <= $iHeight) Then
				$aArea[$aArea[0][0]][3] = $iDimension
			Else
				$aArea[$aArea[0][0]][3] = ($iHeight - $aArea[$aArea[0][0]][1])
            EndIf
		Next
	Next
   Return $aArea
EndFunc

Параметр $iDimension - это высота и ширина куска, в $aArea[0][0] - количество частей.
 
Верх