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

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

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

(*.*)


Сообщения: 36560
Благодарности: 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

 

Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
просто округляй секунды перед сравнением до четного числа
Я так и делаю, но округлять нужно в две стороны, либо больше, либо меньше (проверяя поочерёдно). А также это даёт неточный результат, если в сети на одну секунду позже будет обновлён файл, то для юзера не будет обновлении - Хотя я ещё подстраховался размером файла .

В общем ладно, не так уж и страшно. Кстати, странно что на той же Fat(32), время создания файла может быть не чётным

Цитата:
можно и через Shell.Application:
Вот именно этот диалог мне нужен!
Но тут проблема, «&Печать» может быть чем то другим на другой системе. А также возвращается проблема с “висячим” скриптом.

Через API нельзя этот же вызов делать? мне казалось что это будет намного проще, я удивляюсь почему вообще внедрили UDF _FilePrint(), который почти не работает. Хотя я так понял оно только для текстовых файлов?


P.S
Я всё пытаюсь научиться пользоваться MSDN, но так и не понял, как переписывать функции/описания приведённые там, в синтаксис AutoIt? Мне бы только алгоритм узнать, я уже интуитивно как нибудь разберусь думаю. Я так понимаю что многие берут за основу (как вспомогательные средства) библиотеки от C/C++ и т.п., я как то ставил себе, но тогда ещё про API даже и речи небыло. Но как это всё использовать, к примеру там пишут:

Цитата:
lpfnInternetCallback

A pointer to the callback function to call when progress is made, or NULL to remove the existing callback function.
Как узнать, что это за указатель, я пытался от DllCallBackRegister указать, но видимо не то .

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

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

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


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



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

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


Googler


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

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


Creat0R
Цитата:
округлять нужно в две стороны, либо больше, либо меньше »
если не брать в расчет AutoIT'овский баг, то однозначно в сторону уменьшения
Цитата:
на той же Fat(32), время создания файла может быть не чётным »
из той же цитаты MSDN "on NT FAT, create time has a resolution of 10 milliseconds"
Цитата:
«&Печать» может быть чем то другим на другой системе »
это несложно определить через реестр, к примеру для HTML-файлов это ключ "HKEY_CLASSES_ROOT\htmlfile\shell\Print\command", хотя для PNG я бы пожалуй смотрел в сторону ветки "HKEY_CLASSES_ROOT\pngfile"... кстати, там же можно подсмотреть и команды печати
Цитата:
Через API нельзя этот же вызов делать? »
ну, имена DLL и функции у тебя есть, почему бы не попробовать?
Цитата:
Как узнать, что это за указатель, я пытался от DllCallBackRegister указать, но видимо не то »
думаю то, тут вроде подробней расписано: http://www.podgoretsky.com/ftp/Docs/...oc/WinInet.doc

DNK_Inc
Цитата:
какими командами в AutoIt можно запустить окно свойств необходимого логического диска »
Код: Выделить весь код
;Opt("TrayIconHide",1)
;Opt("ExpandEnvStrings",1)

$sDir = "C:"
$sName = _OpenFolderProperties($sDir)

WinWait("Свойства: "& $sName, "", 5)
;WinWaitClose("Свойства: "& $name)

While 1
    Sleep(100)
WEnd

Func _OpenFolderProperties($sDir)
    Local $oShellApp = ObjCreate('shell.application')
    Local $oDir = $oShellApp.Namespace ($sDir)
    Local $oItem = $oDir.Self
    $oItem.InvokeVerb('Сво&йства')
    Return $oItem.Name
EndFunc

Последний раз редактировалось amel27, 23-02-2008 в 18:26.

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

Отправлено: 17:58, 23-02-2008 | #172


Аватара для Creat0R

Must AutoIt


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

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


amel27,
Цитата:
там же можно подсмотреть и команды печати
Там есть это:

rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_PrintTo /pt "%1" "%2" "%3" "%4"

