Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: ViSiToR
Дата сообщения: 20.03.2008 00:37
zero1632

Цитата:
есть куча файлов, их надо рассортировать по определенным директориям. в сооствествии с расширениями.



Код:
$sFilesPath = @ScriptDir & "\Files"
$sIniFile = @ScriptDir & "\IniFile.ini"

$aReadIni = _IniReadSectionEx($sIniFile, "Mov")

For $i = 1 To UBound($aReadIni)-1
$hSearch = FileFindFirstFile($sFilesPath & "\*." & $aReadIni[$i][0])
If $hSearch = -1 Then ContinueLoop

While
1
$sNextFile = FileFindNextFile($hSearch)
If @error Then ExitLoop

FileMove($sFilesPath & "\" & $sNextFile, $aReadIni[$i][1], 8)
WEnd
Next
Автор: kefirko
Дата сообщения: 20.03.2008 08:27
Здравствуйте, такой вопрос (хотя может быть он уже звучал):
Как реализовать так, чтобы при выборе из первого списка динамически менялся второй, т.е. в первом комбо "числа от 1 до 10" во втором эти числа, если я в первом выбираю "числа от 11 до 20", то второй появляются числа от 11 до 20. Надеюсь понятно объяснил.


Код: #include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=d:\kefir\123\forum.kxf
$Form1_1 = GUICreate("Form1", 633, 454, 189, 111)
$Tab1 = GUICtrlCreateTab(0, 0, 593, 433)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
$Combo1 = GUICtrlCreateCombo("Combo1", 8, 32, 145, 25)
$Combo5 = GUICtrlCreateCombo("Combo5", 160, 32, 145, 25)
$Input1 = GUICtrlCreateInput("Input1", 312, 32, 50, 21)
$Label1 = GUICtrlCreateLabel("м2", 364, 36, 18, 17)
$Button1 = GUICtrlCreateButton("Button1", 384, 32, 75, 25, 0)
$Input2 = GUICtrlCreateInput("Input2", 464, 32, 121, 21)
$TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
GUICtrlCreateTabItem("")
$MenuItem1 = GUICtrlCreateMenu("&MenuItem1")
$MenuItem3 = GUICtrlCreateMenuItem("MenuItem3", $MenuItem1)
$MenuItem4 = GUICtrlCreateMenuItem("MenuItem4", $MenuItem1)
$MenuItem2 = GUICtrlCreateMenu("M&enuItem2")
$MenuItem5 = GUICtrlCreateMenuItem("MenuItem5", $MenuItem2)
$MenuItem6 = GUICtrlCreateMenuItem("MenuItem6", $MenuItem2)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit

EndSwitch
WEnd
Автор: Maza Faka
Дата сообщения: 20.03.2008 10:23
kefirko

Цитата:
Как реализовать так, чтобы при выборе из первого списка динамически менялся второй, т.е. в первом комбо "числа от 1 до 10" во втором эти числа, если я в первом выбираю "числа от 11 до 20", то второй появляются числа от 11 до 20.

Наверное так:

Код: #include <GUIConstants.au3>
#include <Array.au3>

$Form1_1 = GUICreate("Form1", 633, 454, 189, 111)

$Tab1 = GUICtrlCreateTab(0, 0, 593, 433)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("TabSheet1")

$Combo1 = GUICtrlCreateCombo("Combo1", 8, 32, 145, 25)
GUICtrlSetData(-1, "1-10|11-20")

$Combo5 = GUICtrlCreateCombo("Combo5", 160, 32, 145, 25)

$Input1 = GUICtrlCreateInput("Input1", 312, 32, 50, 21)
$Label1 = GUICtrlCreateLabel("м2", 364, 36, 18, 17)
$Button1 = GUICtrlCreateButton("Button1", 384, 32, 75, 25, 0)
$Input2 = GUICtrlCreateInput("Input2", 464, 32, 121, 21)
$TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
GUICtrlCreateTabItem("")
$MenuItem1 = GUICtrlCreateMenu("&MenuItem1")
$MenuItem3 = GUICtrlCreateMenuItem("MenuItem3", $MenuItem1)
$MenuItem4 = GUICtrlCreateMenuItem("MenuItem4", $MenuItem1)
$MenuItem2 = GUICtrlCreateMenu("M&enuItem2")
$MenuItem5 = GUICtrlCreateMenuItem("MenuItem5", $MenuItem2)
$MenuItem6 = GUICtrlCreateMenuItem("MenuItem6", $MenuItem2)
GUISetState(@SW_SHOW)

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case
$Combo1
_SetCombo(GUICtrlRead($Combo1))
EndSwitch
WEnd

Func
_SetCombo($sData)
Local $aNumber

$aNumber
= StringSplit($sData, "-")
If UBound($aNumber) < 3 Then Return False

GUICtrlSetData($Combo5, "")
GUICtrlSetData($Combo5, $aNumber[1] + 10 &"-"& $aNumber[2] + 10, $aNumber[1] + 10 &"-"& $aNumber[2] + 10)
EndFunc
Автор: kefirko
Дата сообщения: 20.03.2008 11:02
Maza Faka, спасибо. Очень помогло.
Может кто еще поможет ответить на последние 2 вопроса.
Автор: Maza Faka
Дата сообщения: 20.03.2008 11:26

Цитата:
Как узнать сколько в папке 123\ файлов с разрешением *.lala

Один из множества вариантов:

Код: #include <File.au3>

$aFile = _FileListToArray("c:\temp", "*.tmp", 1)
If @error Then Exit

MsgBox(0, "Msg", $aFile[0] & " *.tmp files found")
Автор: ViSiToR
Дата сообщения: 20.03.2008 12:06
kefirko

Цитата:
можно ли там расставить какие-л зависимости, т.е. нарисовал, а потом в этом же редакторе где-то указал, что при нажатии ЭТОЙ кнопки делается то, при нажатии ЭТОЙ другое

Если речь про OnEvent метод, то в настройках (Ctrl + K) нужно выставить «Генерировать код OnEvent», и при активном элементе слева в инспекторе объектов указать для поля OnClick (нажав на кнопку справа) имя функции которая будет вызываться.


Цитата:
Нужно в конец массива1 дописать массив2

Функция для склеивания двумерного массива:


Код:
Func _Array2DJoin(ByRef $ARRAY, ByRef $AR2JOIN)
If ( Not IsArray($ARRAY) ) Or ( Not IsArray($AR2JOIN) ) Then
SetError(1)
Return 0
EndIf
Local
$UB2ndAR = UBound($ARRAY,2)
If @error = 2 Then $UB2ndAR = 0
Local $UB2nd2JOIN = UBound($AR2JOIN,2)
If @error = 2 Then $UB2nd2JOIN = 0
Select
Case
$UB2ndAR = 0 And $UB2nd2JOIN = 0
For $i = 0 To UBound($AR2JOIN)-1
ReDim $ARRAY[UBound($ARRAY)+1]
$ARRAY[UBound($ARRAY)-1] = $AR2JOIN[$i]
Next
Return
-1
Case $UB2ndAR > 0 And $UB2nd2JOIN = 0
Local $arTmp = $AR2JOIN
ReDim $AR2JOIN[UBound($AR2JOIN)][$UB2ndAR]
For $i = 0 To UBound($arTmp)-1
$AR2JOIN[$i][0] = $arTmp[$i]
Next
Case
$UB2ndAR = 0 And $UB2nd2JOIN > 0
Local $arTmp = $ARRAY
ReDim $ARRAY[UBound($ARRAY)][$UB2nd2JOIN]
For $i = 0 To UBound($arTmp)-1
$ARRAY[$i][0] = $arTmp[$i]
Next
Case
$UB2ndAR > 0 And $UB2nd2JOIN > 0
Select
Case
$UB2ndAR < $UB2nd2JOIN
ReDim $ARRAY[UBound($ARRAY)][$UB2nd2JOIN]
Case $UB2ndAR > $UB2nd2JOIN
ReDim $AR2JOIN[UBound($AR2JOIN)][$UB2ndAR]
EndSelect
EndSelect
For $i = 0 To UBound($AR2JOIN)-1
ReDim $ARRAY[UBound($ARRAY)+1][UBound($ARRAY,2)]
For $k = 0 To UBound($AR2JOIN,2)-1
$ARRAY[UBound($ARRAY)-1][$k] = $AR2JOIN[$i][$k]
Next
Next
Return -1
EndFunc ;==>_Array2DJoin
Автор: zero1632
Дата сообщения: 20.03.2008 15:49

Цитата:
Можно конечно сначала считать все файлы в массив, и потом по RegExp распределять, но мне кажется так удобнее.


мне надо использовать маски файлов.


Цитата:
RegExp в AutoIt'е не поддерживает сравнения регистра букв для символов не латиницей.


понял. искомую строку (на русском) тоже переводить в нижний регистр?

а кто-нибудь пробовал осуществлять поиск по файлам? мне надо раскидать кучу файлов по разным директориям, в зависимости от словаря, в котором 100-120 слов.

шапку поиска по файлу прочел, скорость обработки файлов составаляет около 20 килобайт в секунду - разницы нет, читать через fileread или читать его через filereadline.
20 килобайт -как-то маловато.
Автор: serffil
Дата сообщения: 21.03.2008 17:45
У меня такая проблема:
Надо сделать ввод РУССКОГО текста в текстовый браузер lynx или links. вообще это возможно средствами аутоит? и вообще это реально? спасибо
Автор: gregaz
Дата сообщения: 22.03.2008 07:52
NIKZZZZ, Спасибо


Цитата:
gregaz

Цитата:А по поводу восстановления файлов я надеялся на наличие неизвестной мне простой команды , но ...

Код:$var = FileOpenDialog('',"::{645FF040-5081-101B-9F08-00AA002F954E}","All (*.*)" )
MsgBox('','',$Var)



Цитата:
Вот если бы оно ещё работало в FileFindFirstFile()


Да это было бы класс

Есть еще 1 вопрос :

Можно ли в ListView установить иконки на Итемы без использования image list ( _GUICtrlListView_SetItemImage ), а напрямую .
Использовать GUICtrlSetImage мне не удалось

Автор: Maza Faka
Дата сообщения: 22.03.2008 10:06
gregaz

Цитата:
Можно ли в ListView установить иконки на Итемы без использования image list ( _GUICtrlListView_SetItemImage ), а напрямую .

Можно, если создавать ListView и его item-ы встроенными функциями.

Цитата:
Использовать GUICtrlSetImage мне не удалось

Потому, что функции _GUICtrlListView_AddItem и _GUICtrlListView_InsertItem() возвращают не ID Item-а, а индекс.
Автор: gregaz
Дата сообщения: 22.03.2008 16:46

Цитата:


Цитата:Можно ли в ListView установить иконки на Итемы без использования image list ( _GUICtrlListView_SetItemImage ), а напрямую .


Можно, если создавать ListView и его item-ы встроенными функциями.

Цитата:Использовать GUICtrlSetImage мне не удалось


Потому, что функции _GUICtrlListView_AddItem и _GUICtrlListView_InsertItem() возвращают не ID Item-а, а индекс.


В который раз наступаю на грабли
Может получится , используя предварительно _GUICtrlListView_GetHeader
Спасибо, попробую , Maza Faka
Автор: sergey1979
Дата сообщения: 22.03.2008 16:59
Можно ли в AutoIt как нибудь получить список Controls для активного окна.

А то мне надо работать с прогой, которая вместо дочерних окон создает контролы своего типа... они отличаются только INSTANCE, причем при разных вариантах запуска программы нужное мне подокно может иметь разный номер INSTANCE.
Поле TEXT у всех пустое. CLASS совпадает....
Т.е. мне надо перебрать все controls и попробовать почитать заголовки их....
Автор: ViSiToR
Дата сообщения: 22.03.2008 17:25
sergey1979

Цитата:
Можно ли в AutoIt как нибудь получить список Controls для активного окна.

Есть WinGetClassList()... но возвращает она список не пронумерованный... я уже раньше приводил пример моей функции пронумирования этого списка... Добавил в шапку.
Автор: asdfzxcv
Дата сообщения: 22.03.2008 21:43
Подскажите хочу организовать клиент - сервер приложение по tcp через autoit запускаю скрипт из примеров самого автоита а он мне в логе выдаёт вот такую ошибку зелёным и молчит +>21:21:51 AU3Check ended.rc:0
Я так понимаю он мне возвращяет ошибку 0 так как нет связи с сокетом.
подскажите как справится с такой проблемой. Фаервол удалил что бы не мешался.

2) И второй вопрос, реально ли в автоит логировать все подключённые сесси пользователей к компу если они подключаются к расшаренным папкам по сети. Я искал во встроенных функциях, не нашёл, думаю мож через api как то можно но тоже не нашёл.
Автор: Maza Faka
Дата сообщения: 23.03.2008 07:50
asdfzxcv

