Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты

Закрытая тема
Настройки темы
[архив - Часть 2] AutoIt скрипты

(*.*)


Сообщения: 36490
Благодарности: 6675


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 27-01-2008
Внимание!
Тема переведена в архивное состояние







(настоятельно рекомендуется к прочтению/поиску)


Руководство к действию по работе c AutoIt.


Сайт программы
Русская справка
Коллекция AutoIt скриптов от Sanja Alone
Коллекция AutoIt скриптов от MSFN (могут быть устаревшие).
Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо).



Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров.
Цитата Vadikan:
В теме уже свыше 500 сообщений и поиск нужной информации в ней усложняется. Есть предложение собрать все решения (скрипты) и разместить их на Wiki по принципу "один скрипт - одна статья wiki", добавляя статьи в категорию Autoit. Речь, в принципе, идет об общих решениях, а не о скриптах для установки конкретной программы. Название статьи, очевидно, должно отражать назначение скрипта. Затем можно в шапке просто разместить ссылки на статьи Wiki.

-------
Канал Windows 11, etc | Чат @winsiders

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 05-02-2006

 

Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


gregaz
Цитата:
Действительно есть,оказывается <Руководство по консольной версии RAR > - там все прописано
Я имел ввиду консольную справку (cmd /k "Rar.exe" /?), а о том, что есть руководство, я почему-то не подумал...

Отправлено: 20:26, 19-06-2007 | #41



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


proxy
Цитата:
как быть?
Если для GUICtrlCreateListView поставить GUICtrlSetOnEvent, то оно срабатывать будет при нажатии на заголовок (Column), для того чтобы срабатывало при нажатии в пустом (точнее в любом) месте ListView, нужно совместить события (нажатие мышки и наведение курсора мышки над ListView контролем)...

Код: Выделить весь код
#include <GuiConstants.au3>
Opt("GuiOnEventMode", 1)

$GUI = GUICreate("Test")
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "LV_Event")

$ListViewID = GUICtrlCreateListView("Column", 20, 40)

GUISetState()

While 1
    Sleep(10)
WEnd

Func LV_Event()
    Local $CursorInfoArr = GUIGetCursorInfo($GUI)
    If $CursorInfoArr[4] = $ListViewID Then MsgBox(0, "", "Ok, List View was Clicked")
EndFunc

Func Quit()
    Exit
EndFunc
точно также и с табами:

Код: Выделить весь код
#include <GuiConstants.au3>
Opt("GuiOnEventMode", 1)

$GUI = GUICreate("Test")
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "Tab_Event")

$TabID = GUICtrlCreateTab(20, 40)
GUICtrlCreateTabItem("Tab Item")

GUISetState()

While 1
    Sleep(10)
WEnd

Func Tab_Event()
    Local $CursorInfoArr = GUIGetCursorInfo($GUI)
    If $CursorInfoArr[4] = $TabID Then MsgBox(0, "", "Ok, Tab control was Clicked")
EndFunc

Func Quit()
    Exit
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 19-06-2007 в 22:02. Причина: Поправка в коде


Отправлено: 22:00, 19-06-2007 | #42


Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


объект: "Scripting.Dictionary" - Сортировка данных в словаре
Использование:
SortDictionary($objDict, flag)
$objDict - словарь (как объект)
flag - 0 сортировка по ключам(key); 1 сортировка по элементам(item)
Код: Выделить весь код
$Dict = ObjCreate("Scripting.Dictionary")

;~ Наполняем словарь неотсортированными данными:
$Dict.Add ("3", "Delta")
$Dict.Add ("1", "Foxtrot")
$Dict.Add ("4", "Bravo")
$Dict.Add ("2", "Echo")
$Dict.Add ("6", "Alpha")
$Dict.Add ("5", "Charlie")

;~ Сортировка:
SortDictionary($Dict, 0)

;~ Просмотр результатов сортировки:
For $o In $Dict
	MsgBox(0+262144 ,$o, $Dict($o) )
Next

