Что нового

Координаты папок в Win7

hrafn

Новичок
Сообщения
3
Репутация
0
Здравствуйте.
Нигде не нашел, как можно получить координаты папок в Windows7 Explorer. Есть вариант решение для предыдущих версий Windows, но он не подходит потому что вместо SysListView32 теперь DirectUIHWND. Подскажите плз.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
hrafn
Можно скрин, что именно получить и откуда?
 
Автор
H

hrafn

Новичок
Сообщения
3
Репутация
0
К примеру координаты выделенного объекта относительно родительского <a href="http://autoit-script.ru/index.php?action=downloads;sa=downfile&id=381" />Безымянный.png</a>
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
hrafn
Посмотри этот пример:
http://www.autoitscript.com/forum/topic/153520-iuiautomation-ms-framework-automate-chrome-ff-ie/?p=1105530

При нажатии горячей клавиши получает координаты объекта под мышью, размер и т.д.
 
Автор
H

hrafn

Новичок
Сообщения
3
Репутация
0
Непонятно написал. Есть папка открытая в проводнике, внутри нее лежат файлы. У нас есть список имен этих файлов. По этим именам нужно найти координаты иконок этих файлов в проводнике.
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
hrafn [?]
потому что вместо SysListView32 теперь DirectUIHWND
То есть вместо SysListView32 нужно указать в скрипте DirectUIHWND?
Посмотри _WinAPI_WindowFromPoint и AccessibleObjectFromPoint

WSWR
Ужасно отработал скрипт (на WinXP) по ссылке, прибил эксплорер (перезапустил), мышь показывает зависание, вызов диспетчера задач не работает, "Пуск" не нажимается, пришлось делать харакири компьютеру.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
AZJIO
На Win 7 64-bit прекрасно работает
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
А я, кстати, написал пример, но забыл выложить)

Код:
#include <UIAWrappers.au3>
#include <CUIAutomation2.au3>

HotKeySet('{ESC}', 'Close') ; Set ESC as a hotkey to exit the script.
HotKeySet('{Pause}', 'GetElementInfo')

$sPattern = '1.txt|Новая папка' ; файлы
_UIA_Init()


While 1
	Sleep(100)
WEnd

Func GetElementInfo()

	Local $t = TimerInit()

	Local $hWnd, $sName, $sClass, $sNameElement, $k, $sText = ''
	Local $tStruct = DllStructCreate($tagPOINT)

	Local $aP = StringSplit($sPattern, '|')

	For $x = 0 To @DesktopWidth Step 25
		For $y = 0 To @DesktopWidth Step 25

			DllStructSetData($tStruct, 'x', $x)
			DllStructSetData($tStruct, 'y', $y)

			$objUIAutomation.ElementFromPoint($tStruct, $pUIElement)
			$oUIElement = ObjCreateInterface($pUIElement, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)

			$objUIAutomation.RawViewWalker($pTW)
			$oTW = ObjCreateInterface($pTW, $sIID_IUIAutomationTreeWalker, $dtagIUIAutomationTreeWalker)
			If IsObj($oTW) = 0 Then ContinueLoop

			Local $parentHandle

			$oTW.getparentelement($oUIElement, $parentHandle)

			$objParent = ObjCreateInterface($parentHandle, $sIID_IUIAutomationElement, $dtagIUIAutomationElement)
			If IsObj($objParent) = 0 Then ContinueLoop

			If IsObj($oUIElement) Then

				$sName = _UIA_getPropertyValue($objParent, $UIA_NamePropertyId)
				$sClass = _UIA_getPropertyValue($oUIElement, $UIA_ClassNamePropertyId)
				$sNameElement = _UIA_getPropertyValue($oUIElement, $UIA_NamePropertyId)
				If StringRegExp($sName, $sPattern, 0) And $sClass = 'UIProperty' And $sNameElement = 'Имя' And Not StringRegExp($sText, $sPattern, 0) Then
					$sText &= $sName & '_'
					$sPattern = StringRegExpReplace($sPattern, '(' & $sName & '\|)' & '|' & '\|(' & $sName & ')', '')
					ConsoleWrite(_UIA_getPropertyValue($oUIElement, $UIA_BoundingRectanglePropertyId) & @CRLF)
					$k += 1
					If $k = $aP[0] Then ExitLoop 2
				EndIf
			EndIf
		Next
	Next
	ConsoleWrite(TimerDiff($t) & @LF)
EndFunc   ;==>GetElementInfo

Func Close()
	Exit
EndFunc   ;==>Close
 
Верх