Цитата:
Подскажите хочу организовать клиент - сервер приложение

Здесь этих примеров вагон и маленькая тачка


Цитата:
реально ли в автоит логировать все подключённые сесси пользователей к компу если они подключаются к расшаренным папкам по сети

Выполни в ком. строке net file /?
Автор: asdfzxcv
Дата сообщения: 23.03.2008 14:47
У меня вопрос стоит не в количестве примеров клиент сервер приложений, а в том что бы определить почиму у меня не работает не один пример даже из хелпа. ошибок никаких не пишет просто молча завершается работа скрипта и всё.

В примере TCPConnect

;CLIENT!!!!!!!! Start SERVER First... dummy!!
$g_IP = "127.0.0.1"

; Start The TCP Services
;==============================================
TCPStartUp()

; Connect to a Listening "SOCKET"
;==============================================
$socket = TCPConnect( $g_IP, 65432 )
If $socket = -1 Then Exit

Как я понимаю если при TCPConnect вылазиет ошибка "-1" то скрипт просто завершает свою работу.

как определить почиму у миеня коннект заканчивается неудачей -1 и не пашет?
В принцепи через прогу tcpview я вижу что порт открывается и пытается быть активным, но потом всё закрывается и тишина.
Непонятно.

А по поводу комманд net file или openfiles, то они несовсем удобны для моей задачи. Мне нужно запустить их в непрерывном цикле с записью в файл а потом этот файл обрабатывать в поиске нужных изменений, проц подвешивается из за цикла, эти команды сделаны не для постоянного мониторинга и анализа информации вот я и хотел через автоит это реализовать.
Автор: NORIO
Дата сообщения: 28.03.2008 03:24
Что то неполучается управлять винампом.
Вот мой код, которым я пытался перейти на следующий трек в плейлисте.


