Что нового

[Автоматизация] Поиск каталога

siv14

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

Как можно установить определенный каталог в окошке ComboBox.
В само окно я перехожу, но как организовать в нем Поиск, так и не нашел.
Помогите разобраться с данной проблемой.

Рисунок во вложении.
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
siv14
Если окно (открытия, сохранения) создано на основе стандартного, то можно в поле для ввода имени ввести адрес папки и "нажать Enter"...
 
Автор
S

siv14

Новичок
Сообщения
12
Репутация
1
snoitaleR сказал(а):
siv14
Если окно (открытия, сохранения) создано на основе стандартного, то можно в поле для ввода имени ввести адрес папки и "нажать Enter"...

Только как это сделать? Все что для меня вожможно я уже перепробовал!
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
siv14
С помощью AU3INFO.EXE нужно узнать заголовок $TITLE окна, текст $TEXT можно оставить пустым, а также класс $CLASS1 поля для ввода имени файла и класс $CLASS2 кнопки "Открыть" или "Сохранить"...

Код:
$TITLE="Выбор списка отозванных сертификатов"
$TEXT=""
$CLASS1="[CLASS:RichEdit20W;INSTANCE:1]"
$CLASS2="[CLASS:Button;INSTANCE:1]"
$FOLDER="C:\Otozv"
ControlSetText($TITLE,$TEXT,$CLASS1,$FOLDER)
ControlClick($TITLE,$TEXT,$CLASS2)
ControlSetText($TITLE,$TEXT,$CLASS1,"")
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
snoitaleR
Одного клика может не хватить:

Код:
$TITLE = "Выбор списка отозванных сертификатов"
$FOLDER = @TempDir

ControlSetText($TITLE, "", "Edit1", $FOLDER)
ControlClick($TITLE, "", "Button2", "Main", 2)
ControlSetText($TITLE, "", "Edit1", "")
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
CreatoR
А в каком приложении? Я не сталкивался с такой ситуацией...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
snoitaleR [?]
в каком приложении?
Это не связано с приложением (хотя иногда всё же немного связано), а скорее с производительностью системы.
Дело в том что у меня например, не успивает срабатывать нажатие на кнопку прежде чем поле очищается, тогда получается что кнопка нажата с пустым полем, и ничего не происходит.

Есть предположение что это из за использования «PostMessage» для ControlClick, который отправляет сообщение (BM_CLICK) элементу, и при этом не ожидает получения сообщения, по идее нужно использовать «SendMessage»...

Код:
#include <ButtonConstants.au3>

$TITLE = "Выбор списка отозванных сертификатов"
$FOLDER = @TempDir

ControlSetText($TITLE, "", "Edit1", $FOLDER)
;ControlClick($TITLE, "", "Button2", "Main", 2)
$hButton = ControlGetHandle($TITLE, "", "Button2")
DllCall("user32.dll", "int", "SendMessage", "hwnd", $hButton, "uint", $BM_CLICK, "int", 0, "int", 0)
ControlSetText($TITLE, "", "Edit1", "")
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
siv14
Папка Otozv присутствует в списке, когда вы его раскрываете нажатием ЛКМ? Если да, то можно её выбрать следующим образом:
Код:
Global $bActive = False

HotKeySet("!q", "_Exit")

While 1
	_SelectComboBox("Выбор списка отозванных сертификатов", "", "Otozv")
	Sleep(250)
WEnd

Func _SelectComboBox($sTitle, $sText, $sString)
	If Not $bActive And BitAnd(WinGetState($sTitle),2) Then
        $bActive = Not $bActive
		If	ControlCommand($sTitle, $sText, "[CLASS:ComboBox; INSTANCE:1]", "FindString", $sString) <> 0 Then
			ControlCommand($sTitle, $sText, "[CLASS:ComboBox; INSTANCE:1]", "SelectString", $sString)
			ControlClick ( $sTitle, $sText, "[CLASS:ComboBox; INSTANCE:1]" , "Left" , 2)
		EndIf
    ElseIf $bActive And Not BitAnd(WinGetState($sTitle),2) Then
        $bActive = Not $bActive
    EndIf
EndFunc

Func _Exit()
	Exit
EndFunc
 
Автор
S

siv14

Новичок
Сообщения
12
Репутация
1
CreatoR сказал(а):
snoitaleR
Одного клика может не хватить:

Да, действительно с оного раза не получилось.


Добавлено:
Сообщение автоматически объединено:

Garrett сказал(а):
siv14
Папка Otozv присутствует в списке, когда вы его раскрываете нажатием ЛКМ?

Нет, всегда резные папки


Добавлено:
Сообщение автоматически объединено:

Я все же использовал вот этот кусок и прога дальше отработалась.

Код:
$TITLE="Выбор списка отозванных сертификатов"
$TEXT=""
$CLASS1="[CLASS:Edit;INSTANCE:1]"
;$CLASS2="[CLASS:Button;INSTANCE:2]"
$CLASS2="[CLASS:SysListView32;INSTANCE:1]"
$FOLDER="D:\Otozv\"
ControlSetText($TITLE,$TEXT,$CLASS1,$FOLDER)
ControlClick($TITLE,$TEXT,$CLASS2)
ControlSetText($TITLE,$TEXT,$CLASS1,"")

Sleep(500)
Send("{RIGHT}")
Send("{ENTER}")


Добавлено:
Сообщение автоматически объединено:

Большое спасибо всем кто помог в решении данного вопроса!
 
Верх