;~ Эта функция основана на:
;~ http://support.microsoft.com/support/kb/articles/q246/0/67.asp
Func SortDictionary(ByRef $objDict, $intSort=0)
	Local Const $dictKey  = 0
	Local Const $dictItem = 1
	Local $strDict[1]
	Local $objKey
	Local $strKey, $strItem
	Local $intCount, $i, $j
	$intCount = $objDict.Count
	If $intCount > 1 Then
		ReDim $strDict[$intCount][2]
		$i = 0
		For $objKey In $objDict
			$strDict[$i][$dictKey]  = String($objKey)
			$strDict[$i][$dictItem] = String($objDict($objKey))
			$i = $i + 1
		Next
		For $i = 0 To $intCount-2
			For $j = $i To $intCount-1
				If StringCompare($strDict[$i][$intSort], $strDict[$j][$intSort]) > 0 Then
					$strKey  = $strDict[$i][$dictKey]
					$strItem = $strDict[$i][$dictItem]
					$strDict[$i][$dictKey]  = $strDict[$j][$dictKey]
					$strDict[$i][$dictItem] = $strDict[$j][$dictItem]
					$strDict[$j][$dictKey]  = $strKey
					$strDict[$j][$dictItem] = $strItem
				EndIf
			Next
		Next
		$objDict.RemoveAll
		For $i = 0 To $intCount-1
		$objDict.Add ($strDict[$i][$dictKey], $strDict[$i][$dictItem])
		Next
	EndIf
EndFunc
P.S. "Scripting.Dictionary" имеет свойства и методы которые делают его функциональней обычных массивов, плюс простота использования и высокая скорость обработки. А с этой функцией сортировки, словарь может стать серьёзным конкурентом для одномерных массивов.
Для тех кто не знаком с принципами работы этого объекта, есть хорошая ссылка, котрую дал мне Creat0R :http://www.autoitscript.com/forum/in...56?entry352256
Также, описание свойств и методов можно найти на MSDN.


Отправлено: 23:45, 19-06-2007 | #43


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


На офф. форуме нашел функцию, которая казалось бы, воплотит в реальность мою давнюю “хотелку” ...

Вот функция:

Код: Выделить весь код
Func SetParent($hWndChild, $hWndNewParent)
    Local $vRtn = DllCall("USER32.DLL", "hwnd", "SetParent", "hwnd", $hWndChild, "hwnd", $hWndNewParent)
    Return $vRtn[0]
EndFunc
Судя по её назваению и содержанию, я предположил что она позволяет присваивать одно окно к другому (в соотношении родительское-дочернее), и делая как бы дочернее окно “прикреплённым” к родительскому, но после долгих тестировании, присваивании якобы родительскому окну атрибута @SW_DISABLE и т.п, так ничего и не вышло .
Окно однако становится дочерним/родительским, но не так как мне этого хотелось...

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

Код: Выделить весь код
$Hwnd = WinGetHandle(WinGetTitle(""))

_MsgBox(0, "", "", $Hwnd)

Func _MsgBox($MsgBoxType, $MsgBoxTitle, $MsgBoxText, $mainGUI="")
    $ret = DllCall ("user32.dll", "int", "MessageBox", _
            "hwnd", $mainGUI, _
            "str", $MsgBoxText , _
            "str", $MsgBoxTitle, _
            "int", $MsgBoxType)
    Return $ret [0]
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 02:15, 20-06-2007 | #44


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Diamond
ИМХО у "Scripting.Dictionary" только одно преимущество перед массивами AutoIT - индекс может быть не только числовым, но и текстовым... другими словами это означает штатную поддержку _ArraySearch(), которая в AutoIT доступна только через UDF... Во всех остальных случаях не вижу причин для замены ими штатных массивов... Между прочим функция SortDictionary() по большому счету ничем не отличается от _ArraySort() (кроме отсутствия контроля ошибок), поэтому быстрей она работать не может по определению...
Подробно: http://www.osp.ru/win2000/2006/07/3643019

