|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:. |
|
[Архив - Часть 3] AutoIt скрипты .:[общие вопросы]:.
|
(*.*) Сообщения: 36560 |
Внимание! В связи с созданием отдельного форума по AutoIt, эта тема переводится в архивное состояние. Если у вас есть вопрос, создайте новую тему или поднимите существующую, если в ней обсуждается аналогичная проблема. Пожалуйста, не создавайте тем с названием "Помогите!" или "Нужна помощь по AutoIt". Это и так понятно ![]() ![]() Сайт программы Русская справка Коллекция AutoIt скриптов от Sanja Alone Коллекция AutoIt скриптов от MSFN (могут быть устаревшие). Справочник по командам rundll32 (команды запуска диалоговых окон и не только...) AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо). Архивы старых тем по AutoIt или они же в 7z архиве (версии для печати) - 846 кб (настоятельно рекомендуется к прочтению/поиску) (он же прикреплен в шапке) Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров. Цитата Vadikan:
|
||
------- Отправлено: 00:02, 05-02-2006 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Спасибо огромное! Получилось и то и другое: $hWnd = WinGetHandle("") $sFilter = "Text File (*.txt)|*.txt|AutoIt v3 Script (*.au3)|*.au3|All (*.*)|*.*" $Ret = _FileSaveDialog("Save as", "C:\", $sFilter, 18, "New Script", 2, $hWnd) If Not @error Then MsgBox(64, "Results", StringFormat("Saved as: %s\n\nSelected Filter Index: %d", $Ret, @extended)) Func _FileSaveDialog($sTitle, $sInitDir, $sFilter='All (*.*)', $iOpt=0, $sDefFile='', $iDefFilter=1, $hWnd=0) Local $iFileLen = 65536 ; Max chars in returned string ; API flags prepare Local $iFlag = BitOR(BitShift(BitAND($iOpt, 2), -10), BitShift(BitAND($iOpt, 16), 3)) ; Filter string to array convertion Local $asFLines = StringSplit($sFilter, '|') Local $i, $suFilter = '' For $i = 1 To $asFLines[0] Step 2 If $i < UBound($asFLines) Then _ $suFilter &= 'byte[' & StringLen($asFLines[$i]) + 1 & '];char[' & StringLen($asFLines[$i+1]) + 1 & '];' Next ; Create API structures Local $uOFN = DllStructCreate('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _ ';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword') Local $usTitle = DllStructCreate('char[' & StringLen($sTitle) + 1 & ']') Local $usInitDir = DllStructCreate('char[' & StringLen($sInitDir) + 1 & ']') Local $usFilter = DllStructCreate($suFilter & 'byte') Local $usFile = DllStructCreate('char[' & $iFileLen & ']') Local $usExtn = DllStructCreate('char[1]') For $i = 1 To $asFLines[0] DllStructSetData($usFilter, $i, $asFLines[$i]) Next ; Set Data of API structures DllStructSetData($usTitle, 1, $sTitle) DllStructSetData($usInitDir, 1, $sInitDir) DllStructSetData($usFile, 1, $sDefFile) DllStructSetData($usExtn, 1, "") DllStructSetData($uOFN, 1, DllStructGetSize($uOFN)) DllStructSetData($uOFN, 2, $hWnd) DllStructSetData($uOFN, 4, DllStructGetPtr($usFilter)) DllStructSetData($uOFN, 7, $iDefFilter) DllStructSetData($uOFN, 8, DllStructGetPtr($usFile)) DllStructSetData($uOFN, 9, $iFileLen) DllStructSetData($uOFN, 12, DllStructGetPtr($usInitDir)) DllStructSetData($uOFN, 13, DllStructGetPtr($usTitle)) DllStructSetData($uOFN, 14, $iFlag) DllStructSetData($uOFN, 17, DllStructGetPtr($usExtn)) DllStructSetData($uOFN, 23, BitShift(BitAND($iOpt, 32), 5)) ; Call API function Local $aRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN)) If Not IsArray($aRet) Or Not $aRet[0] Then Return SetError(1, 0, "") ;Return Results Local $sRet = StringStripWS(DllStructGetData($usFile, 1), 3) Return SetExtended(DllStructGetData($uOFN, 7), $sRet) ;@extended is the 1-based index of selected filer EndFunc Вместо этого параметра добавлен параметр $iDefFilter, указывает умолчальный фильтр (по индексу). |
------- Отправлено: 06:48, 11-02-2008 | #111 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
![]() |
|
Отправлено: 08:00, 11-02-2008 | #112 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата amel27:
![]() У меня тут появилась другая хотелка, возможо она окажется не такой уж простой для реализации ![]() Чтобы к имени файла (если оно введено), добавлялось расширение при переключении фильтра (и если расширения ещё нет ![]() ![]() |
|
------- Отправлено: 09:22, 11-02-2008 | #113 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
; Объявление в начале UDF Local $sUserFiler = "" Local $usUsrFilter = DllStructCreate('byte[254]') ; структура для сохранения фильтра Local $usUsrFilter1 = DllStructCreate('char[253]', DllStructGetPtr($usUsrFilter)+1) ; пропускаем CHR(0) ; ... DllStructSetData($uOFN, 5, DllStructGetPtr($usUsrFilter)) DllStructSetData($uOFN, 6, 254) ; ... Local $sRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN)) ; ... If DllStructGetData($uOFN, 7) =0 Then $sUserFiler = DllStructGetData($usUsrFilter1, 1) ; строка фильтра EndIf Цитата Creat0R:
|
||
Отправлено: 12:39, 11-02-2008 | #114 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
![]() Цитата:
$hWnd = WinGetHandle("") $sFilter = "Text File (*.txt)|*.txt|AutoIt v3 Script (*.au3)|*.au3|All (*.*)|*.*" $Ret = _FileSaveDialog("Save as", "C:\", $sFilter, 18, "New Script", 2, $hWnd) If Not @error Then MsgBox(64, "Results", StringFormat("Saved as: %s\n\nSelected Filter Index: %d", $Ret, @extended)) Func _FileSaveDialog($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefFile = '', $iDefFilter = 1, $hWnd = 0) Local $iFileLen = 65536 ; Max chars in returned string ; API flags prepare Local $iFlag = BitOR(BitShift(BitAND($iOpt, 2), -10), BitShift(BitAND($iOpt, 16), 3)) ; Filter string to array convertion Local $asFLines = StringSplit($sFilter, '|') Local $i, $suFilter = '' For $i = 1 To $asFLines[0] Step 2 If $i < UBound($asFLines) Then _ $suFilter &= 'byte[' & StringLen($asFLines[$i]) + 1 & '];char[' & StringLen($asFLines[$i + 1]) + 1 & '];' Next ; Create API structures Local $uOFN = DllStructCreate('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _ ';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword') Local $usTitle = DllStructCreate('char[' & StringLen($sTitle) + 1 & ']') Local $usInitDir = DllStructCreate('char[' & StringLen($sInitDir) + 1 & ']') Local $usFilter = DllStructCreate($suFilter & 'byte') Local $usFile = DllStructCreate('char[' & $iFileLen & ']') Local $usExtn = DllStructCreate('char[1]') For $i = 1 To $asFLines[0] DllStructSetData($usFilter, $i, $asFLines[$i]) Next ; Set Data of API structures DllStructSetData($usTitle, 1, $sTitle) DllStructSetData($usInitDir, 1, $sInitDir) DllStructSetData($usFile, 1, $sDefFile) DllStructSetData($usExtn, 1, "") DllStructSetData($uOFN, 1, DllStructGetSize($uOFN)) DllStructSetData($uOFN, 2, $hWnd) DllStructSetData($uOFN, 4, DllStructGetPtr($usFilter)) DllStructSetData($uOFN, 7, $iDefFilter) DllStructSetData($uOFN, 8, DllStructGetPtr($usFile)) DllStructSetData($uOFN, 9, $iFileLen) DllStructSetData($uOFN, 12, DllStructGetPtr($usInitDir)) DllStructSetData($uOFN, 13, DllStructGetPtr($usTitle)) DllStructSetData($uOFN, 14, $iFlag) DllStructSetData($uOFN, 17, DllStructGetPtr($usExtn)) DllStructSetData($uOFN, 23, BitShift(BitAND($iOpt, 32), 5)) ;Set Timer to check FileName Input for file extention Local $hCallBack = DllCallbackRegister ("_Check_FSD_Input", "none", "hwnd;int;int;dword") Local $ahTimer = DllCall("user32.dll", "int", "SetTimer", "hwnd", 0, _ "int", TimerInit(), "int", 200, "ptr", DllCallbackGetPtr ($hCallBack)) ; Call API function Local $aRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN)) If Not IsArray($aRet) Or Not $aRet[0] Then Return SetError(1, 0, "") ;Fre CallBack and kill the timer DllCallBackFree ($hCallBack) DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $ahTimer) ;Return Results Local $sRet = StringStripWS(DllStructGetData($usFile, 1), 3) Return SetExtended(DllStructGetData($uOFN, 7), $sRet) ;@extended is the 1-based index of selected filer EndFunc ;==>_FileSaveDialog Func _Check_FSD_Input($hWndGUI, $MsgID, $WParam, $LParam) Local $sSaveAs_Title = "[CLASS:#32770;TITLE:Save as]" If ControlGetFocus($sSaveAs_Title, "FolderView") = "Edit1" Then Return Local $sEdit_Data = ControlGetText($sSaveAs_Title, "FolderView", "Edit1") Local $sFilter_Ext = ControlCommand($sSaveAs_Title, "FolderView", "ComboBox3", "GetCurrentSelection") $sFilter_Ext = StringRegExpReplace($sFilter_Ext, ".*\(\*(.*?)\)$", "\1") If $sFilter_Ext = ".*" Then $sFilter_Ext = "" Local $sEdit_Ext = StringRegExpReplace($sEdit_Data, "^.*\.", ".") If $sEdit_Ext <> $sFilter_Ext And ($sEdit_Ext <> $sEdit_Data Or $sFilter_Ext <> "") Then $sEdit_Data = StringRegExpReplace($sEdit_Data, "\.[^.]*$", "") ControlSetText("[CLASS:#32770;TITLE:Save as]", "FolderView", "Edit1", $sEdit_Data & $sFilter_Ext) EndIf EndFunc ;==>_Check_FSD_Input |
||
------- Отправлено: 14:58, 11-02-2008 | #115 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Всем доброго времени суток! Не могли бы вы разъяснить, как выдрать из виндов букву cd-romа... т.к. буквы у на многих компах разные нужно точное выдирание буквы диска... ибо хочется сделать диск полностью самоустанавливающийся.... просмотрев справку и архив форума не нашел ни одной справки по решению данной проблемы... может кто поможет...
|
Отправлено: 22:45, 11-02-2008 | #116 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Dmurr,
Цитата:
|
|
------- Отправлено: 00:57, 12-02-2008 | #117 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Спасибо, большое... ^_^
|
Отправлено: 01:04, 12-02-2008 | #118 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
На оф. форуме выложили подобные функии, там можно указать имя CallBack функции, которая будет вызываться при поступлении сообщении. Сами UDF'ы немного запутаны для разбора, но мне удалось выявить, что при смене фильтра, поступает сообщение 49263 (его константа мне не известна конечно). Я правда не уверен что оно касается фильтра, возможно это просто сообщение связанное с перерисовкой диалога. Кстати, в одной из следующих версии, планируют уже встроенные функции переделать, как я понял будут поддерживать дополнитеьный параметр hWnd. Видимо мои просьбы повлияли ![]() У меня тут есть проблема немного поважнее, нужно проверять нажатие левой кнопки мышки, но при этом предотвратить клик мышки. Т.е пока запущена определённая функция (в цикле), нажатие мышки (левую кнопку) нужно отключить, но чтобы можно было отследить, нажал ли юзер на эту кнопку (_IsPressed("01")). Это вообще реально на AutoIt? я такое поведение видел в программах для захвата изображении, когда юзер выбирает определённую часть окна, и затем кликает там для захвата, в том месте где он кликнул, ничего не происходит, т.е клиентская часть окна по которой он кликнул, не берёт на себя фокус. Я тоже делаю (точнее почти закончил) нечто похожее, утилитку для захвата изображении, как с этим вопросом решусь, выложу тут ![]() |
------- Отправлено: 02:40, 12-02-2008 | #119 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
![]() Цитата Creat0R:
![]() Func _WinIsMy($hwnd) Local $uPID = DllStructCreate("dword") Local $aRet = DllCall("user32.dll", 'int', 'GetWindowThreadProcessId', _ 'hwnd', $hwnd, _ 'ptr', DllStructGetPtr($uPID)) $aRet = DllCall("kernel32.dll", 'int', 'GetCurrentProcessId') Return $aRet=DllStructGetData($uPID,1) EndFunc Цитата Creat0R:
![]() |
|||
Отправлено: 06:19, 12-02-2008 | #120 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[архив - Часть 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 |
|