Код: $winamphandle = WinGetHandle("classname=Winamp v1.x")
DllCall("user32.dll", "int", "SendMessage", "hwnd", $winamphandle , "str", "", "int", 40048)
Автор: ViSiToR
Дата сообщения: 28.03.2008 08:50
NORIO

Цитата:
Вот мой код, которым я пытался перейти на следующий трек в плейлисте.

Я в своё время не смог найти идеальный метод управления Winamp'ом, пришлось использовать стороннюю утилиту.

Но сегодня я знаю что есть нормальный SDK для Winamp (хотя наверное я и раньше знал, но теперь лучше понимаю как им пользоваться )... вот заготовок для библиотеки на AutoIt: Winamp_Library.zip (2 kb).
Будет время добавлю документацию (описания к функциям) и ещё несколько нужных функции.
Автор: elchupakabra
Дата сообщения: 28.03.2008 12:18
Вопрос возможно уже звучал... Подскажите пожалуйста...
Можно ли в скрытом (свёрнутом виде) запустить keygen и ввести/получить данные.
И ещё бы на время запуска делать mute звука в системе.
Заранее спасибо...
Автор: NORIO
Дата сообщения: 28.03.2008 13:09
ViSiToR

Что то непонял как нужно это использовать.
Попробовал скрипт с этой библиотекой, ничего неработает.
А как sdk юзать я незнаю.

