Что нового

Как проставить Чекбоксы?

jobsdata

Новичок
Сообщения
3
Репутация
0
Добрый день.

Есть такое окошко (QiP) - вложение

Можно как то достучатся до этих чекбоксов и "проставить" которые мне нужны? Как то получить массив чекбоксов (ников) для дальнейшей манипуляции

До этого окна (Выборочная отправка) я добрался так:

Код:
$title = 'QIP Infium'

$win2 = 'Выборочная отправка'

WinSetState($title, '', @SW_MAXIMIZE)

WinActivate($title)

ControlClick($title, "", "[CLASS:TInfuToolBar.UnicodeClass; INSTANCE:1]", "left", 1, 151, 9)

WinSetState($title, '', @SW_HIDE)

WinActivate($win2)


т.е. по идеи я могу и там использовать ControlClick и нажать что надо. Но дело в том что мне надо именно выбранных Пользователей прокликать (они потом еще и меняться будут)

Если использовать такой код:

Код:
$a = ControlTreeView($win2, "", "[CLASS:TVirtualStringTree; INSTANCE:1]", "GetItemCount", '#0')

MsgBox(4096, "", $a, 10)


То информация верна, возвращает 10 "чекбоксов" - из Группа 1

Код:
$a = ControlTreeView($win2, "", "[CLASS:TVirtualStringTree; INSTANCE:1]", "GetItemCount", '#1')

MsgBox(4096, "", $a, 10)


То информация верна, возвращает N-ное кол-во "чекбоксов" (все как надо) - Группа 2

Грубо говоря, связаться с чекбоксами можно, но нельзя манипулировать (вкл/выкл)

Что не так делаю? Как прокликать нужные мне? Например Nick 1 и Nick 5 - не используя координаты клика.

Как я себе это представляю - как то я получаю массив пунктов-чекбоксов, в массиве (Nick1, Nick2 и т.д.) и циклом с условием отмечаю какие надо....

Выше описанное - возможно на не понятном Вам языке =) Опишу подробнее что нужно =)

Спасибо
 

Вложения

  • 123.jpg
    123.jpg
    41.8 КБ · Просмотры: 9

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Пример, массив пунктов (массив массивов)
ControlTreeView сказал(а):
"IsChecked" Возвращает состояние пункта. 1:с галочкой, 0:без галочки, -1:не checkbox.
"Check", "пункт" Устанавливает галочку на пункте (если пункт поддерживает это)
"Uncheck", "пункт" Снять галочку с пункта (если пункт поддерживает это)

Код:
;~ AutoIt Version: 3.3.14.5
#include <Debug.au3>

_Example()

Func _Example()
	Local $vTitle = "[REGEXPTITLE:Сведения о системе|System Information]"
	Local $vTreeView = "[CLASS:SysTreeView32; INSTANCE:1]"

	ShellExecute("msinfo32")
	$vTitle = WinWaitActive($vTitle)

	Local $aItems = _ControlTreeView_GetItems($vTitle, $vTreeView)
	If Not @error Then _DisplayItems($aItems, "Все пункты")

	Local $aItems = _ControlTreeView_GetItems($vTitle, $vTreeView, "#0|#2")
	If Not @error Then _DisplayItems($aItems, "Для пункта #0|#2")

	WinClose($vTitle)
EndFunc   ;==>_Example

Func _ControlTreeView_GetItems($vTitle, $vTreeView, $sOption = "")
	Local $aItems = -1, $sTemp, $iCount = ControlTreeView($vTitle, "", $vTreeView, "GetItemCount", $sOption)
	If $iCount Then
		If $sOption Then $sOption &= "|"
		Dim $aItems[$iCount][2]
		For $i = 0 To $iCount - 1
			$sTemp = $sOption & "#" & $i
			$aItems[$i][0] = ControlTreeView($vTitle, "", $vTreeView, "GetText", $sTemp)
			$aItems[$i][1] = _ControlTreeView_GetItems($vTitle, $vTreeView, $sTemp)
		Next
	EndIf
	Return SetError(Not IsArray($aItems), 0, $aItems)
EndFunc   ;==>_ControlTreeView_GetItems

Func _DisplayItems(Const ByRef $aItems, $sTitle = Default)
	_DebugArrayDisplay($aItems, $sTitle, Default, Default, Default, "GetText|SubItems")
	For $i = 0 To UBound($aItems) - 1
		If IsArray($aItems[$i][1]) Then
			_DisplayItems($aItems[$i][1], $aItems[$i][0])
		Else
			_DebugArrayDisplay($aItems[$i][1], $aItems[$i][0], Default, Default, Default, "GetText|SubItems")
		EndIf
	Next
EndFunc   ;==>_DisplayItems
 
Автор
J

jobsdata

Новичок
Сообщения
3
Репутация
0
Tempo сказал(а):
Пример, массив пунктов (массив массивов)

Сложновато как то для меня пока.
Можно как то определить текущую позицию на элементе?
Допустим:
Я попал в это окно с чекбоксами и с помощью
Код:
Send("{DOWN}")
перешел на какой либо пункт...ну например на пункт с именем Гость (кабинет 1001) - как можно получить текст (или как его правильно назвать) Гость (кабинет 1001)? т.е. получать данные текущей позиции
 

Вложения

  • 2.jpg
    2.jpg
    39.8 КБ · Просмотры: 3

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Справка "GetSelected"
Код:
ControlTreeView ()
 
Автор
J

jobsdata

Новичок
Сообщения
3
Репутация
0
Tempo сказал(а):
Справка "GetSelected"
Код:
ControlTreeView ()

Код:
$title = 'QIP Infium'

$win2 = 'Выборочная отправка'

WinSetState($title, '', @SW_MAXIMIZE)

WinActivate($title)

ControlClick($title, "", "[CLASS:TInfuToolBar.UnicodeClass; INSTANCE:1]", "left", 1, 151, 9)

WinSetState($title, '', @SW_HIDE)

WinActivate($win2)

$b = ControlClick($win2, "", "[CLASS:TVirtualStringTree; INSTANCE:1]", "left", 1, 96, 8)

Send("{DOWN}")

Send("{DOWN}")

$c = ControlTreeView($win2, "", "[CLASS:TVirtualStringTree; INSTANCE:1]", "GetSelected", $b)

MsgBox(4096, "", $c, 3) ;Возвращает выбранный пункт #0|#1

;ControlTreeView($win2, "", "[CLASS:TVirtualStringTree; INSTANCE:1]", "Check", $c); Не ставит галку


Не подскажете почему не отмечает чекбокс? Явно что то я не так делаю =)
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
jobsdata [?]
Можно как то определить текущую позицию на элементе?
[?]
Не подскажете почему не отмечает чекбокс? Явно что то я не так делаю =)

Это был ответ на то как определить "текущую позицию на элементе". В справке описаны все действия для ControlTreeView в том числе и "Check"
ControlTreeView сказал(а):
"Check", "пункт" Устанавливает галочку на пункте (если пункт поддерживает это).
 
Верх