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

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

Закрытая тема
Настройки темы
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.

(*.*)


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


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

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


Изменения
Автор: Vadikan
Дата: 21-01-2009
Описание: архив
Внимание!


В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема.

Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно Заголовок темы должен быть осмысленным.



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


Справочник по командам rundll32 (команды запуска диалоговых окон и не только...)

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

Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску)
(он же прикреплен в шапке)


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

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

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

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

 

Аватара для Котяра

Ветеран


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

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


Creat0R, спасибо за ответ. Деинсталлятор мой действительно простой, а то, что предложили Вы - это де инсталлятор как программа, а я говрю о Uninstall для какой-то конкретной программы.

Отправлено: 18:09, 21-02-2008 | #161



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

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


Аватара для Котяра

Ветеран


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

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


Вот так делаются Setup'ы:
Код: Выделить весь код
$installpath = InputBox("Установка", "Введите путь установки.", @ProgramFilesDir & "\Example", "")
if $installpath = '' then Exit
if @error = 1 then Exit
DirCreate($installpath)
FileCopy(@ScriptDir & "\example.txt", $installpath & "\example.txt")
FileCopy(@ScriptDir & "\Uninst.exe", $installpath & "\Uninst.exe")
MsgBox(4160, "Установка", "Установка успешно завершена!")
; Write a single REG_SZ value
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Example", "DisplayName", "REG_SZ", "Example v1.00")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Example", "UninstallString", "REG_SZ", $installpath & "\Uninst.exe")
А так Uninstall'ы:
Код: Выделить весь код
$installpath = InputBox("Установка", "Введите путь установки.", @ProgramFilesDir & "\Example", "")
if $installpath = '' then Exit
if @error = 1 then Exit
DirCreate($installpath)
FileCopy(@ScriptDir & "\example.txt", $installpath & "\example.txt")
FileCopy(@ScriptDir & "\Uninst.exe", $installpath & "\Uninst.exe")
MsgBox(4160, "Установка", "Установка успешно завершена!")
; Write a single REG_SZ value
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Example", "DisplayName", "REG_SZ", "Example v1.00")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Example", "UninstallString", "REG_SZ", $installpath & "\Uninst.exe")
Устанавливается и удаляется один файл. Минус один - не создаются ярлыки и после деинсталляции Uninst.exe остается лежать. Uninst.exe - это скомплированный деинсталлятор.

Давно искал инструмент типа AutoIt'а. Bat-файлы обладают малой функциональстью, малым средства для создания пользовательского интерфейса, VBS-скрипты сложны в освоений. AutoIt - классная вещь!

Отправлено: 18:30, 21-02-2008 | #162


Аватара для Котяра

Ветеран


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

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


При желании можно в Uninstall добавить проверку на установленность программы:
Код: Выделить весь код
$installed = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Example", "UninstallString")
if $installed = '' Then Exit
это в самое начало

Отправлено: 18:51, 21-02-2008 | #163


Аватара для Котяра

Ветеран


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

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


Creat0R, да, классный деинсталлятор. Замена всяким платным Best Uninstaller'ам и прочим.
Только одного смущает - нет кнопки для запуска изменения программы.

И самое главное, чем меня НЕ устроили батники: плохая поддержка русского языка

Отправлено: 19:40, 21-02-2008 | #164


Аватара для Maza Faka

Ветеран


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

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


Котяра
Цитата Котяра:
Замена всяким платным Best Uninstaller'ам »
Попробуй InnoSetup, очень удобный и простой в освоении, бесплатен.

-------
Сообщение помогло? Не забудьте нажать на Полезное сообщение


Отправлено: 10:02, 22-02-2008 | #165


Аватара для DNK_Inc

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


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

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


Подскажите, пожалуйста , какими командами в AutoIt можно запустить окно свойств необходимого логического диска и эмулировать нажатие необходимых кнопок на активной вкладке? А также, как запустить из скрипта консольную команду control userpasswords2 ?

