|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты |
|
[архив - Часть 2] AutoIt скрипты
|
(*.*) Сообщения: 36567 |
Внимание! Тема переведена в архивное состояние Текущая тема http://forum.oszone.net/thread-98914.html (настоятельно рекомендуется к прочтению/поиску) Руководство к действию по работе c AutoIt. ![]() Сайт программы Русская справка Коллекция AutoIt скриптов от Sanja Alone Коллекция AutoIt скриптов от MSFN (могут быть устаревшие). Справочник по командам rundll32 (команды запуска диалоговых окон и не только...) AutoIt скрипты - введение и FAQ (статья содержит вводную информацию по AutoIt, а также ответы на ЧаВо). Данная тема предназначена для общих вопросов по AutoIt. Вопросы по установке приложений при помощи AutoIt следует задавать в соответствии с правилами форума "Автоматическая установка приложений". Таким образом, если вы хотите узнать как установить Winamp 5.x при помощи AutoIt, то создайте тему [autoit] Winamp 5.х (если таковой еще нет на форуме). Проверить наличие тем можно при помощи поиска или фильтров. Цитата Vadikan:
|
||
------- Отправлено: 00:02, 05-02-2006 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
|
|
------- Отправлено: 08:26, 08-10-2007 | #561 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
![]() Цитата:
Но в сравнении моя функция всё же быстрее ![]() Цитата:
Т.е по сути нужно проверить типа.. Естественно так не работает... Цитата:
![]() |
||||
------- Отправлено: 09:29, 08-10-2007 | #562 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать Почему функция AdlibEnable начинает работать только после того, как файл скопировался?
#include <Misc.au3> Opt("MouseCoordMode", 2) AdlibEnable("Check", 100) Dim $title = "Копирование..." Dim $dll = DllOpen("user32.dll") $sCopy = CopyFile("d:\Video\Films\video.avi", "c:\") Func CopyFile($source, $dest) $WinShell = ObjCreate("shell.application") If Not @error Then $WinShell.NameSpace($dest).CopyHere($source) AdlibDisable() Else MsgBox(16, "Error", "Obj not create") EndIf EndFunc Func Check() MsgBox(0, "", "test") ;Это для проверки вызова функции If WinActive($title) Then If _IsPressed(01, $dll) Then $mousePos = MouseGetPos() If $mousePos[0] > 303 And $mousePos[0] < 362 And $mousePos[1] > 102 And $mousePos[1] < 124 Then MsgBox(0, "", "Button pressed") EndIf EndIf EndFunc |
Отправлено: 10:00, 08-10-2007 | #563 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
Цитата Creat0R:
Цитата Creat0R:
|
|||
Отправлено: 11:55, 08-10-2007 | #564 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
Мне удалось в моей функции преодалеть проблемы когда выделялся весь текст если исходное выделение было посредине слова.. плюс я вспомнил, ведь есть ещё Opt("SendKeyDelay", 0) и Opt("SendKeyDownDelay", 0) - увеличивает скорость в несколько раз ![]() Вот финальная версия (с использованием обычного массива, без Dictionary, мне если честно немного не привычно ориентироваться в нём): #NoTrayIcon Opt("SendKeyDelay", 0) Opt("SendKeyDownDelay", 0) HotKeySet("`", "ConvertProc") HotKeySet("^q", "Quit") While 1 Sleep(100) WEnd Func ConvertProc() Local $OldClip = ClipGet() ClipPut("") Send("^{Insert}") Local $SelectedText = ClipGet() If $SelectedText = "" Then HotKeySet("`") Send("`") HotKeySet("`", "ConvertProc") Return EndIf Local $NewClip = ConvertText($SelectedText) ClipPut($NewClip) Send("+{Insert}") RestoreSelection($NewClip) ClipPut($OldClip) EndFunc ;If $Mode = 0 Then Russian language used ;If $Mode = 1 Then English language used ;If $Mode = -1 Then String Inverted Func ConvertText($Text, $Mode=-1) Local $StringIsUpper = 0, $TextRet = "" Local $SplitTextArr = StringSplit($Text, "") Local $LettersArr = GetLettersArr() For $i = 1 To $SplitTextArr[0] Local $i_0 = 1, $i_1 = 0 $StringIsUpper = 0 If StringIsUpper($SplitTextArr[$i]) Then $StringIsUpper = 1 If $Mode = 0 Or ($Mode = -1 And StringIsASCII($Text)) Then Local $i_0 = 0, $i_1 = 1 For $j = 1 To $LettersArr[0][0] If $SplitTextArr[$i] = $LettersArr[$j][$i_0] Then $SplitTextArr[$i] = $LettersArr[$j][$i_1] ExitLoop EndIf Next If $StringIsUpper = 1 Then $SplitTextArr[$i] = StringUpper($SplitTextArr[$i]) $TextRet &= $SplitTextArr[$i] Next Return $TextRet EndFunc Func GetLettersArr() Local $AnsiStr = "ёйцукенгшщзхъфывапролджэячсмитьбю.?" Local $AsciiStr = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./&" Local $StrLenght = StringLen($AnsiStr) Local $LettersArr[$StrLenght+1][2] $LettersArr[0][0] = $StrLenght For $i = 1 To $StrLenght $LettersArr[$i][0] = StringMid($AsciiStr, $i, 1) $LettersArr[$i][1] = StringMid($AnsiStr, $i, 1) Next Return $LettersArr EndFunc Func RestoreSelection($rText) Local $LeftJumps = GetLeftJumps($rText) Send("^+{LEFT " & $LeftJumps & "}") Send("^{Insert}") Local $NewSelText = ClipGet() If StringLen($NewSelText) > StringLen($rText) Then Send("+{RIGHT " & StringLen($NewSelText) - StringLen($rText) & "}") EndFunc Func GetLeftJumps($Text) StringRegExpReplace($Text, '\n', '') Local $Extended = @extended $Text = StringStripWS($Text, 3) $Text = StringRegExpReplace($Text, '\s+|\t+', ' ') $Text = StringRegExpReplace($Text, '~|`|!|#|%|\^|&|\*|\(|\)|-|\+|=|\{|\}|''|"|;|:|/|\\|<|>|\?|,|\[|\]|ч|Ч|ё|Ё', '|') $Text = StringRegExpReplace($Text, '\|+', '|') Local $WordsCountArr = StringRegExp($Text, "[\s\.:;,]*([а-яА-Яa-zA-Z0-9-_]+)[\s\.:;,]*", 3) StringRegExpReplace($Text, '\|', '') $Extended += @extended + UBound($WordsCountArr) Return $Extended EndFunc Func Quit() Exit EndFunc Цитата:
![]() ![]() |
||
------- Отправлено: 13:23, 08-10-2007 | #565 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Maza Faka,
Цитата:
Просто ставим MsgBox под AdlibDisable и мы в этом убеждаемся ![]() Я так понял нужно определить было ли отменено копирование? попробуй использовать Callback функции из примера что я приводил ранее, там скрипт не останавливается на момент копирования. Вот кстати полезная ссылка по обьекту shell.application - http://msdn2.microsoft.com/en-us/library/aa969392.aspx (в вот конкретно по CopyHere). |
|
------- Отправлено: 14:30, 08-10-2007 | #566 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
Цитата:
Цитата Creat0R:
![]() ![]() у меня получилось только открывать/читать URL непосредственно с вкладок: Global Const $DMLERR_NO_ERROR = 0x0 Global Const $DMLERR_ADVACKTIMEOUT = 0x4000 Global Const $DMLERR_BUSY = 0x4001 Global Const $DMLERR_DATAACKTIMEOUT = 0x4002 Global Const $DMLERR_DLL_NOT_INITIALIZED = 0x4003 Global Const $DMLERR_DLL_USAGE = 0x4004 Global Const $DMLERR_EXECACKTIMEOUT = 0x4005 Global Const $DMLERR_INVALIDPARAMETER = 0x4006 Global Const $DMLERR_LOW_MEMORY = 0x4007 Global Const $DMLERR_MEMORY_ERROR = 0x4008 Global Const $DMLERR_NOTPROCESSED = 0x4009 Global Const $DMLERR_NO_CONV_ESTABLISHED = 0x400A Global Const $DMLERR_POKEACKTIMEOUT = 0x400B Global Const $DMLERR_POSTMSG_FAILED = 0x400C Global Const $DMLERR_REENTRANCY = 0x400D Global Const $DMLERR_SERVER_DIED = 0x400E Global Const $DMLERR_SYS_ERROR = 0x400F Global Const $DMLERR_UNADVACKTIMEOUT = 0x4010 Global Const $DMLERR_UNFOUND_QUEUE_ID = 0x4011 ; Возвращает/открывает URL страницы на заданной вкладке Оперы. ; $sURL - адрес открываемой страницы, ; если задана пустая строка возвращает адрес заданного окна. ; $hWin - номер вкладки обозревателя, ; 0 новая вкладка (при открытии), ; -1 текущая вкладка. ; $iWait - таймаут ожидания в миллисекундах, при превышении будет выдана ошибка. Func OperaOpenURL($sURL = "", $hWin = -1, $iWait = 10000) Local $ret, $err, $uIdInst = DllStructCreate("int") Local $hServer[1], $hTopic[1], $hItem[1], $hConv[1], $hData[1], $sData[1] Local $sTopic = "WWW_OpenURL", $sItem = $sURL&',,0x'&Hex($hWin) If $sURL='' Then $sTopic = "WWW_GetWindowInfo" $sItem = "0x"&Hex($hWin) EndIf Local $hDll = DllOpen("user32.dll") If $hDll=-1 Then Return SetError(1, 0, "") ; Ошибка открытия DLL $ret = DllCall("user32.dll", "int", "DdeInitialize", "ptr", DllStructGetPtr($uIdInst), "ptr", 0, "int", 0, "int", 0) If $ret[0] Then Return SetError(2, $ret[0], "") ; Ошибка инициализации DDE $hServer = DllCall($hDll, "int", "DdeCreateStringHandle", "int", DllStructGetData($uIdInst,1), "str", "opera", "int", 1004) If $hServer[0] Then $hTopic = DllCall($hDll, "int", "DdeCreateStringHandle", "int", DllStructGetData($uIdInst,1), "str", $sTopic, "int", 1004) If $hTopic[0] Then $hItem = DllCall($hDll, "int", "DdeCreateStringHandle", "int", DllStructGetData($uIdInst,1), "str", $sItem, "int", 1004) If $hItem[0] Then $hConv = DllCall($hDll, "int", "DdeConnect", "int", DllStructGetData($uIdInst,1), "int", $hServer[0], "int", $hTopic[0], "int", 0) If $hConv[0] Then $hData = DllCall($hDll, "int", "DdeClientTransaction", "ptr", 0, "int", 0, "int", $hConv[0], "int", $hItem[0], "int", 1, "int", 0x20B0, "int", $iWait, "ptr", 0) If $hData[0] Then $sData = DllCall($hDll, "str", "DdeAccessData", "int", $hData[0], "ptr", 0) EndIf EndIf EndIf EndIf EndIf $err = DllCall($hDll, "int", "DdeGetLastError", "int", DllStructGetData($uIdInst,1)) If $hData[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hData[0]) If $hConv[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hConv[0]) If $hItem[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hItem[0]) If $hTopic[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hTopic[0]) If $hServer[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hServer[0]) If $err[0] Then Return SetError(3, $err[0], "") ; Другие ошибки DDE DllCall($hDll, "int", "DdeUninitialize", "int", DllStructGetData($uIdInst,1)) DllClose($hDll) If $sURL='' Then $sURL = StringRegExpReplace($sData[0],'^"([^"]*?)".*','\1') Return $sURL EndFunc |
|||
Отправлено: 15:03, 08-10-2007 | #567 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Основной скрипт: $sCopy = CopyFile("d:\Video\Films\video.avi", "c:\") Func CopyFile($source, $dest) $WinShell = ObjCreate("shell.application") If Not @error Then Run("c:\Program Files\AutoIt3\AutoIt3.exe " & @ScriptDir & "\check.au3") $WinShell.NameSpace($dest).CopyHere($source) Else MsgBox(16, "Error", "Obj not create") EndIf EndFunc #include <Misc.au3> Opt("MouseCoordMode", 2) Dim $title = "Копирование..." Dim $dll = DllOpen("user32.dll") WinWait($title) While WinExists($title) If WinActive($title) Then If _IsPressed(01, $dll) Then $mousePos = MouseGetPos() If $mousePos[0] > 303 And $mousePos[0] < 362 And $mousePos[1] > 102 And $mousePos[1] < 124 Then WinClose($title) MsgBox(16, "Error", "Copying aborted") Exit EndIf EndIf EndIf Sleep(10) WEnd MsgBox(64, "Success", "File copying successfuly") |
|
Отправлено: 10:36, 09-10-2007 | #568 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
![]() Цитата:
![]() Цитата:
Maza Faka, Такое лучше сделать через Callback... щас попробую нарисовать пример... Цитата:
#include <GUIConstants.au3> #include <Misc.au3> #include "DllCallBack.au3" Opt("GuiOnEventMode", 1) Global $pTimerProc, $uiTimer $sCopy = CopyFile("d:\Video\Films\video.avi", "c:\") MsgBox(64, "Success", "File copying successfuly") Quit() Func CopyFile($source, $dest) $WinShell = ObjCreate("shell.application") If Not @error Then InitializeCallBack(100) $WinShell.NameSpace($dest).CopyHere($source) Else MsgBox(16, "Error", "Obj not create") EndIf EndFunc Func InitializeCallBack($CallEvery, $FuncName="MyCallBackFunc") $pTimerProc = _DllCallBack($FuncName, "hwnd;uint;uint;dword") $uiTimer = DllCall("user32.dll", "uint", "SetTimer", "hwnd", 0, "uint", 0, "int", $CallEvery, "ptr", $pTimerProc) $uiTimer = $uiTimer[0] EndFunc Func MyCallBackFunc($hWnd, $uiMsg, $idEvent, $dwTime) Opt("MouseCoordMode", 2) Local $Title = "Копирование..." If WinExists($Title) And WinActive($Title) Then If _IsPressed(01) Then $mousePos = MouseGetPos() If $mousePos[0] > 303 And $mousePos[0] < 362 And $mousePos[1] > 102 And $mousePos[1] < 124 Then WinClose($Title) MsgBox(16, "Error", "Copying aborted") Quit() EndIf EndIf EndIf EndFunc Func Quit($Exit=1) _DllCallBack_Free($pTimerProc) DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "uint", $uiTimer) If $Exit Then Exit EndFunc |
||||
------- Последний раз редактировалось Creat0R, 09-10-2007 в 11:19. Отправлено: 10:59, 09-10-2007 | #569 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
|
|
Отправлено: 12:19, 09-10-2007 | #570 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 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 |
|