Показать полную графическую версию : [Архив - Часть 1.2] AutoIt скрипты
Dirk Diggler
10-02-2006, 10:47
Внимание!
Тема переведена в архивное состояние
[hr]Архивы старых тем по AutoIt (http://forum.oszone.net/forumdisplay.php?f=61&filter_string=%C0%F0%F5%E8%E2+-+%F7&filter_by=title) или они же в 7z архиве (версии для печати) - 846 кб (http://tools.oszone.net/Vadikan/forum_archives/autoit_threads_archive.7z)
(настоятельно рекомендуется к прочтению/поиску)
Руководство к действию по работе c AutoIt.
Можно ли с помощью AutoIt выбрать каталог? Хочу нацарапать оболочку, которая мне будет конфиги для nnBackup писать, дык выбрать каталог для бэкапа пока только вручную получается... Нельзя ли как-нть вывалить стандартный диалог по выбору файлов-папок, и получить из него результат действий пользователей?
Dirk Diggler
10-02-2006, 12:16
А также вопрос про - как перебрать все элементы контрола типа List, для проверки, совпадает ли новый его элемент с уже существующими?
Sanja Alone
11-02-2006, 02:22
Dirk Diggler
вывалить стандартный диалог по выбору файлов-папокFileOpenDialog ( "title", "init dir", "filter" [, options [, "default name"]] )
как перебрать все элементы контрола типа ListСм. в сторону ControlCommand ( "title", "text", controlID, "command", "option" ), ControlListView ( "title", "text", controlID, "command" [, option1 [, option2]] )
Это не вопрос, но грабли... Вот два способа вызова одного скрипта - откомпилированного в EXE и нет:script.au3 "%ALLUSERSPROFILE%\Desktop"script.exe "%ALLUSERSPROFILE%\Desktop"Первый восстанавливает переменную окружения ALLUSERSPROFILE нормально, а вот второй нет...
Вывод: используем откомпилированные скрипты (принимающие параметры) только из CMD-файлов!
forumuser
13-02-2006, 13:27
Может кому-то понадобиться, потому что я не сразу додумался как это сделать :)
Понадобилось мне как-то переключить раскладку во время установки программы. Первое что пришло в голову - Send("+^"). И обломался я сильно, и полез в инет за ответом!:search: Найти у далось только два поста в архиве, которые мне не помогли. :sorry: Но стоило тщательнее порыться в Хелпе, как ответ тут же нашелся - Send("{LSHIFT}+{LCTRL}"). Удачи:)
Dirk Diggler
13-02-2006, 19:27
Как определить наличие хоста? Встроенный пинг не работает. Проверил тремя разными способами, вот последний:
MsgBox(0,"",ping("192.168.0.1"))
ping("192.168.0.1")
MsgBox(0,"",@error)
говорит, что хост доступен(23 мс, @error=0) , несмотря на то, что моя подсетка 192.168.100.0/24, а вот что виндовый пинг говорит
Ответ от 217.106.xxx.xxx: Заданная сеть недоступна.
Статистика Ping для 192.168.0.1:
Пакетов: отправлено = 1, получено = 1, потеряно = 0 (0% потерь),
Приблизительное время приема-передачи в мс:
Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек Может, его смущает выделенное? Но такой случай в докуменатции описан, @error д.б. равен 2, так что за отмазку не канает
Аутоитовский пинг даже на ping("192.168.0.0") говорит 23, т.е. ответ через 23 мс.
Dirk Diggler
13-02-2006, 19:30
да и в приведенном в документации примере стоит заменить DNS-имя на IP, как сразу оно перестает работать как надо
$var = Ping("10.0.0.1",2500)
If $var Then ; also possible: If @error = 0 Then ...
Msgbox(0,"Status","Online, roundtrip was:" & $var)
Else
Msgbox(0,"Status","An error occured with number: " & @error)
EndIf
Sanja Alone
14-02-2006, 03:05
forumuser
Для обсуждения общих вопросов по AutoIt специально создана эта тема, новых создавать не нужно (Правила Форума (http://forum.oszone.net/announcement.php?f=61&announcementid=43)).
Вот здесь описаны еще 2 способа переключения раскладки:
AutoIt скрипты - введение и FAQ (http://oszone.net/display.php?id=3663) (с возм-тью переключения на конкретный язык, а не по кругу).
Dirk Diggler
Пробовал вроде активные хосты определяет, по крайней мере по IP...
192.168.0.0 (моя подсеть) дает ошибку 3
на любые другие сети или несуществующие IP дает ошибку 1
Dirk Diggler
14-02-2006, 13:20
проблема однозначно существует, в случае ответа от роутера по ICMP Autoit думает, что получил ответ от искомого хоста. Нашел аналогичную тему на родном для AutoIt форуме, насколько мой английский позволяет, понял, что баг был исправлен в одной из текущих бет, я скачал январскую(или уже февральскую) beta 106, пока не пробовал. Вы не бету пользуете случаем?
Нет, не бета, у меня наоборот DNS не отзывается. Фича новая, значит без глюков не обойтись. Если бы не ваш пост не сунулся бы в справку и не обнаружил что версия уже устарела... :)
Dirk Diggler
17-02-2006, 11:02
А как отследить, что было активизировано окно "Запуск программы"(это которое Пуск -> Выполнить)? Оно собственного заголовка не имеет.
А разве "Запуск программы" не заголовок? Вроде работает:
WinWait("Запуск программы")
MsgBox(0,"Внимание!","Окно активировано!")
Dirk Diggler
17-02-2006, 21:44
Да, но теперь другая проблема... Я пишу задачу для nnCron, которая при активизации этого окна будет переключать в нем раскладку. Использовал пример из FAQ.
Суть проста - при логоне в цикле пускается нижеследующий скрипт, который сперва ждет активизации окна, переключает раскладку, а потом ждет деактивизации, и завершает работу. Тут же запускается по новой, ждёт и т.п. Как можно убедиться, переключение раскладки - не работает! Я жму Win-R, вижу окно и... печатаю в нем по-русски. А как указано в секции параметры, должен бы по-английски... а в трее балун кажет, что уже WinWaitNotActive выполняется, значит _SetKeyboardLayout уже отработал... Тестировал скрипт на одиночном его запуске, добавил строку, которой проверяю правильность полученного хэндла... все вроде правильно....
Const $DEU = "00000407" ;Немецкий (стандартный)
Const $ENU = "00000409" ;Английский (США)
Const $FRA = "0000040C" ;Французский (стандартный)
Const $FIN = "0000040D" ;Финский
Const $ITA = "00000410" ;Итальянский
Const $PLK = "00000415" ;Польский
Const $RUS = "00000419" ;Русский
Const $UKR = "00000422" ;Украинский
Const $BLR = "00000423" ;Белорусский
Const $EST = "00000425" ;Эстонский
Const $LTH = "00000426" ;Латвийский
Const $LVI = "00000427" ;Литовский
Const $CHS = "00000804" ; Chinese (People's Republic of China)
Const $CHT = "00000404" ; Chinese (Taiwan)
;--------=========================ПАРАМЕТРЫ========================-------------
;
$WinTitle = "Запуск программы"
$layout = $ENU
;--------=========================КОД========================-------------
Opt("TrayIconDebug", 1)
Opt("WinTitleMatchMode", 2)
WinWaitActive($WinTitle)
Opt("WinTitleMatchMode",4)
$hWnd = WinGetHandle("last")
; раскомментируйте следущую строку, чтобы убедиться, что handle получается правильный!
; WinClose($hWnd)
;переключение раскладки в окне, определяемом указателем $hWnd
; вот эта функция не работает
_SetKeyboardLayout($layout, $hWnd)
Opt("WinTitleMatchMode", 2)
WinWaitNotActive($WinTitle)
Exit
; --------=========================ПОДВАЛ========================-------------
Func _SetKeyboardLayout($sLayoutID, $hWnd)
Local $WM_INPUTLANGCHANGEREQUEST = 0x50
Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $ret[0])
EndFunc
Может, это не работает потому, что у меня помимо русской и английской стоит также и китайская раскладка?
Dirk Diggler
19-02-2006, 00:38
спасибо за внимание, конечно, в общем, поборол проблему. теперь я, переключаясь в окно cmd.exe или нажимая Win+R, могу не беспокоиться за раскладку, она у меня всегда английская.... если кому-то надо, выложу скрипты...
Sanja Alone
19-02-2006, 02:55
Dirk Diggler
если кому-то надо, выложу скрипты...Это действительно FAQ - сам видишь... Можешь и свой вариант добавить - многим это может пригодиться.
Dirk Diggler
19-02-2006, 13:41
в случае с окном "Запуск программы..." из FAQ не подошло.
Dirk Diggler
19-02-2006, 19:36
Как сделать так, чтобы элементы TreeView можно было перетаскивать из одной ветки в другую?
Sanja Alone
20-02-2006, 03:05
Dirk Diggler
в случае с окном "Запуск программы..." из FAQ не подошло.Как ты сам понимаешь, все ситуации нельзя предвидеть. Я у себя на компе вообще не использую ни одного из приведенных в FAQ методов - у меня ф-ции Send и ControlSetText нормально отрабатывают при посылке как англ. так и рус. символов без всякого переключения раскладки. Уж не знаю с чем связана такая беспроблемность, но это факт... Теперь по сути - если есть желание помочь народу, то приведи свой листинг в этой теме; если метод окажется работоспособным, то он также будет включен в FAQ.
Как сделать так, чтобы элементы TreeViewAutoIt не умеет работать с такими эл-тами.
Dirk Diggler
20-02-2006, 10:28
Send и ControlSetText нормально отрабатывают при посылке Я писал эти скриптики не для Send и ControlSetText, а для исключения сиуации, когда я хочу запустить regedit, а он запускаю купувше
AutoIt не умеет работать с такими эл-тами. Ну у него есть же контрол TreeView, вполне стандартный виндовый. Он порождает вполне виндовые события... Может, можно как-то написать обработчик?
В целом задача стоит так: есть древовидная структура - корень, от него ветки, достаточно одного уровня, т.е. ветка в ветке уже не обязательно, в этих ветках - некие элементы. Надо лишь одну вещь сделать - чтобы эти элементы можно было легко перекидывать из одной ветки в другую. может, использовать что-то отличное от TreeView?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.