Всю справку облазил - по свойствам диска и по консольным командам вообще ничего не нашёл, а по поводу кнопки - в команде ControlClick в качестве параметров указываю текст заголовка окна, текст на кнопке, classnameNN (эти данные взял с помощью утилиты AutoIt Window Info), а команда либо не исполняется вообще, либо эмулирует нажатие кнопки из совершенно другой вкладки данного окна свойств . Из ситуации выхожу эмулированием нажатий клавиш и их комбинаций. Но, во-первых, скрипт из-за этого получается довольно-таки громоздким и тяжёлым для разбора, а во-вторых, не всегда работает (не всегда срабатывает команда Send при передвижении по объектам проводника).

-------
Пока работает - не тронь!!!


Отправлено: 11:40, 22-02-2008 | #166


Googler


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

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


Creat0R
Цитата Creat0R:
Установленные секунды округляются до чётного числа »
нет, баг не в этом - для FAT четное число будет всегда, просто AutoIT округляет неправильно... вот цитата из MSDN:
Цитата:
Not all file systems can record creation and last access time and not all file systems record them in the same manner. For example, on NT FAT, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, and access time has a resolution of 1 day (really, the access date). On NTFS, access time has a resolution of 1 hour. Therefore, the GetFileTime function may not return the same file time information set using the SetFileTime function. Furthermore, FAT records times on disk in local time. However, NTFS records times on disk in UTC.
вот вариант UDF, который показывает заодно и причину округления:
Код: Выделить весь код
$File = "s:\Test.txt"

$hOpenFile = FileOpen($File, 2)
FileWrite($hOpenFile, "Test")
FileClose($hOpenFile)

$SetTime = '20060322083528' ; - 2

_FileSetTime($File, $SetTime)
;FileSetTime($File, $SetTime)

$GetTime = FileGetTime($File, 0, 1)
MsgBox(0, "", StringFormat("Set Time: %s \nGet Time: %s", $SetTime, $GetTime))
FileDelete($File)

Func _FileSetTime($strFile, $strTime, $intType = 0)
    Local $iY=Number(StringLeft($strTime,4))
    Local $iM=Number(StringMid($strTime,5,2))
    Local $iD=Number(StringMid($strTime,7,2))
    Local $iH=Number(StringMid($strTime,9,2))
    Local $iN=Number(StringMid($strTime,11,2))
    Local $iS=Number(StringMid($strTime,13))
    ; DOS-формат для времени
    Local $iFatDate = BitShift($iY-1980,-9) + BitShift($iM,-5) + $iD
    Local $iFatTime = BitShift($iH,-11) + BitShift($iN,-5) + $iS/2 ; вот тут косячок в хранении секунд
    ; базовые структуры
    Local $FILETIME = DllStructCreate("dword;dword")
    Local $SYSTEMTIME = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort")
    ; туда-сюда-обратно
    Local $ret = DllCall("kernel32.dll", "int", "DosDateTimeToFileTime", "ushort", $iFatDate, "ushort", $iFatTime, "ptr", DllStructGetPtr($FILETIME))
    If $ret[0] =0 Then Return SetError(1, 1, False)
    $ret = DllCall("kernel32.dll", "int", "FileTimeToSystemTime", "ptr", DllStructGetPtr($FILETIME), "ptr", DllStructGetPtr($SYSTEMTIME))
    If $ret[0] =0 Then Return SetError(1, 2, False)
    DllStructSetData($SYSTEMTIME,7,$iS) ; пытаемся откорректировать
    $ret = DllCall("kernel32.dll", "int", "SystemTimeToFileTime", "ptr", DllStructGetPtr($SYSTEMTIME), "ptr", DllStructGetPtr($FILETIME))
    If $ret[0] =0 Then Return SetError(1, 3, False)
    ; открываем файл
    $ret = DllCall("kernel32.dll", "int", "CreateFile", _
        "str", $strFile, "dword", 0x100, "dword", 0, "ptr", 0, "dword", 3, "dword", 0, "ptr", 0 )
    If $ret[0] =0 Then Return SetError(2, 1, False)
    ; правим время и закрываем файл
    Local $hFile=$ret[0], $aSysTime[3] = [0,0,0]
    $aSysTime[$intType]=DllStructGetPtr($FILETIME)
    $ret = DllCall("kernel32.dll", "int", "SetFileTime", "int", $hFile, "ptr", $aSysTime[1], "ptr", $aSysTime[2], "ptr", $aSysTime[0])
    DllCall("kernel32.dll", "int", "CloseHandle", "int", $hFile)
    If $ret[0] =0 Then Return SetError(2, 2, False)
    Return True
