PDA

Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

Maza Faka
08-10-2007, 08:26
Creat0R
Твой пример не работает?
Работает, но только для RadioButton, а мне надо для Button.

Creat0R
08-10-2007, 09:29
amel27, во замутил!
:biggrin:

у меня вроде получилось без RegExp:
Класс.. правда пока не понял как оно работает.. кстати, тут тоже проблема с буквами е/ё.. если выделить две буквы одна из которых буква е, то выделение неверно делается.
Но в сравнении моя функция всё же быстрее :tongue: - но полагаю твой пример будет надёжнее (если поправить недочёты с е/ё и т.п).

Ранее уже постил свой вариант через API
Спасибо, но это не совсем то, мне нужно не позиции, а проверить существование элементов - Я заранее не знаю как именуется Мой компьютер (к примеру), на разных машинах по разному, мне нужно получить универсальное название, и сравнить со списком (который я получаю с рабочего стола, но другим методом, используются функции от A3LLibrary).
Т.е по сути нужно проверить типа..
If FileExists(@DesktopDir & "\Мой компьютер") Then...
Естественно так не работает...

А зачем Send('{CTRLDOWN}') Send('{CTRLUP}'), от залипаний Ctrl?
да, от залипании, не знаю почему, но иногда залипает :) (сейчас наверно можно убрать, т.к Ctrl не используется при вызове конвертировании).

Maza Faka
08-10-2007, 10:00
Почему функция 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

amel27
08-10-2007, 11:55
не понял как оно работаетесли грубо... выделяем с CTRL пока размер выделенного фрагмента не превысит исходный (из буфера), потом возвращаемся обратно но уже без CTRL

тут тоже проблемаисправил, алгоритм не зависит от текста

не знаю как именуется Мой компьютертам же (http://forum.oszone.net/post-656037-1570.html) добавил линк на параметры реестра

Creat0R
08-10-2007, 13:23
amel27,
выделяем с CTRL пока размер выделенного фрагмента не превысит исходный (из буфера), потом возвращаемся обратно но уже без CTRL
Вот если бы можно было быстрее это делать... при длинном выделении очень медленно получается.

Мне удалось в моей функции преодалеть проблемы когда выделялся весь текст если исходное выделение было посредине слова.. плюс я вспомнил, ведь есть ещё 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


там же добавил линк на параметры реестра
Спасибо, полезный линк :) - правда нужной инфы я там не нашёл, а я прочитал каждую строчку на той страничке :(

Creat0R
08-10-2007, 14:30
Maza Faka, Почему функция AdlibEnable начинает работать только после того, как файл скопировался?
Она не успевает срабатывать, и функция AdlibDisable() её отключает, попробуй уменьшить время запуска Adlib...
Просто ставим MsgBox под AdlibDisable и мы в этом убеждаемся ;)