Ладно сделаю с помощью крона, там всё сразу заработало. Но скажи на будущее как надо было правильно юзать твой комплект?
Автор: Maza Faka
Дата сообщения: 28.03.2008 14:00
elchupakabra
Примерно так:

Код: SoundSetWaveVolume(0)

Dim $title = "Adobe Audition 1.5 keygen by AGAIN"

Run("c:\keygen.exe", "", @SW_MINIMIZE)

WinWait($title)

$data = ControlGetText($title, "", "Edit1")

MsgBox(0, "", $data)

SoundSetWaveVolume(100)
Автор: NORIO
Дата сообщения: 28.03.2008 15:25
Maza Faka
Ну вот например так.


Код: #Include <Winamp_Library.au3>
_Winamp_Stop()
Автор: Maza Faka
Дата сообщения: 28.03.2008 17:23
NORIO
Хм... ругается на необьявленную переменную, обьяви переменную в библиотеке If Not IsDeclared("WM_USER") Then Global Const $WM_USER = 0x0400.

P.S.
Какую версию AutoIt-а используешь?
Автор: NORIO
Дата сообщения: 28.03.2008 21:28
Maza Faka


Цитата:
Какую версию AutoIt-а используешь?


v 3.1.1.118
скоре бета т.к. находится в поддиректории "beta"
c:\Program Files\AutoIt3\beta\AutoIt3.exe
интерпретатор находящийся именно по этому пути был ассоциирован с исполнением скриптов.

ещё в директории находится более поздний
c:\Program Files\AutoIt3\AutoIt3.exe
он версии 3.1.1.126 незнаю бета ли это, но иполнение кода и с его помощью выдаёт тот же результат только сейчас попробовал.

Похоже у меня обе устаревшие и\или глючные версии.

А у тебя какая версия?
Автор: ViSiToR
Дата сообщения: 28.03.2008 22:06
NORIO

Цитата:
Похоже у меня обе устаревшие

При чём очень устаревшие , в шапке есть ссылка на закачку последней версии (3.2.10.0).
Автор: ynbIpb
Дата сообщения: 30.03.2008 15:37
Уважаемые знатоки!
помогите с решением.
Необходимо, чтоб при нажатии кнопки в GUI вылазило дочернее окно этого GUI, расположенное прям под ним и как бы было приклеено к нему, тоесть если основное окно таскаю, то оно тоже должно за ним таскаться.
Вот типа набросок:

Код: #include <GUIConstants.au3>
$Form1 = GUICreate("Form1", 193, 106, 193, 125)
$Button1 = GUICtrlCreateButton("Button1", 8, 64, 75, 25, 0)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case
$Button1
$Form2
= GUICreate("Form2", 193, 106, 193, 100)
GUISetState(@SW_SHOW)
EndSwitch
WEnd
Автор: ViSiToR
Дата сообщения: 30.03.2008 23:40
ynbIpb

Цитата:
Необходимо, чтоб при нажатии кнопки в GUI вылазило дочернее окно этого GUI, расположенное прям под ним и как бы было приклеено к нему, тоесть если основное окно таскаю, то оно тоже должно за ним таскаться.


Прмерно так:


Код: #include <GUIConstants.au3>

Global Const $WM_MOVE = 0x0003

$Form1 = GUICreate("Form1", 193, 106, 193, 125)
$Button1 = GUICtrlCreateButton("Button1", 8, 64, 75, 25, 0)

$Form2 = GUICreate("Form2", 193, 106, 193, 100, BitOR($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), -1, $Form1)

GUISetState(@SW_SHOW, $Form1)

GUIRegisterMsg($WM_MOVE, "WM_MOVE")

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case
$Button1
If Not BitAND(WinGetState($Form2), 2) Then
GUISetState(@SW_SHOW, $Form2)
Else
GUISetState(@SW_HIDE, $Form2) ;Это можно убрать если не нужно прятать
EndIf
EndSwitch
WEnd

Func
WM_MOVE($hWndGUI, $MsgID, $WParam, $LParam)
If $hWndGUI = $Form1 Then
$aParent_Pos = WinGetPos($Form1)
WinMove($Form2, "", $aParent_Pos[0], $aParent_Pos[1]-25, $aParent_Pos[2], $aParent_Pos[3])
Else
$aChild_Pos = WinGetPos($Form2)
WinMove($Form1, "", $aChild_Pos[0], $aChild_Pos[1]+25, $aChild_Pos[2], $aChild_Pos[3])
EndIf
EndFunc
Автор: NORIO
Дата сообщения: 31.03.2008 05:26
Нужно в уже запущенном autoit скрипте изменить переменную с помощью другого autoit скрипта.
Как это сделать?
Автор: Maza Faka
Дата сообщения: 31.03.2008 09:22

Цитата:
Нужно в уже запущенном autoit скрипте изменить переменную с помощью другого autoit скрипта

А не проще ли изменить переменную в самом скрипте? На то она и переменная.
Автор: NIKZZZZ
Дата сообщения: 31.03.2008 10:14
Maza Faka

Цитата:
А не проще ли изменить переменную в самом скрипте?

Задача, как я понимаю, более сложная - нужно передать данные из одного скрипта другому. То-есть должно быть нечто, доступное обоим скриптам. ViSiToR предлагал решение - создание фиктивного окна и передача данных через него. Можно просто создать файл для обмена. Но оба решения не слишком удобны.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.