Судя по описанию, последние два параметра не используются, первый это путь к файлу, а второй имя принтера, которое тоже нужно узнать. Но даже указав верное имя принтера, выводится диалог сохранения в файл *.xps - Хотя при вызове этой команды из контекстного меню изображения, сразу выводится диалог мастера печати. Интересно, что там передаётся в качестве второго параметра (или может быть всё же в качестве третьего/четвёртого?).

Цитата:
имена DLL и функции у тебя есть, почему бы не попробовать?
Я попробовал с "comdlg32.dll" (PrintDlg). Но просидев пару часов с MSDN, ничего не вышло, я видимо не так первожу значения структуры, а где подставлять имя файла я вовсе не нашёл, или там только hDC поддерживается?

Код: Выделить весь код
#Include <ScreenCapture.au3>

$hwnd = WinGetHandle("")
$hDC = __ScreenCapture_Capture()
$File = "C:\Temp\fog.png"

;Строем структуру (WORD это вроде char?)
$stFilePath = DllStructCreate('dword;hwnd;int;int;hwnd;dword;char;char;char;char;char;hwnd;lparam;ptr;ptr;int;int')

;Заполняем структуру
DllStructSetData($stFilePath, 1, DllStructGetSize($stFilePath))
DllStructSetData($stFilePath, 2, $hwnd)
DllStructSetData($stFilePath, 5, $hDC)

;Пытаемся показать диалог печати, безуспешно :(
$aRet = DllCall("comdlg32.dll", "int", "PrintDlg", "ptr", DllStructGetPtr($stFilePath))
ConsoleWrite($aRet[0])

;Функция возвращает Device context захваченного изображения
Func __ScreenCapture_Capture($sFileName = "", $iLeft = 0, $iTop = 0, $iRight = -1, $iBottom = -1)
    Local $iH, $iW, $hWnd, $hDDC, $hCDC, $hBMP

    If $iRight = -1 Then $iRight = _WinAPI_GetSystemMetrics($SM_CXSCREEN)
    If $iBottom = -1 Then $iBottom = _WinAPI_GetSystemMetrics($SM_CYSCREEN)
    If $iRight < $iLeft Then Return SetError(-1, 0, 0)
    If $iBottom < $iTop Then Return SetError(-2, 0, 0)

    $iW = $iRight - $iLeft
    $iH = $iBottom - $iTop
    $hWnd = _WinAPI_GetDesktopWindow()
    $hDDC = _WinAPI_GetDC($hWnd)
    $hCDC = _WinAPI_CreateCompatibleDC($hDDC)
    $hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iW, $iH)
    _WinAPI_SelectObject($hCDC, $hBMP)
    _WinAPI_BitBlt($hCDC, 0, 0, $iW, $iH, $hDDC, $iLeft, $iTop, $SRCCOPY)

    _WinAPI_ReleaseDC($hWnd, $hDDC)
    _WinAPI_DeleteDC($hCDC)

    Return $hCDC
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


Отправлено: 17:15, 24-02-2008 | #173


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


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

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


Цитата Creat0R:
Dump,
Цитата:
Если в папке C:\123 появились файлы, то нужно отправить сообщение пользователю через netsend
Код:
If FileExists("C:\123\*.*") Then Run(@ComSpec & ' /c net send {имя | * | /DOMAIN[:имя] | /USERS} сообщение', '', @SW_HIDE) »
Так не получилось, даже при пустой папке всё равно отрабатывает, пошел другим путём сделал так:
Код: If DirGetSize("C:\temp")>0 Then Run(@ComSpec & ' /c net send 192.168.105.84 Внимание ДИСПЕТЧЕР', '', @SW_HIDE)

Отправлено: 14:24, 25-02-2008 | #174


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


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

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


Если я использую ToolTip, можно как нибудь задать шрифт (сделать его жирным или курсивом )?

Моя програмка использует команду MouseClick (почему взял именно эту команду, потому что мне известны только координаты кнопок), тем самым пока прога работает комп занят. А возможно ли такое, чтоб и прога работала и пользоваться компьтером было бы можно? (Сразу оговорюсь эта прога работает в окне интернет экспловера, да есть команды которые специально предназначены для IE, но честно с помощью них у меня ничего не получилось. )