Я так понял нужно определить было ли отменено копирование? попробуй использовать Callback функции из примера что я приводил ранее (http://forum.oszone.net/thread-60616-152.html#post651129), там скрипт не останавливается на момент копирования.

Вот кстати полезная ссылка по обьекту shell.application - http://msdn2.microsoft.com/en-us/library/aa969392.aspx (в вот конкретно по CopyHere (http://msdn2.microsoft.com/en-us/library/ms723207.aspx)).

amel27
08-10-2007, 15:03
нужной инфы я там не нашёл »
Добавляет Мой Компьютер,Мои Документы,Мое Сетевое окружение,Internet Explorer на Рабочий Стол

как Punto Switcher распознаёт текст в любом месте? » :dont-know как тебе точка зрения Absurd: http://forum.developing.ru/archive/index.php/t-1365.html :gigi:
у меня получилось только открывать/читать 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

Maza Faka
09-10-2007, 10:36
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")

Теперь бы оформить всё это красиво, например прописать содержимое доп. скрипта в основной, что бы скрипт вызывал сам себя, а не доп. скрипт. Помоги плиз.

Creat0R
09-10-2007, 10:59
amel27,
Добавляет Мой Компьютер,Мои Документы...
Это я видел, но это не помагает решить полностью проблему :( - У меня список содержит имена, как я проверю что именно эти имена (элементы) на рабочем столе?

как тебе точка зрения Absurd
Абсурдная :biggrin:

у меня получилось только открывать/читать URL непосредственно с вкладок:
Прямой доступ к DDE!!! я это давно искал, биг Thanks!!!

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

Саму библиотеку DllCallBack.au3 скачать можно тут (http://www.autoitscript.com/forum/index.php?showtopic=50768&hl=callback).

amel27
09-10-2007, 12:19
Creat0R
У меня список содержит имена, как я проверю что именно эти имена (элементы) на рабочем столе? »смотри HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID, параметр "по умолчанию"... если пусто, значит берется дефолтовый из HKLM\SOFTWARE\Classes\CLSID

Creat0R
09-10-2007, 12:33
amel27,
если пусто, значит берется дефолтовый из HKLM\SOFTWARE\Classes\CLSID
У меня там кроме Мой компьютер везде пусто...

А по второму адресу - к примеру тут HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E} должно быть имя корзины, там так и написано Корзина (в “по умолчанию”), но у меня корзина именуется как Mycop ;) - Вот тут то и проблема, список содержит именно Mycop (это латинские буквы кстати), в реестре я не нашёл это значение :(

amel27
09-10-2007, 13:06
Creat0R
ну не знаю :dont-know ... у меня после переименования новое имя сразу появилось в HKCU, правда чтобы я смог переименовать корзину с рабочего стола мне пришлось применить соответствующий твик

Creat0R
09-10-2007, 13:21
amel27,
А «Мои документы» тоже нормально отображаются в реестре?
У меня их вообще нигде нету, даже не в оригинальном названии :dont-know .

Maza Faka
09-10-2007, 14:57
Creat0R
Большое спасибо за пример, а если бы ты ещё нашёл время, что бы разжевать мне эту функцию:

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

то было бы вообще здорово! А то ведь простое использование знаний не даст.

Creat0R
09-10-2007, 17:13
Maza Faka,
разжевать мне эту функцию:
Там всё просто...
вызывается функция _DllCallBack, которая как бы регистрирует для процесса (скрипта) указанную функцию (через параметр $FuncName), и возвращает на неё указатель..
Далее просто по этому указателю вызывается таймер (строка с вызовом Dll) с заданым временем промежутка между повторами вызова (a.k.a AdibEnable ;)) - Всё, наша функция вызывается каждый заданный промежуток времени, пока не высвободить таймер (см. в функции Quit()).

[hr]

Пример-Скрипт для предотвращения ввода не цифр в Input-поле:

#include <GuiConstants.au3>

Global Const $WM_COMMAND = 0x0111
Global $GUIOldPos[2]

$GUI = GUICreate("<Only Numbers> in Input Demo GUI", 300, 100)

$Input = GUICtrlCreateInput("", 20, 40, 260, 20)
$Exit = GUICtrlCreateButton("Exit", 20, 70, 60, 20)

GUISetState()
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $Exit
ExitLoop
Case Else
CheckToolTip()
EndSwitch
WEnd

Func CheckToolTip()
Local $GetCurInfo = GUIGetCursorInfo($GUI)
Local $GuiGetPos = WinGetPos($GUI)
If $GetCurInfo[2] = 1 Or $GUIOldPos[0] <> $GuiGetPos[0] Or $GUIOldPos[1] <> $GuiGetPos[1] Then
ToolTip("")
$GUIOldPos = $GuiGetPos
EndIf
EndFunc

Func _Input_Changed()
ToolTip("")
Local $ReadInput = GUICtrlRead($Input)
If StringRegExp($ReadInput, '[^0-9]') Then
GUICtrlSetData($Input, StringRegExpReplace($ReadInput, '[^0-9]', ''))

Local $GuiGetPos = WinGetPos($GUI)
Local $XPos = $GuiGetPos[0] + 280
Local $YPos = $GuiGetPos[1] + 80

ToolTip("Here only numbers are allowed", $XPos, $YPos, "Not allowed symbol", 3, 1)
DllCall("user32.dll", "int", "MessageBeep", "int", 0x0)
EndIf
EndFunc ;==>_Input_Changed

Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0xFFFF)
Local Const $EN_CHANGE = 0x300
Local Const $EN_SETFOCUS = 0x100

Switch $nID
Case $Input
Switch $nNotifyCode
Case $EN_CHANGE
_Input_Changed()
Case $EN_SETFOCUS
ToolTip("")
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>MY_WM_COMMAND

Многие используют стиль $ES_NUMBER, но он не перестраховывает от вставки текста по Ctrl V или с контексного меню.

DenchikK
09-10-2007, 21:59
Подскажите пожалуйста, что то я так и не нашёл - как можно настроить скрипт на выход из цикла по нажатию на определённую клавишу?

Вот как то так пытался, не выходит:


WinActivate ("µTorrent","")

Sleep (500)

Global $i

$i = 0