Creator
Цитата:
На офф. форуме нашел функцию
угу, видел эту функцию, только это не совсем то... а точней совсем не то:
Цитата:
прикладная программа обычно использует дочерние окна, чтобы поделить рабочую область родительского окна на функциональные области
т.е. грубо говоря применение это функции превращает окно в контрол другого окна, источник: http://www.firststeps.ru/mfc/winapi/win/r.php?18
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:58, 20-06-2007 | #45


Аватара для schel4ok

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


А кто-нибудь знает как запускать inf файлы при помощи AutoIt?

Отправлено: 11:19, 20-06-2007 | #46


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
Вообще-то, WinWaitActive() по умолчанию работает только с видимым текстом
Тогда я вообще ничего не понимаю .
Почему такая проверка:
Код: Выделить весь код
if WinWaitActive('Мастер новых подключений', 'Выберите, надо ли автоматически подключаться к Интернету','5' )==1 Then
      Send ( '{UP}{ENTER}' ) 
EndIf
не срабатывает
Если это окно не появляется, то нажатие стрелки вверх и энтера всё равно производится. В чем ошибаюсь, может как-то проверять надо другим способом?

Отправлено: 12:41, 20-06-2007 | #47


Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


amel27
Цитата:
ИМХО у "Scripting.Dictionary" только одно преимущество перед массивами AutoIT - индекс может быть не только числовым, но и текстовым... другими словами это означает штатную поддержку _ArraySearch(), которая в AutoIT доступна только через UDF... Во всех остальных случаях не вижу причин для замены ими штатных массивов...
Действительно, для "Scripting.Dictionary" функция _ArraySearch(), по большому счёту не нужна, поскольку он имеет метод Exists, но это не единственный его плюс. Например, чтобы произвести добавление, удаление или замену элементов, массивы используют UDF-функции, а при работе со словарём зависимость от UDF также отпадает.
Цитата:
Между прочим функция SortDictionary() по большому счету ничем не отличается от _ArraySort() (кроме отсутствия контроля ошибок), поэтому быстрей она работать не может по определению...
Если честно, я их ещё не сравнивал... А по поводу скорости, согласен, но я и не утверждал что она работает быстрее, ведь сам факт использования в ней массивов, говорит об обратном. Её плюс только в том, что она адаптирована для работы со словарём, и то что она компенсирует отсутствие штатной сортировки (что-то вроде udf, для "Scripting.Dictionary").

Отправлено: 14:46, 20-06-2007 | #48


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


хм....., если Creat0R это стиль жизни...то как же тебя именовать?

В любом случае, Человек живущий и создающий - Спаибо, уже витал ответ в голове но небыло времени проверить...
а так и бестрее и вернее выйдет ))) Продолжу вкладывать свои силы в подобный тебе стиль жизни.. )

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 15:28, 20-06-2007 | #49


Аватара для ChVL

Старожил


Сообщения: 254
Благодарности: 38

Профиль | Отправить PM | Цитировать


В обычном режиме скрипт работает нормально: мелькают окна, но установка проходит автоматом до конца.
При использовании ключа /VERYSILENT идёт скрытый режим и натыкается на место, когда на экране одновременно два окна. Послать команду надо в верхнее окно, но скрипт его упорно не видит. Как победить?

Добавлено:
Разобрался. Оказалось, что это баг самой подопытной программы.

Последний раз редактировалось ChVL, 21-06-2007 в 10:51.


Отправлено: 15:29, 20-06-2007 | #50



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Открывая 7z архив пишет не удаётся открыть как архив. Можно ли его восстановить? DreDo Хочу все знать 4 01-12-2009 18:54
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. Vadikan AutoIt 1543 18-01-2009 10:46
[Архив - Часть 1.3] AutoIt скрипты biork AutoIt 503 09-06-2007 11:27
[Архив - Часть 1.2] AutoIt скрипты Dirk Diggler AutoIt 505 02-12-2006 11:00
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход