[архив - Часть 2] AutoIt скрипты

Ответить
 • Просмотры: 20
Аватара пользователя
Maza Faka

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Maza Faka »

Как правильно создавать многомерные массивы? Например функция ProcessList возвращает двумерный массив:



Код:

Код: Выделить всё

$list = ProcessList()
for $i = 1 to $list[0][0]
  msgbox(0, $list[$i][0], $list[$i][1])
next

По аналогии пытаюсь создать свой двумерный массив, но не получается:



Код:

Код: Выделить всё

Global $TestArray[4][4] = [[3, "First", "Second", "Third"], [3, "John", "Steve", "Arnold"]]
For $i = 1 To $TestArray[0][0]
    MsgBox(0, $TestArray[$i][0], $TestArray[$i][1])
Next

Работает только, если сделать так:



Код:

Код: Выделить всё

MsgBox(0, $TestArray[0][$i], $TestArray[1][$i])

Кто нибудь может разжевать Изображение
Аватара пользователя
Maza Faka

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Maza Faka »

amel27

Ты ГУРУ! Изображение

Сделал так:



Код:

Код: Выделить всё

#include "SysTray_UDF.au3"
$ListArray = ProcessList("LA.exe")
MsgBox(0, "Hide", "Now hide is Light Alloy icons")
For $i = 1 To $ListArray[0][0]
    $index = _SysTrayIconIndex($ListArray[$i][1])
    _SysTrayIconVisible(1, $index)
Next
Sleep(1000)
MsgBox(0, "Visible", "Now visible is Light Alloy icons")
For $i = 1 To $ListArray[0][0]
    $index = _SysTrayIconIndex($ListArray[$i][1])
    _SysTrayIconVisible(0, $index)
Next

Работает! Изображение



P.S.

Может сообщишь автору, о том, что изменил его библиотеку и теперь её можно считать не бетой, а релизом. Изображение
Аватара пользователя
Angelus

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Angelus »

А как заставить GUI интерфейс использовать рисунки которые вшиты в EXE файл???
Аватара пользователя
Angelus

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Angelus »

Т.е. закрыть языковую панель таким способом, что я предложил не получится? Изображение
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

Maza Faka,


Цитата:



Как правильно создавать многомерные массивы?



Я если честно сам до сих пор точно понять не могу, но для себя сделал функцию (не всегда подходящюю правда), которая создаёт двумерный массив из строк по разделителю:





Код:

Код: Выделить всё

#include 
Dim $Array = _Array2DCreate("Jimmy|Mike|George", "0|1|2")
_ArrayDisplay($Array)
Func _Array2DCreate($1DStr, $2DStr, $Delim="|")
    Local $2DArray[1][1], $iUbound
    Local $BiggestArray = StringSplit($1DStr, $Delim)
    Local $SmallestArray = StringSplit($2DStr, $Delim)
        If UBound($SmallestArray) > UBound($BiggestArray) Then
        Local $TempArray = $BiggestArray
        $BiggestArray = $SmallestArray
        $SmallestArray = $TempArray
    EndIf
        ReDim $SmallestArray[UBound($BiggestArray)]
        For $i = 1 To UBound($BiggestArray)-1
        $iUbound = UBound($2DArray)
        ReDim $2DArray[$iUbound+1][2]
        $2DArray[$iUbound][0] = $BiggestArray[$i]
        If $SmallestArray[$i]  "" Then $2DArray[$iUbound][1] = $SmallestArray[$i]
    Next
    $2DArray[0][0] = $iUbound
    Return $2DArray
EndFunc

“Ведущий массив”, это самый большой найденный массив Изображение.



Angelus,
Цитата:



как заставить GUI интерфейс использовать рисунки которые вшиты в EXE файл???



Смотря для чего, обычно можно использовать GuiCtrlSetImage(-1, "File.exe", 0)

Где 0 это имя ресурса изображения в Exe'шнике.



SAOPP,


Цитата:



закрыть языковую панель таким способом, что я предложил не получится?



Ты так и не ответил на мой вопрос:


Цитата:



может есть уже открыто подобное окошко где то? перезапустить систему пробовал?



У меня это работает Изображение
Аватара пользователя
amel27

Re: [архив - Часть 2] AutoIt скрипты

Сообщение amel27 »

Maza Faka


Цитата:



Ты ГУРУ



да ну брось - скрипт содержал весь нужный код... хотя не совсем понятна мотивация автора при выборе алгоритма, может из соображений производительности? Изображение


Цитата:



Может сообщишь автору, о том, что изменил его библиотеку и теперь её можно считать не бетой, а релизом.



это надо просить Creat0R'а, я на офсайте редко бываю... его вопрос, ему и обосновывать перед автором Изображение
Аватара пользователя
SAOPP

Re: [архив - Часть 2] AutoIt скрипты

Сообщение SAOPP »

amel27,
Цитата:



неплохой повод поюзать Scripting.Dictionary



А подробнее можно плиз?




Цитата:



а смысл?... и что есть "элемент" - весь документ, предложение или слово?



Смысл в том, чтобы менять текст введённый в адресную строку браузера не в той раскладке (в моём случае это Opera, там адрес. строка это не стандартный элемент, Au3Info его не видит), и всего лишь. Поэтому нужно получить текст с начала строки. Это реально вообще, т.е просто отслеживать набранный текст и проверять его сиволы? (если не StringIsASCII() тогда конвертить).




Цитата:



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



Эх, еслиб я знал как это можно сделать... вот это одна из причин ("смысл") по которой нужно получать текст в реальном времени, и соответственно, если этого добиться (как мне кажется), то можно будет и выделять куски текста по количеству исходных символов...




Цитата:



перед экспортом удалять прям по тексту все "зависшие" табуляторы и пробелы.



Что значит "зависшие"? т.е это те строки которые содержат только пробелы и табы, и ничего больше?

Понял, всё сработало, написал функцию для очистки лишних пробелов и табов, и теперь нормально вставляется (см.
[архив - Часть 2] AutoIt скрипты
со скриптом конвертирования Изображение ).



amel27,


Цитата:



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



Придумал как это сделать! Изображение





Код:

Код: Выделить всё

Func ConvertProc()
    Local $OldClip = ClipGet()
    Send("^{Insert}")
    Local $SelectedText = ClipGet()
    If $SelectedText = $OldClip Then Return
    Local $NewClip = ConvertText($SelectedText)
    ClipPut($NewClip)
    Sleep(100)
    Send("+{Insert}")
    Local $NewClipLenght = StringLen($NewClip)
    Send("{SHIFTDOWN}")
    Send("{LEFT " & $NewClipLenght & "}")
    Send("{SHIFTUP}")
    ClipPut($OldClip)
EndFunc

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

P.S

Обновил
[архив - Часть 2] AutoIt скрипты
.
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

Многие (и наверное я сам) тут спрашивали, как копировать большой файл, и при этом получать данные прогресса...

Так вот, используя быстро набирающую популярность на оф. форуме
библиотеку DllCallBack.au3
, можно этого добиться очень просто!!!:





Код:

Код: Выделить всё

#include 
_FileCopyEx("C:\BigFile.avi", @ScriptDir & "\BigFile.avi")
Func _FileCopyEx($Source, $Dest)
    If Not FileExists($Source) Then Return SetError(1)
    ProgressOn("_FileCopyEx() Demo", "Копирование, ждите плиз...")
    $pCopyProgressRoutine = _DllCallBack("_CopyProgressRoutine", "uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr")
    DllCall("kernel32.dll", "int", "CopyFileExA", _
        "str", $Source, _
        "str", $Dest, _
        "ptr", $pCopyProgressRoutine, _
        "ptr", 0, _
        "int", 0, _
        "int", 0)
    _DllCallBack_Free($pCopyProgressRoutine)
    Sleep(1000)
    ProgressOff()
EndFunc
Func _CopyProgressRoutine($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
    $Precent = $TotalBytesTransferred/$TotalFileSize*100
    ProgressSet($Precent, "Проценты: " & Round($Precent, 1) & " %")
    Return 0
EndFunc   ;==>_CopyProgressRoutine

Вот и всё! Изображение
Аватара пользователя
TERMINAL

Re: [архив - Часть 2] AutoIt скрипты

Сообщение TERMINAL »

Creat0R, а как можно сделать если мне, например, нужно скопировать целую папку ( I386 c диска)и чтобы прогрес был и показывал сколько осталось минут и процентов? Можешь помочь?
Аватара пользователя
Creat0R

Re: [архив - Часть 2] AutoIt скрипты

Сообщение Creat0R »

Maza Faka,


Цитата:



Может сообщишь автору, о том, что изменил его библиотеку и теперь её можно считать не бетой, а релизом



А бибилиотека разве бетой считается? если ты про AutoIt3 Beta то это значит что библиотека требует (требовала) последнюю бетку самого AutoIt Изображение



amel27,


Цитата:



его вопрос, ему и обосновывать перед автором



Согласен,
обосновал
Изображение.



TERMINAL,


Цитата:



нужно скопировать целую папку ( I386 c диска)и чтобы прогрес был и показывал сколько осталось минут и процентов?



Можно с ситемным диалогом:





Код:

Код: Выделить всё

_FileCopy("C:\My Dir\*.*", "C:\Dest Dir")
Func _FileCopy($Source, $Dest)
    If Not FileExists($Dest) Then DirCreate($Dest)
    $WinShell = ObjCreate("shell.application")
    $WinShell.NameSpace($Dest).CopyHere($Source)
EndFunc
Ответить

Вернуться в «AutoIt»