While $i <= 10 or Send ('{F2}')
Sleep (1000)
Send ("{APPSKEY}")
Sleep (1000)
Send ("{UP}{UP}")
Sleep (1000)
Send ("{Enter}")
$i=$i+1
Sleep (1000)

WEnd

amel27
10-10-2007, 06:05
Creat0R, А «Мои документы» тоже нормально отображаются в реестре? »
измененное имя в HKCU аналогично другим, дефолтового действительно нет но его можно взять из параметра Personal ключа "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"

Lodoss
10-10-2007, 07:44
Привет всем.

По работе понадобилось конвертировать большое количество файлов из одного формата в другой.
Пакетного конвертера который бы выполнил мою задачу я ненашёл, поэтому пришлось изголяться непосредственно с приложением в котором есть такая возможность используя обычные команды меню и горячие клавиши (открывая последовательно сначала один файл: выполняя ряд действий, "импорт",..."экспорт" ;затем открывая второй файл и т. д....)


Проблему решил написав следующий скрипт


; выбор одного или нескольких файлов
$files = FileOpenDialog("Пакетное конвертирование файлов", "c:\", "любые файлы (*.*)", 1 + 4 ) & "|"
; если ничего не выбрано то выходим
If @error Then
TrayTip("пакетная обработка файлов", 'Выход', 5, 3)
MsgBox(16,"Информация","Ничего не выбрано", 7)
Exit
EndIf
$dir_in = StringMid($files,1, StringInStr($files, "\",0,-1))
$Chetchik=1
While $Chetchik<3
$sch=StringInStr( $files,"|",0,$Chetchik)
if $sch<>0 Then
$Chetchik=$Chetchik+1
Else
ExitLoop
endif
WEnd
; рисуем цикл для двух типов выделений
if $Chetchik>2 Then
; группа файлов
$i=1
While StringLen($files)>$i
$dir_in = StringReplace(StringReplace(StringMid($files,1, StringInStr($files, "|",0,1)), "|", "\"), "\\", "\")
$name=StringMid(StringMid($files,StringInStr ( $files,$dir_in)+2 ),StringInStr(StringMid($files,StringInStr ( $files,$dir_in)+2 ),"|",0,$i)+1,StringInStr( StringMid($files,StringInStr ( $files,$dir_in)+2 ),"|",0,$i+1) - StringInStr( StringMid($files,StringInStr ( $files,$dir_in)+2 ),"|",0,$i)-1)
if StringLen($name)>0 Then
$i=$i+1
prt_to_dwg($name)
Else
ExitLoop
endif
WEnd
Else ; один файл
$name=StringTrimRight(StringMid($files,StringInStr($files,$dir_in)+StringLen($dir_in)),1)
prt_to_dwg($name)
EndIf
; конец выполнения программы
TrayTip("пакетная обработка файлов", 'Конец', 5, 1)
MsgBox(64, "Информация", "Все опрации завершены" )

; функция обработки файла
Func prt_to_dwg($value)
$value = $value
TrayTip("пакетная обработка", 'обработка файла "' & $value & '"', 10, 1)
; для примера откроем блокнот
Run("notepad")
WinWait("Безымянный")
WinActivate("Безымянный")
Send("^o")
WinWait("Открыть")
WinActivate("Открыть")
Sleep(100)
ControlSetText("Открыть", "", "Edit1", $dir_in & $value)
Sleep(5000)
WinClose("Открыть")
WinClose("Безымянный")
WinWaitClose("Безымянный")
EndFunc


Сейчас осенила мысль - неплохо бы написать к этому скрипту GUI
с прогресс баром, возможностью выбора входящих и исходящих папок до и после обработки + возможность
использовать включающий и исключающий фильтр в названиях обрабатываемых файлов.

Посему вопрос: не делал ли кто нибудь нечто похожее? Неохота изобретать велосипед :)

Maza Faka
10-10-2007, 07:49
DenchikK
Попробуй так:

Dim $i = 0

HotKeySet("{F2}", "Quit")

WinWait("µTorrent")
WinActivate ("µTorrent")

Sleep (500)

While $i <= 10
Sleep (1000)
Send ("{APPSKEY}")
Sleep (1000)
Send ("{UP}{UP}")
Sleep (1000)
Send ("{Enter}")
$i += 1
Sleep (1000)
WEnd

Func Quit()
Exit
EndFunc

Maza Faka
10-10-2007, 12:02
Lodoss
Вот пример как это можно сделать, если нужен законченный скрипт, тогда выкладывай подробности ;)




© OSzone.net 2001-2012