Недавние сообщения

Страницы: [1] 2 3 ... 10
1
Стол заказов / Переименовать файл ворда строкой из первого титульного листа
« Последний ответ от Grizli Отправлен Сегодня в 04:27:13 »
Версия AutoIt: 3.3.14.5

Описание:
Здравствуйте уважаемые. Помогите реализовать такую интересную задачу- На работе человек удалил папку со всеми своими документами. Восстановил, и там около трех тысяч одних только вордовских файлов doc,docx,rtf, все имеют маску filexxx. Нужно как-то проверить, если первый лист титульный, то переименовать файл как указано в середине титульного листа.
Примечания:
Думаю такой скрипт будет полезен многим. От ситуации, в которой оказалась женщина с работы, не застраховано большинство обычных пользователей пк.
2
Стол заказов / Re: Нажатие клавиш при изменении цвета пикселя
« Последний ответ от S3EK Отправлен Вчера в 21:16:49 »
Благодарю!
3
... не все так удобно как кажется...
Так не импортируйте и не пользуйтесь.

... у меня все :)
У меня тоже.
4
Alofa  [?]
Цитировать
Вот именно. И еще если освоил английский.
ну, тут тогда любая справка не поможет если она не переведена :)

Цитировать
Речь тут не о офлайн справке

joiner  [?]
Цитировать
в браузере это ctrl+F
это то же самое что и

Цитировать
В офлайн справке через указатель

я указал на главный глюк ссылок - при случайном обновлении они пропадают. идешь : ссылка\ссылка\ссылка.... и тут всплыло окно либо браузер "мигнул" и начинай заново :)
не все так удобно как кажется, и насчет упорядоченности, то и там и там все удобно. поиск на странице рулит
у меня все :)
5
Если покажете что именно делают FunPatch_1(), func FunPatch_2(), можно будет ответить подробнее.

FunPatch_1(), func FunPatch_2() - выполняют набор стандартных операций. Изменить в реестре ветку, удалить или добавить файл, запустить программу с параметром и т.д.

Зачем эти первые три строки? Зачем лишние переменные? Пиши сразу в массив!!!

Там происходит проверка GUICtrlCreateTreeViewItem, пока не придумал как это сразу записать в массив:

Код: AutoIt [Выделить]
            $patchCheck_1 = BitAND(GUICtrlRead($GUI_Patch_1), $GUI_CHECKED) = $GUI_CHECKED
            $patchCheck_2 = BitAND(GUICtrlRead($GUI_Patch_2), $GUI_CHECKED) = $GUI_CHECKED
            $patchCheck_3 = BitAND(GUICtrlRead($GUI_Patch_3), $GUI_CHECKED) = $GUI_CHECKED


Нет, есть еще кастыльный способ.
Есть функция под названием Execute . Можно написать так:
Код: AutoIt [Выделить]
; если $i = 2 , то это выражение
[autoit]Execute ( "patch_" & $i & "()")
; будет равносильно
patch_2()
; только в цикле переменная будет меняться.


А вот этот костыльный способ, оказался просто идеальным. Всю логику уместил в 2-е строки. Как раз то что искал и даже лучше. Добился полного функционала без "раздувания" кода.

Код: AutoIt [Выделить]
$patchCheck_1 = BitAND(GUICtrlRead($GUI_Patch_0), $GUI_CHECKED) = $GUI_CHECKED ;$i = 0
$patchCheck_2 = BitAND(GUICtrlRead($GUI_Patch_1), $GUI_CHECKED) = $GUI_CHECKED ;$i = 1
$patchCheck_3 = BitAND(GUICtrlRead($GUI_Patch_2), $GUI_CHECKED) = $GUI_CHECKED ;$i = 2

Dim $patch[3] = [$patchCheck_1, $patchCheck_2, $patchCheck_3]

            For $i = 0 To UBound($patch) - 1
    Select
        Case $patch[$i] = True

            Execute ( "FunPatch_" & $i & "()")
            GUICtrlSetState (Execute ( "$GUI_Patch_" & $i), $GUI_UNCHECKED) ;снимает галку с уже установленного патча.

            $patch[$i] = False
    EndSelect
Next

;Не хотелось объединять функции в одну. Мне так проще ориентироваться в коде + менять логику 1 "маленькой" удобней чем 1 "огромной".
;func FunPatch_0()
;func FunPatch_1()
;func FunPatch_2()

6
... Если знаю что искать...
Вот именно. И еще если освоил английский.

... В офлайн справке через указатель. Попробуй...
Речь тут не о офлайн справке и не обо мне.
7
Общие вопросы по AutoIt / ControlSend аналог в WinAPI?
« Последний ответ от eysh Отправлен Вчера в 14:01:58 »
Подскажите что то похожее на
Код: AutoIt [Выделить]
в WinAPI?
8
Зачем эти первые три строки? Зачем лишние переменные? Пиши сразу в массив!!!
Одну функцию сделай с параметром, с аргументом!
Код: AutoIt [Выделить]
Func patch ( $i )
    ; что там у тебя,
;установка программ?
    ; сделай такойже массив и также вызывай
    ; или так:
    ; If $i = 1 Then ; делай это
    ; If $i = 2 Then ; или это
EndFunc

Я же в первом сообщении сказал об этом.
Нет, есть еще кастыльный способ.
Есть функция под названием Execute . Можно написать так:
Код: AutoIt [Выделить]
; если $i = 2 , то это выражение
Execute ( "patch_" & $i & "()")
; будет равносильно
patch_2()
; только в цикле переменная будет меняться.

9
Избавиться от FunPatch_1(), func FunPatch_2()
Переписать FunPatch() так, чтобы принимала на вход аргумент:
  Select
        Case $patch[$i] = True
                FunPatch($i)           
            $patch[$i] = False
    EndSelect
Если покажете что именно делают FunPatch_1(), func FunPatch_2(), можно будет ответить подробнее.
10
Спасибо! Массив реально помог сделать код чище и надежней. Может тогда дадите совет как упростить запись внутри case (за основу взял ответ выше):

Код: AutoIt [Выделить]
$patchCheck_1 = True ; i = 0
$patchCheck_2 = False ; i = 1
$patchCheck_3 = True ; i = 2

Dim $patch[3] = [$patchCheck_1, $patchCheck_2, $patchCheck_3]


For $i = 0 To UBound($patch) - 1
    Select
        Case $patch[$i] = True

            #comments-start
            if $i = 0 Then
                FunPatch_1()
            EndIf

            if $i = 1 Then
                FunPatch_2()    Как можно упростить данную конструкцию?
            EndIf

            if $i = 2 Then
                FunPatch_3()
            EndIf
            #comments-end


            $patch[$i] = False
    EndSelect
Next

;func FunPatch_1()
;func FunPatch_2()
;func FunPatch_3()

Страницы: [1] 2 3 ... 10