Последний раз редактировалось HORRIBLE, 25-02-2008 в 17:14.


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


Googler


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

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


Creat0R
Цитата:
Интересно, что там передаётся в качестве второго параметра (или может быть всё же в качестве третьего/четвёртого?).
ТУТ они расшифрованы, последние два применяются только в 9x/NT4
Цитата:
даже указав верное имя принтера, выводится диалог сохранения в файл »
Не знаю - у меня оба варианта нормально работают, причем "rundll32.exe C:\WINDOWS\system32\mshtml.dll,PrintHTML" вызывает приглашение на выбор принтера, а "rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_PrintTo /pt" сразу отправляет на указанный в параметре принтер. Сомневаюсь, что получится вызвать эти функции напрямую без использования rundll32, по крайней мере никакой информации по их другому использованию я не нашел... если помнишь, аналогичная ситуация была у меня с запуском INF-файлов - функция вроде документирована в MSDN, но на прямой вызов не реагирует, и судя по Гуглю не у меня одного...
Цитата:
Я попробовал с "comdlg32.dll" (PrintDlg). »
ИМХО оно не стоит того - эти диалоги только помогают визуально инициализировать требуемые структуры, но использовать их для последующей печати AFAIK средствами AutoIT не получится.

И еще по поводу Verbs - в MSDN сказано, что для стандартных Verbs всегда существует универсальный идентификатор, не зависящий от языка... и видимо без знака "&", во всяком случае для "Print" у меня сработало.
Цитата:
canonical verb names remain constant regardless of platform or language, which makes it possible for developers to invoke known canonical verbs without knowing the details about a Shell namespace item
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:16, 26-02-2008 | #176


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


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

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


Как правильно объявить свою функцию, чтобы после выполнения этой функции прога не отключалась, а ждала пока функция закончит свои действия и продолжила работу далее?

PHP код: Выделить весь код

MouseClickDrag("left"186561100,226)

MouseClickDrag("left"12611811261,472)
MouseClickDrag("left"100,226100,344)
mouseClick("left"902241)


_health() ; до сюда все выполняетсяа далее прога отключаетсячто я не так делаю ???? 


sleep(600)
MouseClick("left",1170225)
sleep(600)
MouseClick("left",1202,225)


Func _health()
..........
EndFunc 


Отправлено: 00:40, 28-02-2008 | #177


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

Ветеран


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

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


Цитата HORRIBLE:
Как правильно объявить свою функцию, чтобы после выполнения этой функции прога не отключалась, а ждала пока функция закончит свои действия и продолжила работу далее? »
Да вроде бы так и работает, для проверки вставил ConsoleWrite()
Код: Выделить весь код
MouseClickDrag("left", 186, 561, 100,226)
MouseClickDrag("left", 1261, 181, 1261,472)
MouseClickDrag("left", 100,226, 100,344)
mouseClick("left", 90, 224, 1)

_health() ; Вызывается функция, а затем выполняется всё, что идёт ниже :)

sleep(600)
ConsoleWrite("sleep 600" & @LF)
MouseClick("left",1170, 225)
sleep(600)
ConsoleWrite("sleep 600_2" & @LF)
MouseClick("left",1202,225)

Func _health()
    ConsoleWrite("_health" & @LF)
EndFunc

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

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

Отправлено: 07:11, 28-02-2008 | #178


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

Ветеран


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

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


Распространенная задача, с которой возникают трудности - создание загрузчика. Загрузчик запускает файл как программу. Это надо для создания меню своего CD. Так вот в AutoIt делается загрузчик простейшим образом. Все решается одной строчкой
Код: Выделить весь код
ShellExecute("file.html")
Можно доделать, например. скрыть икону (хотя она все равно висит лишь пару секунд)
Код: Выделить весь код
Opt("TrayIconHide", 1)
ShellExecute("file.html")
Этот скрипт потом надо скомпилировать, естественно.

Отправлено: 21:32, 02-03-2008 | #179


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


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

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


А вот интересно, на AutoIt реально написать простенький файловый менеджер?

Отправлено: 23:01, 02-03-2008 | #180



Компьютерный форум 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




 
Переход