|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [архив - Часть 2] AutoIt скрипты |
|
[архив - Часть 2] AutoIt скрипты
|
(*.*) Сообщения: 36549 |
Профиль | Сайт | Отправить PM | Цитировать
Внимание! Тема переведена в архивное состояние Текущая тема 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 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
Цитата Creat0R:
Цитата Creat0R:
|
|||
Последний раз редактировалось amel27, 03-10-2007 в 10:47. Отправлено: 10:16, 03-10-2007 | #541 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
Цитата:
Цитата:
|
|||
------- Отправлено: 13:30, 03-10-2007 | #542 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Creat0R,
Цитата:
|
|
Отправлено: 00:58, 04-10-2007 | #543 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать samsobi
Цитата:
Creat0R, Цитата:
HotKeySet("^`", "TEST") While 1 Sleep(500) WEnd Func TEST() ConsoleWrite (_ControlGetTextLength()&@CRLF) EndFunc Func _ControlGetTextLength() Local $u = DllStructCreate("int;int;hwnd;hwnd;hwnd;hwnd;hwnd;hwnd;long;long;long;long") DllStructSetData ($u, 1, DllStructGetSize($u)) Local $TopWnd = DllCall('user32.dll', 'hwnd', 'GetForegroundWindow') Local $TID = DllCall('user32.dll', 'int', 'GetWindowThreadProcessId', 'hwnd', $TopWnd[0], 'ptr', 0) DllCall('user32.dll', 'int', 'GetGUIThreadInfo', 'int', $TID[0], 'ptr', DllStructGetPtr($u)) Local $Res = DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', DllStructGetData($u,8), 'int', 0xE, 'int', 0, 'ptr', 0) Return $Res[0] EndFunc Цитата Creat0R:
Цитата Creat0R:
Global $objASC = ObjCreate("Scripting.Dictionary") Global $objANS = ObjCreate("Scripting.Dictionary") InitMatrix ($objASC, $objANS) HotKeySet("^`", "ConvertProc") While 1 Sleep(500) WEnd Func ConvertProc() Send("^{Insert}") Local $strSelect = ClipGet() If $strSelect='' Then Return ClipPut(InvertText($strSelect, $objASC, $objANS)) Sleep(100) Send("+{Insert}") ClipPut('') EndFunc Func InvertText($sText, ByRef $objASC, ByRef $objANS) If StringIsASCII($sText) Then Return ConvertText($sText, $objASC) Else Return ConvertText($sText, $objANS) EndIf EndFunc Func ConvertText($sText, ByRef $objMatrix) Local $i, $s, $n, $sRes='' For $i=1 To StringLen($sText) $s = StringMid($sText,$i,1) $n = $objMatrix.Item ($s) If $n Then $sRes &= $n Else $sRes &= $s EndIf Next Return $sRes EndFunc Func InitMatrix(ByRef $objASC, ByRef $objANS) Local $aASC = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./" & '~@#$^&QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?' Local $aANS = "ёйцукенгшщзхъфывапролджэячсмитьбю." & 'Ё"№;:?ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,', $i For $i=1 To StringLen($aASC) $objASC.Add (StringMid($aASC,$i,1),StringMid($aANS,$i,1)) $objANS.Add (StringMid($aANS,$i,1),StringMid($aASC,$i,1)) Next EndFunc |
||||
Отправлено: 12:33, 04-10-2007 | #544 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
Цитата:
Цитата:
Цитата:
Я кстати ещё хотел бы сделать небольшой GUI-интерфейс для этого скрипта, чтобы “на лету” можно было править соотношения символов (т.е сопостовлять к одной клавише другую, у меня иногда не очень удобно получается, нужно руками править некоторые символы). Это поможет использовать не только Rus <-> Eng |
||||
------- Отправлено: 18:21, 04-10-2007 | #545 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R
Цитата:
Func _ControlGetFocus() Local $res, $u = DllStructCreate("int;int;hwnd;hwnd;hwnd;hwnd;hwnd;hwnd;long;long;long;long") DllStructSetData ($u, 1, DllStructGetSize($u)) $res = DllCall('user32.dll', 'hwnd', 'GetForegroundWindow') $res = DllCall('user32.dll', 'int', 'GetWindowThreadProcessId', 'hwnd', $res[0], 'ptr', 0) DllCall('user32.dll', 'int', 'GetGUIThreadInfo', 'int', $res[0], 'ptr', DllStructGetPtr($u)) Return DllStructGetData($u, 4) EndFunc Цитата:
|
||
Отправлено: 03:51, 05-10-2007 | #546 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Цитата:
Цитата:
Но вообще то, вот как я имел в виду: Откроем Notepad, и впишем туда это: Цитата:
Вот я и подумал, если мы заранее знаем наш текст (который изначально был выделен и конвертирован - но нам нужен уже “новый”, конвертированный текст), то всё что нам нужно сделать, так это распознать сколько раз в этом тексте, встречаются символы по которым Ctrl Shift Left будет переходить - т.е как я это вижу, нужно по RegExp подобрать условия замены (на основе нашего текста), чтобы получить в результате нужное количество сдвигов влево (в нашем случае должно получится 10) по @Extended, ну или через размерность массива если использовать только StringRegExp(). |
|||
------- Отправлено: 04:56, 05-10-2007 | #547 |
Ветеран Сообщения: 604
|
Профиль | Отправить PM | Цитировать При копировании с использованием
, возвращаемое значение отсутствует, соответственно возникает вопрос, как отследить скопировался ли файл или во время процесса копирования пользователь отменил копирование и исходя из результата выдать итоговое сообщение. Пока проверяю сравнивая размер исходного и конечного файла, но может есть более красивое и практичное решение?
$copy = CopyFile("d:\Video\Films", "C:\", "video.avi") If @error Then MsgBox(16, "Error", "Copying is canceled") Else MsgBox(0, "Done", "Copying successful") EndIf Func CopyFile($source, $dest, $file) $WinShell = ObjCreate("shell.application") $WinSHell.NameSpace($dest).CopyHere($source &"\"& $file) If FileGetSize($source &"\"& $file) = FileGetSize($dest & $file) Then Return 0 Else Return SetError(1) EndIf EndFunc |
Отправлено: 09:19, 05-10-2007 | #548 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Вопрос по GUIRegisterMsg($WM_NCPAINT), как я понял если $wParam возвращает 1, значит произошла перерисовка всего окна.
Во всех остальных случаях можно ли как-то узнать координаты перерисовки? |
Отправлено: 10:11, 05-10-2007 | #549 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27
Цитата Creat0R:
Func GetLeftJumps($Text) StringRegExpReplace($Text, '\n', '') Local $Extended = @extended $Text = StringStripWS($Text, 3) $Text = StringRegExpReplace($Text, '\s+|\t+', ' ') $Text = StringRegExpReplace($Text, '~|`|!|#|%|\^|&|\*|\(|\)|-|\+|=|\{|\}|''|"|;|:|/|\\|<|>|\?|,|\[|\]|ч|Ч|ё|Ё', '|') $Text = StringRegExpReplace($Text, '\|+', '|') If StringIsASCII($Text) Then $Text = StringRegExpReplace($Text, '\.', '|') Local $WordsCountArr = StringRegExp($Text, "[\s\.:;,]*([а-яА-Яa-zA-Z0-9-_]+)[\s\.:;,]*", 3) StringRegExpReplace($Text, '\|', '') Return $Extended + @extended + UBound($WordsCountArr) EndFunc Есть конечно пару(?) недостатков - к примеру, если выделить текст посредине общего текста, то выделяться будут и все предыдущие символы, идущие подряд до первого символа в выделенном тексте. Вот полное применение + использование твоего примера: #NoTrayIcon Global $objASC = ObjCreate('Scripting.Dictionary') Global $objANS = ObjCreate('Scripting.Dictionary') InitMatrix($objASC, $objANS) HotKeySet('`', 'ConvertProc') HotKeySet('^q', 'Quit') While 1 Sleep(100) WEnd Func ConvertProc() Local $OldClip = ClipGet() ClipPut('') Send('^{Insert}') Local $SelectedText = ClipGet() If $SelectedText = '' Then Return Local $InvertedText = InvertText($SelectedText, $objASC, $objANS) ClipPut($InvertedText) Sleep(100) Send('+{Insert}') Local $LeftJumps = GetLeftJumps($InvertedText) Send('^+{LEFT ' & $LeftJumps & '}') Send('{CTRLDOWN}') Send('{CTRLUP}') ClipPut($OldClip) EndFunc Func InvertText($sText, ByRef $objASC, ByRef $objANS) If StringIsASCII($sText) Then Return ConvertText($sText, $objASC) Else Return ConvertText($sText, $objANS) EndIf 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, '\|+', '|') If StringIsASCII($Text) Then $Text = StringRegExpReplace($Text, '\.', '|') Local $WordsCountArr = StringRegExp($Text, "[\s\.:;,]*([а-яА-Яa-zA-Z0-9-_]+)[\s\.:;,]*", 3) StringRegExpReplace($Text, '\|', '') Return $Extended + @extended + UBound($WordsCountArr) EndFunc Func ConvertText($sText, ByRef $objMatrix) Local $i, $s, $n, $sRes = '' For $i = 1 To StringLen($sText) $s = StringMid($sText, $i, 1) $n = $objMatrix.Item ($s) If $n Then $sRes &= $n Else $sRes &= $s EndIf Next Return $sRes EndFunc Func InitMatrix(ByRef $objASC, ByRef $objANS) Local $aASC = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./" & '~@#$^&QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?' Local $aANS = "ёйцукенгшщзхъфывапролджэячсмитьбю." & 'Ё"№;:?ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,', $i For $i = 1 To StringLen($aASC) $objASC.Add (StringMid($aASC, $i, 1), StringMid($aANS, $i, 1)) $objANS.Add (StringMid($aANS, $i, 1), StringMid($aASC, $i, 1)) Next EndFunc Func Quit() Exit EndFunc |
|
------- Отправлено: 10:59, 05-10-2007 | #550 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Открывая 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 |
|