EndFunc
Цитата Creat0R:
А на счёт печяти никто так и не знает решения? amel27, не подскажешь? »
может невнимательно читал, но ты про что?

Последний раз редактировалось amel27, 23-02-2008 в 06:00. Причина: очепятка

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

Отправлено: 11:50, 22-02-2008 | #167


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


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

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


Помогите пожалуйста.
Как в AutoIT можно написать скрипт, чтобы он выполнял такое действие: Если в папке C:\123 появились файлы, то нужно отправить сообщение пользователю через netsend. А в идеале было бы, чтобы по почте отправлялись сообщения. Почтовый сервер на exchange2003

Отправлено: 13:23, 22-02-2008 | #168


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
для FAT четное число будет всегда
Действительно, даже NirCmd не справляется.
Тогда у меня проблема намного серъёзнее чем я думал...

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

Цитата:
вот вариант UDF, который показывает заодно и причину округления:
Спасибо, для NTFS пригодится


Цитата:
ты про что?
Нужно напечатать файл-изображение, но при печати должен быть выведен диалог Мастера печати...

Но кажется я нашёл решение:

Код: Выделить весь код
Run('Rundll32.exe "' & @SystemDir & '\mshtml.dll",PrintHTML "c:\image.png"', @SystemDir)
Правда пока негде потестить, дома у меня принтер не работает. Диалог то выводится, но печатает ли, вот это и нужно проверить.

DNK_Inc,
Цитата:
как запустить из скрипта консольную команду control userpasswords2 ?
Код: Выделить весь код
Run(@ComSpec & ' /c control userpasswords2', '', @SW_HIDE)
Dump,
Цитата:
Если в папке C:\123 появились файлы, то нужно отправить сообщение пользователю через netsend
Код: Выделить весь код
If FileExists("C:\123\*.*") Then Run(@ComSpec & ' /c net send {имя | * | /DOMAIN[:имя] | /USERS} сообщение', '', @SW_HIDE)
Цитата:
А в идеале было бы, чтобы по почте отправлялись сообщения.
Есть неплохой UDF: _INetSmtpMailCom.

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

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

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

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

Отправлено: 16:25, 22-02-2008 | #169


Googler


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

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


Creat0R
Цитата:
если дата файла в сети имеет не чётные секунды, то у меня всегда будет разница в данных »
не понял в чем проблема?.. просто округляй секунды перед сравнением до четного числа
Цитата:
Нужно напечатать файл-изображение, но при печати должен быть выведен диалог Мастера печати...
можно и через Shell.Application:
Код: Выделить весь код
_FileOpenPrint("D:\BUF\P1010376.JPG")

While 1
    Sleep (100)
WEnd

Func _FileOpenPrint ($sFilePath)
    Local $oShellApp = ObjCreate('shell.application')
    Local $sPath = StringRegExpReplace($sFilePath, "\\[^\\]+$", "")
    If @extended =0 Then $sPath = @WorkingDir
    Local $oPath = $oShellApp.Namespace ($sPath), $oItem
    For $oItem In $oPath.items
        If $oItem.Path = $sFilePath Then
            ConsoleWrite($oItem.Path &@CRLF)
            $oItem.InvokeVerb('&Печать')
        EndIf
    Next
EndFunc ; => _FileOpenPrint

; Эта UDF может быть полезна для просмотра поддерживаемых Verbs
Func _FileListVerbs($sFilePath)
    Local $oShellApp = ObjCreate('shell.application')
    Local $sPath = StringRegExpReplace($sFilePath, "\\[^\\]+$", "")
    If @extended =0 Then $sPath = @WorkingDir
    Local $oPath = $oShellApp.Namespace ($sPath), $oItem
    For $oItem In $oPath.items
        If $oItem.path = $sFilePath Then
            Local $oVerbs = $oItem.Verbs
            For $oVerb In $oVerbs
                ConsoleWrite($oVerb.Name &@CRLF)
            Next
        EndIf
    Next
EndFunc ; => _FileListVerbs
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:09, 23-02-2008 | #170



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Вопрос - [Архив] Антивирусные программы - ОБЩИЕ ВОПРОСЫ FOX RED Защита компьютерных систем 67 21-11-2007 15:05
[Архив - Часть 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




 
Переход