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

» AutoIT

Автор: Orion_76
Дата сообщения: 23.06.2010 00:31
AZJIO
Оно все понятно-))
можно и через cacls.exe, можно и через WMI(что мне кажется проще и надежнее)...
Но...как гриться...хоть совершенству нет предела... но хочется через WinApi..-)))
Вообще..ИМХО...должна БЫ быть udf-функция-)) с подобным функционалом...

В принципе основная задумка такая:
Есть отличный фриварный файл-менеджер FreeCommander
В нем можно настроить менюшки или хоткеии на запуск прог с передачей параметров (типа- путь к текущей папке, путь к выделенному файлу и т.д.)
т.е. нам больше ничего и не надо.. передал скрипту(Autoit) имя нужного файла-папки... и делай с ним че хочешь (если права у тебя есть-))
Вот сдесь и начинается самое интересно...
Скрипт делает (hardlink,жесткая ссылка и т.д.)Символьную ссылку на выделенную папку или файл в нужном каталоге. Но функция , делающая этот линк возвращает только ПОЛУЧИЛОСЬ или НЕПОЛУЧИЛОСЬ, а почему не получилось -(( Х\З...
толи к исходному файлу-папке доступ запрещен(занят, или прав нет) ,толи в конечную папку запись запрещена (занята. прав нет)...
Автор: AZJIO
Дата сообщения: 23.06.2010 09:22
ringer
Так поставь мессагу, типа если найдено окно то выдать "Доступно", если не найдено, то "Недоступно", и далее заняться соответствующей проблемой. Заголовок и текст в окне обязательно с использованием Au3Info.exe, иногда там могуть быть символ &-амперсанд, который скрыт на кнопке, но из-за этого она не видна.


Цитата:
If WinExists($title) Then
MsgBox(0, '+++++', 'Доступно '&$title)
Else
MsgBox(0, '--------', 'Не доступно '&$title)
EndIf
Автор: ringer
Дата сообщения: 23.06.2010 15:33
проблема именно из-за запуска приложения и скрипта от разных юзеров
решил разбив на два скрипта
апач дергает скрипт1, скрипт1 сохранят параметр запуска в файл
скрипт2 висит процессах(запущен тем же пользователем что и приложение), и ждет когда появится процесс скрипта1
как появился он читает файл и отрабатывает в зависимости от команды указанной в файле

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

т.е. если я не залоген, винда не рисует гуи, и окна просто нет
полагаю можно не пробовать запустить и скрипт и приложение от system т.к. там точно никакого гуи нет
Автор: AZJIO
Дата сообщения: 23.06.2010 19:36
Интересует способы смены языка и формат языкового файла программы...

1. Формат, где номер строки является номером переменной.
Цитата:
Сохранить всё
Вырезать
Копировать
Вставить
Недостаток - нет смысловых названий переменных в теле скрипта.

2. Формат записи в виде ini, возможно здесь не обязательно читается как ini, а например создание переменной до знака "=" со значением после знака равно, т.е. построчно разделение в массив и далее разделение строки знаком "=" для генерации переменных.
Цитата:
strYesToAll=Да для всех
strNoToAll=Нет для всех
strYes=Да
strNo=Нет
strIgnore=Пропустить
strAbort=Прервать
strCancel=Отмена
strOk=ОК
Плюсы такого формата - обработка в цикле и имена переменных имеют смысловое значение.

3. Привязка к цифре.
Цитата:
2=Включена
8=Выключить
5=Включить
Такой метод попробовал, но опять же не смысловые имена переменных.

4. Пример с элементом и всплавыющей подсказкой
Цитата:
btErase=|Ластик|Стереть часть рисунка
btFlood=|Заливка|Залить область


5. Чтение с разделителем TAB
Цитата:
List1                &Список
ListUp                &Вверх
ListDown            &Вниз


6. Смешанный формат.

Некоторые переменные можно просто изменить, а для интерфейса нужно ещё использовать GUICtrlSetData. Получается, что лучший вариант - 2.
Автор: AZJIO
Дата сообщения: 26.06.2010 01:27
Название: Русский справочник по Win 32 API
Автор: Тарас Сорока
(chm)

Название: Справочник по Win32 API
Автор: Мерзляков Николай
(одним файлом exe)

страничка
или
wasm.ru
_________________
Регулярные выражения (на русском)
shtogrin.com
shop.piter.com
Html-версия (Дж.Фридл.) с сайта издательства, 375K ба, редакция 1.01, страничка
wiki.linuxformat.ru
Автор: Pleshner
Дата сообщения: 27.06.2010 20:25
Ребята, у кого есть: можете кинуть несколько примеров работы через сабж с Firefox? Как я понял, сАмо просто работать через готовую либу FF.au3.

Кто-нить может кинуть в меня примерами работы - просто рабочие скрипты чего угодно через FF.au3, нужно очень быстро написать свой скрипт, и что-то с ходу никак не могу въехать что да как там... Спасибо!
Автор: AZJIO
Дата сообщения: 28.06.2010 03:19
Pleshner
На офсайте работает поиск, но для этого нужно зарегистрироваться.
Вобщем прописать её #include <FF.au3>, а функции есть с переводом на русский
Вот тема. И обязательно проверить совместимость версий AutoIt3 и FF.au3, последняя 0.6 работает с v3.3.0.0.
Автор: Dmitri_Andreev
Дата сообщения: 30.06.2010 14:37
Друзья помогите пожалуйста.

Имеется строка
GUICtrlCreateLabel ("Строка с текстом", 20, 30, 0x0000)
длинна которой увеличивается по мере ее заполнения, можно ли, в процессе выполнения скрипта, получить размер этой строки в пикселях?
Автор: ViSiToR
Дата сообщения: 30.06.2010 14:56
Dmitri_Andreev 15:37 30-06-2010
Цитата:
можно ли, в процессе выполнения скрипта, получить размер этой строки в пикселях?

Можно. В шапке есть ссылка на библиотеку «_GUICtrlCreateTFLabel» (в разделе GUI), а в ней есть функция получения длины строки.
Автор: djuuj
Дата сообщения: 30.06.2010 20:50
Здравствуйте. Вот такая проблемка, мне нужно отправиться на сайт, кликнуть на картинку, вследствие чего откроется НОВОЕ ОКНО браузера, и продолжать работу уже в новом окне. Вот до нового окна всё понятно, а вот как получить доступ к новому окну не имею представления.. Кто знает, подскажите пожалуйста.
Искал ответ добросовестно, был почти уверен, что это распространённая и уже давно решённая проблема, но пока только нашёл точно такие же вопросы без ответов, или ответы с попытками обойтись старым окном..
Автор: KiLL
Дата сообщения: 30.06.2010 22:47
djuuj
_IEAttach поможет если вы знаете заголовок окна, урл, текст в теле документа, дескриптор и т.п. В случае с текстовыми элементами совпадение требуется не полное. А еще функция может подключиться к конкретной инстанции открытого браузера по номеру. Вы наверное плохо искали.
Автор: Dmitri_Andreev
Дата сообщения: 01.07.2010 15:12
ViSiToR Спасибо... разобрался.
Автор: AZJIO
Дата сообщения: 03.07.2010 04:19
Утилита - [more=Поиск дубликатов]
Код: ; @AZJIO 2010.07.09
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_OutFile=Search_duplicates.exe
#AutoIt3Wrapper_icon=Search_duplicates.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Comment=-
#AutoIt3Wrapper_Res_Description=Search_duplicates.exe
#AutoIt3Wrapper_Res_Fileversion=0.1.0.0
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=n
#AutoIt3Wrapper_Res_LegalCopyright=AZJIO
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Run_AU3Check=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <Crypt.au3>
#include <File.au3>
#include <Array.au3>

#include <GUIConstantsEx.au3>
;#include <GuiListView.au3>
Global $Debug_LV = False
#include <ListViewConstants.au3>
#NoTrayIcon
Global $Stack[50], $Stack1[50]
Global $aArr, $a, $MD5Path, $Dubl
HotKeySet('{ESC}', "_Quit") ; выход по ESC

;создание оболочки

$Gui = GUICreate("Поиск дубликатов файлов", 500, 444, -1, -1, 0x00040000, 0x00000010) ; размер окна
$CatchDrop = GUICtrlCreateInput("", 0, 0, 500, 440)
GUICtrlSetState(-1, 136)
GUICtrlSetResizing(-1, 1)
$StatusBar = GUICtrlCreateLabel(@CRLF&'Строка состояния', 5, 380, 480, 30)
GUICtrlSetResizing(-1, 512 + 256 + 64 + 2)

$restart = GUICtrlCreateButton("R", 480, 2, 18, 20)
GUICtrlSetTip(-1, "Перезапуск утилиты")
GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)

$About = GUICtrlCreateButton("?", 460, 2, 18, 20)
GUICtrlSetTip(-1, "О программе")
GUICtrlSetResizing(-1, 512 + 256 + 32 + 4)

GUICtrlCreateLabel("используйте drag-and-drop", 170, 5, 160, 18)
GUICtrlSetResizing(-1, 32 + 256 + 512)

GUICtrlCreateLabel("Папки", 15, 10, 60, 17)
GUICtrlSetResizing(-1, 3 + 32 + 256 + 512)
$folder = GUICtrlCreateList("", 10, 25, 480, 100)
GUICtrlSetResizing(-1, 7 + 32 + 512)

GUICtrlCreateLabel("Дубликаты", 15, 132, 60, 18)
GUICtrlSetResizing(-1, 3 + 32 + 256 + 512)

_Dubl()

$context = GUICtrlCreateContextMenu($Dubl)
$contextOpen = GUICtrlCreateMenuitem ("Открыть",$context)


; $Select = GUICtrlCreateButton("Выбор", 180, 355, 70, 25)
; GUICtrlSetResizing(-1, 512 + 256 + 64 + 4)
$Clear = GUICtrlCreateButton("Очистить", 260, 355, 70, 25)
GUICtrlSetResizing(-1, 512 + 256 + 64 + 4)
$Search = GUICtrlCreateButton("Поиск", 340, 355, 70, 25)
GUICtrlSetResizing(-1, 512 + 256 + 64 + 4)
$Delete = GUICtrlCreateButton("Удалить", 420, 355, 70, 25)
GUICtrlSetResizing(-1, 512 + 256 + 64 + 4)

$aSizePath=''
$folderList = ''
$aArrOut=''

GUISetState()
_Crypt_Startup()

While 1
    $msg = GUIGetMsg()
    Select
        ; drag-and-drop - принятие каталогов
        Case $msg = -13
            $triger = 0
            If @GUI_DropId = $CatchDrop Then
                $aFolder = StringSplit(GUICtrlRead($CatchDrop), '|')
                $GuiPos = WinGetPos($Gui)
                GUICtrlSetPos($CatchDrop, $GuiPos[2], 0)
                GUICtrlSetData($CatchDrop, '')
                GUICtrlSetPos($CatchDrop, 0, 0)
                For $i = 1 To $aFolder[0]
                    If StringInStr(FileGetAttrib($aFolder[$i]), "D") = 0 Then
                        $triger = 1
                    Else
                        GUICtrlSetData($folder, StringRegExpReplace($aFolder[$i], '(?:.*)\\(.*)$', '\1'))
                        $folderList &= '|' & $aFolder[$i]
                    EndIf
                Next
            EndIf
            If $triger = 1 Then
                $triger = 0
                MsgBox(0, "Мелкая ошибка", 'Перетаскивайте каталоги, а не файлы.')
            EndIf

        Case $msg = $About
            _About()

            ; Очистка (обнуляем все весомые переменные)
        Case $msg = $Clear
            GUICtrlDelete ($Dubl)
            _Dubl()
            $folderList = ''
            GUICtrlSetData($folder, '')
            $aSizePath = ''
            $aArr = ''
            $aArrT = ''
            $TempMD5 = ''
            $aArrOut = ''
            $aArrMD5 = ''
            GUICtrlSetData($StatusBar,@CRLF&'Строка состояния')

            ; Открыть
        Case $msg = $contextOpen or $msg = $Dubl
            ShellExecute(StringTrimRight(GUICtrlRead(GUICtrlRead ($Dubl)),1))

            ; Удаление
        Case $msg = $Delete
            If $folderList='' or $aArrOut='' Then ContinueLoop
            GUICtrlSetData($StatusBar, 'Удаление выполняется...')
            For $i = 1 to $aArrOut[0][0]
                If GUICtrlRead($aArrOut[$i][0],1)=1 And FileExists($aArrOut[$i][1]) Then

                    FileDelete($aArrOut[$i][1])
                    GUICtrlDelete($aArrOut[$i][0])
                    $aArrOut[$i][0]=''
                    $aArrOut[$i][1]=''
                EndIf
            Next
            _GUICtrlListView_SetColumnWidth($Dubl, 0, $LVSCW_AUTOSIZE)
            If _GUICtrlListView_GetColumnWidth($Dubl, 0)<480 Then _GUICtrlListView_SetColumnWidth($Dubl, 0, 480)
            GUICtrlSetData($StatusBar, 'Удаление завершено!')

            ; Поиск
        Case $msg = $Search
            If $folderList='' Then ContinueLoop
            If $aSizePath<>'' Then ; перед повторным поиском делаем очистку
                GUICtrlDelete ($Dubl)
                _Dubl()
                Sleep(50)
                $aSizePath = ''
                $aArr = ''
                $aArrT = ''
                $TempMD5 = ''
                $aArrOut = ''
                $aArrMD5 = ''
            EndIf

GUICtrlSetData($StatusBar, 'Создание списка файлов...')
            $aSizePath = ''
            $timer = TimerInit()
            If StringLeft($folderList, 1)='|' Then $folderList = StringTrimLeft($folderList, 1)
            $aFolderList = StringSplit($folderList, '|')
            For $i = 1 To $aFolderList[0] ; выполняем поиск в цикле для каждого добавленного пути
                If FileExists($aFolderList[$i]) Then
                    FileFindNextFirst($aFolderList[$i])
                    While 1
                        $tempname = FileFindNext()
                        If $tempname = "" Then ExitLoop
                        $aSizePath &= '|' & FileGetSize($tempname) & '|' & $tempname
                    WEnd
                EndIf
            Next
            $aArrT = StringSplit(StringTrimLeft($aSizePath, 1), "|") ;создаём одномерный массив, имитацию двумерного массива.
            $aSizePath='1' ;очистка и индикатор выполненого поиска
;_ArrayDisplay($aArrT, "$aArrT") ; одномерный массив всех файлов (размер | путь)
;_ArrayDisplay($aArrT,"$aArrT",-1,-1,-1,-1, 'размер|путь') ; одномерный массив всех файлов (размер | путь)
            Dim $aArr[$aArrT[0] / 2 + 1][2]
            $aArr[0][0] = $aArrT[0] / 2
            For $i = 1 To $aArrT[0]
                If Mod($i, 2) = 0 Then
                    $aArr[$i / 2][0] = Int($aArrT[$i - 1])
                    $aArr[$i / 2][1] = $aArrT[$i]
                EndIf
            Next
            ; (массив | сортировка по возврастанию | начальный индекс сортировки | конечный | колонка сортировки)
            _ArraySort($aArr, 0, 1, $aArr[0][0], 0)
;_ArrayDisplay($aArr, "$aArr") ; сортированный двумерный массив всех файлов (размер | путь)

            $aArrOut = ''
            Dim $aArrOut[1][2]
            $a = 0
            $0b = 0
            $gp=0
            
            $kol=0
            $triger = 0
            $triger2 = 0
            $TempSize = ''
            For $i = 1 To $aArr[0][0] ; формирование временного массива файлов c совпадающими размерами, но вместа размера указан MD5
            $kol+=1
                If $aArr[$i][0] = $TempSize Then
                    If $triger = 0 Then
                        $MD5Path = ''
                        $MD5Path &= '|' & _Crypt_HashFile($aArr[$i - 1][1], 0x00008003) & '|' & $aArr[$i - 1][1]
                    EndIf
                    $triger = 1
                    $MD5Path &= '|' & _Crypt_HashFile($aArr[$i][1], 0x00008003) & '|' & $aArr[$i][1]
                Else
                    $triger = 0
                EndIf
; переключение тригера для срабатывания обработки MD5 если совпадение существвали на последних элементах, чтоб правильно завершить цикл
                If $aArr[0][0]=2 and $triger = 1 Then $triger2 = 1 ; исключение для всего двух одинаковых файлов
                If $i = $aArr[0][0] Then $triger = 0
                If $triger = 0 And $triger2 = 1 Then ; обработка временного массива с совпавшими размерами файлов ======================================


                    $aMD5PathT = StringSplit(StringTrimLeft($MD5Path, 1), "|") ;создаём одномерный массив, имитацию двумерного массива.
;_ArrayDisplay($aMD5PathT, "$aMD5PathT") ; сортированный массив всех файлов (размер | путь)

; конвертируем одномерный массив в двумерный.
                    Dim $aArrMD5[$aMD5PathT[0] / 2 + 1][2]
                    $aArrMD5[0][0] = $aMD5PathT[0] / 2
                    For $o = 1 To $aMD5PathT[0]
                        If Mod($o, 2) = 0 Then
                            $aArrMD5[$o / 2][0] = $aMD5PathT[$o - 1]
                            $aArrMD5[$o / 2][1] = $aMD5PathT[$o]
                        EndIf
                    Next

;_ArrayDisplay($aArrMD5, "$aArrMD5- до сортировки") ; временный сортированный массив совпавших по размеру файлов, но с разными MD5 (MD5 | путь)
                    _ArraySort($aArrMD5, 0, 1, $aArrMD5[0][0], 0)
;_ArrayDisplay($aArrMD5, "$aArrMD5- после сортировки") ; временный сортированный массив совпавших по размеру файлов, но с разными MD5 (MD5 | путь)

                    ;===================================================================
                    ; вложенная, подобная копия основного алгоритма, с разницей MD5 вместо размера
                    ; формирование временного массива совпадающих файлов $aArrOut по MD5
                    $0triger = 0
                    $0triger2 = 0
                    $TempMD5 = ''
                    For $0i = 1 To $aArrMD5[0][0]
                        If $a-$0b < 3 Then
                            $a+=100
                            ReDim $aArrOut[$a][2]
                        EndIf
                        If $aArrMD5[$0i][0] = $TempMD5 Then
                            If $0triger = 0 Then
                                $0b += 1
                                $gp+=1
GUICtrlSetData($StatusBar, 'Всего: ' &$aArr[0][0]&', текущий: '&$kol &', группа: '&$gp &', добавлено: '&$0b &', время: '& Ceiling(TimerDiff($timer)/1000)&' сек, размер: '& Ceiling($aArr[$i][0]/1000)& 'кб' &@CRLF& $aArrMD5[$0i - 1][1])
                            GUICtrlCreateListViewItem( '---'&$gp&'---',$Dubl)
                            GUICtrlSetColor(-1,0x777777)
                            GUICtrlSetBkColor ( -1, 0xffffff )

                                $aArrOut[$0b][0] = GUICtrlCreateListViewItem($aArrMD5[$0i - 1][1],$Dubl)
                                GUICtrlSetColor(-1,0xaa0000)

                                $aArrOut[$0b][1] = $aArrMD5[$0i - 1][1]
                            EndIf
                            $0triger = 1
                            $0b += 1
GUICtrlSetData($StatusBar, 'Всего: ' &$aArr[0][0]&', текущий: '&$kol &', группа: '&$gp &', добавлено: '&$0b &', время: '& Ceiling(TimerDiff($timer)/1000) &' сек, размер: '& Ceiling($aArr[$i][0]/1000)& 'кб' &@CRLF& $aArrMD5[$0i][1])
                            $aArrOut[$0b][0] = GUICtrlCreateListViewItem($aArrMD5[$0i][1],$Dubl)
                            GUICtrlSetState(-1,1)
                            $aArrOut[$0b][1] = $aArrMD5[$0i][1]
                        Else
                            $0triger = 0
                        EndIf
                        $TempMD5 = $aArrMD5[$0i][0]

                        ;_GUICtrlListView_SetColumn($Dubl, 0, ' ', 480)
                    Next
                EndIf ;==================================================================================================================
                If $triger = 1 Then
                    $triger2 = 1
                Else
                    $triger2 = 0
                EndIf
                $TempSize = $aArr[$i][0]
                _GUICtrlListView_SetColumnWidth($Dubl, 0, $LVSCW_AUTOSIZE)
            Next
            If _GUICtrlListView_GetColumnWidth($Dubl, 0)<480 Then _GUICtrlListView_SetColumnWidth($Dubl, 0, 480)
                    ReDim $aArrOut[$0b+1][2]
                    $aArrOut[0][0]=$0b
                    If $0b = 0 Then
GUICtrlSetData($StatusBar, 'Всего: ' &$aArr[0][0]&' файлов, дубликатов не найдено!')
                    Else
GUICtrlSetData($StatusBar, 'Всего: ' &$aArr[0][0]&', групп: '&$gp &', добавлено: '&$0b&', отмечено: '&$0b-$gp &', время: '& Ceiling(TimerDiff($timer)/1000)&' сек' &@CRLF& 'Готово!')
                    EndIf
            ;_ArrayDisplay($aArrOut, "$aArrOut")
            ; Перезапуск
        Case $msg = $restart
            _restart()
        Case $msg = -3
            _Crypt_Shutdown()
            Exit
    EndSelect
WEnd

; добавлено из ListViewConstants.au3, для экономии размера скрипта
Func _GUICtrlListView_SetColumnWidth($hWnd, $iCol, $iWidth)
If $Debug_LV Then __UDF_ValidateClassName($hWnd, $__LISTVIEWCONSTANT_ClassName)
If IsHWnd($hWnd) Then
Return _SendMessage($hWnd, $LVM_SETCOLUMNWIDTH, $iCol, $iWidth)
Else
Return GUICtrlSendMsg($hWnd, $LVM_SETCOLUMNWIDTH, $iCol, $iWidth)
EndIf
EndFunc

Func _GUICtrlListView_GetColumnWidth($hWnd, $iCol)
If $Debug_LV Then __UDF_ValidateClassName($hWnd, $__LISTVIEWCONSTANT_ClassName)
If IsHWnd($hWnd) Then
Return _SendMessage($hWnd, $LVM_GETCOLUMNWIDTH, $iCol)
Else
Return GUICtrlSendMsg($hWnd, $LVM_GETCOLUMNWIDTH, $iCol, 0)
EndIf
EndFunc

Func _Dubl()
    $GuiPos = WinGetPos($Gui)
    $Dubl = GUICtrlCreateListView(' ', 10, 150, $GuiPos[2]-26, $GuiPos[3]-251, $LVS_NOCOLUMNHEADER +$LVS_SHOWSELALWAYS, $LVS_EX_CHECKBOXES + $LVS_OWNERDRAWFIXED)
    GUICtrlSendMsg($Dubl, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($Dubl, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_TRACKSELECT, $LVS_EX_TRACKSELECT)
    GUICtrlSetBkColor(-1, 0xf0f0f0) ; 0xE0DFE3 - цвет стандартный серый
    GUICtrlSetResizing(-1, 7 + 32 + 64)
EndFunc

;========================================
; функция поиска всех файлов в каталоге (NIKZZZZ)

Func FileFindNextFirst($FindCat)
    $Stack[0] = 1
    $Stack1[1] = $FindCat
    $Stack[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*")
    Return $Stack[$Stack[0]]
EndFunc ;==>FileFindNextFirst

Func FileFindNext()
    While 1
        $file = FileFindNextFile($Stack[$Stack[0]])
        If @error Then
            FileClose($Stack[$Stack[0]])
            If $Stack[0] = 1 Then
                Return ""
            Else
                $Stack[0] -= 1
                ContinueLoop
            EndIf
        Else
            If StringInStr(FileGetAttrib($Stack1[$Stack[0]] & "\" & $file), "D") > 0 Then
                $Stack[0] += 1
                $Stack1[$Stack[0]] = $Stack1[$Stack[0] - 1] & "\" & $file
                $Stack[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*")
                ContinueLoop
            Else
                Return $Stack1[$Stack[0]] & "\" & $file
            EndIf
        EndIf
    WEnd
EndFunc ;==>FileFindNext

Func _restart()
    Local $sAutoIt_File = @TempDir & "\~Au3_ScriptRestart_TempFile.au3"
    Local $sRunLine, $sScript_Content, $hFile

    $sRunLine = @ScriptFullPath
    If Not @Compiled Then $sRunLine = @AutoItExe & ' /AutoIt3ExecuteScript ""' & $sRunLine & '""'
    If $CmdLine[0] > 0 Then $sRunLine &= ' ' & $CmdLineRaw

    $sScript_Content &= '#NoTrayIcon' & @CRLF & _
            'While ProcessExists(' & @AutoItPID & ')' & @CRLF & _
            ' Sleep(10)' & @CRLF & _
            'WEnd' & @CRLF & _
            'Run("' & $sRunLine & '")' & @CRLF & _
            'FileDelete(@ScriptFullPath)' & @CRLF

    $hFile = FileOpen($sAutoIt_File, 2)
    FileWrite($hFile, $sScript_Content)
    FileClose($hFile)

    Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $sAutoIt_File & '"', @ScriptDir, @SW_HIDE)
    Sleep(1000)
    Exit
EndFunc ;==>_restart

Func _Quit()
    Exit
EndFunc ;==>_Quit

Func _About()
GUISetState(@SW_HIDE, $Gui)
$font="Arial"
$Gui1 = GUICreate("О программе", 270, 180, -1, -1, -1, 0x00000080)
    GUISetBkColor (0xf8c848)
    GUICtrlCreateLabel('Search duplicates', 0, 20, 270, 23, 0x01)
    GUICtrlSetFont (-1,15, 600, -1, $font)
    GUICtrlSetColor(-1,0xa21a10)
    GUICtrlCreateLabel('поиск дубликатов файлов', 0, 49, 270, 46, 0x01)
    GUICtrlSetFont (-1,13, 600, -1, $font)
    GUISetFont (9, 600, -1, $font)
    GUICtrlSetColor(-1,0xa21a10)
    GUICtrlCreateLabel('Версия 0.1 от 9.07.2010', 55, 100, 210, 17)
    GUICtrlCreateLabel('Сайт:', 55, 115, 40, 17)
    $url=GUICtrlCreateLabel('http://azjio.ucoz.ru', 92, 115, 170, 17)
    GUICtrlSetCursor(-1, 0)
    GUICtrlSetColor(-1, 0x0000ff)
    GUICtrlCreateLabel('WebMoney: R939163939152', 55, 130, 210, 17)
    GUICtrlCreateLabel('Copyright AZJIO © 2010', 55, 145, 210, 17)
    GUISetState(@SW_SHOW, $Gui1)
$msg = $Gui1
    While 1
     $msg = GUIGetMsg()
     Select
        Case $msg = $url
            ShellExecute ('http://azjio.ucoz.ru')
        Case $msg = -3
            $msg = $Gui
            GUIDelete($Gui1)
            GUISetState(@SW_SHOW, $Gui)
            ExitLoop
        EndSelect
WEnd
EndFunc
Автор: DSWQ
Дата сообщения: 05.07.2010 17:36
Здравствуйте! Подскажите, пожалуйста, пример кода для GUI с маленькими(минимизированными) кнопками управления.
Знаю, нужно в сторону стилей копать, но разобраться с ними не могу(
Автор: ViSiToR
Дата сообщения: 05.07.2010 18:29
DSWQ 18:36 05-07-2010
Цитата:
нужно в сторону стилей копать

Зачем, просто укажите размеры элементов:


Код: #include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

FileChangeDir(@DesktopDir)

$hGUI = GUICreate("Test Script", 300, 200)

$nMiniButton = GUICtrlCreateButton("", 20, 40, 12, 12)
$nMiniCheckBox = GUICtrlCreateCheckbox("", 20, 80, 12, 12)

GUISetState(@SW_SHOW, $hGUI)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Автор: DSWQ
Дата сообщения: 05.07.2010 19:39
ViSiToR, спасибо, но я, видимо, некорректно задал вопрос - речь о стандартных кнопках управления: "Закрыть", "Развернуть", "Свернуть".
Просто есть скрипт-приложение с очень маленьким GUI, стандартные кнопки смотрятся некрасиво.


Автор: DiaBlo90
Дата сообщения: 05.07.2010 21:02
Всем доброго времени суток.
МБ кто знает как можно сделать окно lineage без рамки?
Пробовал так

Код: #include <WindowsConstants.au3>
;Global Const $L2_WinClass = "[TITLE:Lineage II;Class:l2UnrealWWindowsViewportWindow]";
$hWindow = WinGetHandle($L2_WinClass)
WinActivate ($L2_WinClass);
sleep(1000)
_WinSetStyle($hWindow)
Func _WinSetStyle($hWnd)
DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", "GWL_STYLE", "int", 0x14000000)
DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", "GWL_EXSTYLE", "int", 0x0004000)
DllCall("User32.dll", "int", "SetWindowPos", "hwnd", $hWnd, "hwnd", 0, "int", 0, "int", 0, "int", 800, "int", 600, "int", "SWP_NOZORDER | SWP_FRAMECHANGED")
EndFunc
Автор: ViSiToR
Дата сообщения: 05.07.2010 23:02
DSWQ 20:39 05-07-2010
Цитата:
речь о стандартных кнопках управления: "Закрыть", "Развернуть", "Свернуть"

Тогда только так:


Код: #include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>

$iWidth = 200
$iHeight = 150

$hGUI = GUICreate("Tiny GUI", $iWidth, $iHeight, -1, -1, BitOR($WS_POPUP, $WS_BORDER))

$nMinimize_Button = GUICtrlCreateButton("—", $iWidth - 35, 3, 16, 16)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, 0x0000FF)

$nClose_Button = GUICtrlCreateButton("X", $iWidth - 19, 3, 16, 16)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, 0xFF0000)

GUICtrlCreateLabel("", 0, 0, $iWidth, 22, $WS_CLIPSIBLINGS, BitOR($WS_EX_DLGMODALFRAME, $GUI_WS_EX_PARENTDRAG))
GUICtrlSetBkColor(-1, 0x9D9DFF)

GUISetState(@SW_SHOW, $hGUI)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $nClose_Button
Exit
Case $nMinimize_Button
GUISetState(@SW_MINIMIZE, $hGUI)
EndSwitch
WEnd
Автор: DiaBlo90
Дата сообщения: 05.07.2010 23:12

Цитата:
Странно, не должно у меня этот пример закрывает окно подставленное в $L2_WinClass.

Вот пример использования WinSetStyle [?].


Аналогично, на окне ла2 никак не пашет(((
Автор: ViSiToR
Дата сообщения: 06.07.2010 16:07
DiaBlo90 00:12 06-07-2010
Цитата:
на окне ла2 никак не пашет

Ну, я не знаю что это за окно, поэтому всё что могу посоветовать, так это посмотреть стили этого окна, и на основе этого уже задавать новые.
Автор: AZJIO
Дата сообщения: 06.07.2010 16:55
Обновил тестовый скрипт "Поиск дубликатов"
Автор: DiaBlo90
Дата сообщения: 06.07.2010 19:01

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


А поподробнее можно или ссылочку какую-нить?
Автор: ViSiToR
Дата сообщения: 06.07.2010 22:33
DiaBlo90 20:01 06-07-2010
Цитата:
поподробнее можно

С помощью «Au3Info Tool» (поставляется вместе с AutoIt) нужно посмотреть стили:

и проверить:


Код: [no]If BitAND($nStyle, $WS_BORDER) = $WS_BORDER Then _WinSetStyle("Title", $WS_POPUPWINDOW)[/no]
Автор: DSWQ
Дата сообщения: 06.07.2010 23:44
ViSiToR
Спасибо, то что нужно

Автор: Trrrbit
Дата сообщения: 07.07.2010 00:14
Всем привет!

В двух словах почему сюда обратился:
Устанавливаю людям виндовсы из tib-архива (acronis true image). т.е. гружу лайв-cd, запускаю акронис и говорю ему ставить на диск С: заранее подготовленную винду из tib-архива.
так вот:
после успешной распаковки перегружаю комп и распакованная винда начинает ставить драйвера на новое оборудование. в итоге находит устройство и мастер установки оборудования предлагает нажать далее (а потом готово).
НО! Если клавиатура и мышь USBшные, то они (обычно) ставятся в последнюю очередь. В итоге - нажать кнопку далее(готово) не получается ни с клавы ни мышью. Если мышь или клава PS\2 то проблем не возникает. Они сразу работают
ТЕПЕРЬ ПРОСЬБА (ВОПРОС):
Напишите мне пожалуйста скрипт для autoit, который будет находить окно мастера установки нового оборудования и, скажем, будет нажимать ENTER, тем самым активируя кнопку ДАЛЕЕ или ГОТОВО. И так пока не перестанут появляться окна мастера установки нового оборудования (или например раз 30 нажать ENTER с интервалом в 10-15 сек).

Если не сложно - можно сразу готовый EXE-файл.
Если будет вышеуказанная ситуация - положу его в автозагрузку с-под лайв-cd и перезагружу комп. винда скажет "найдено новое оборудование, нажмите далее", а autoit ей сам нажмет ENTER (или ДАЛЕЕ/ГОТОВО) и установит драйвер. Подождет следующего вопроса об установке драйвера и снова нажмет далее.

ЗАРАНЕЕ БЛАГОДАРЕН...
Автор: AZJIO
Дата сообщения: 07.07.2010 07:35
Постмотрите перевод частичный UDFs3 (2.1Мб), 34 функции перевёл, ну и шаблонные тексты переведены по всем страничкам.
Автор: KiLL
Дата сообщения: 07.07.2010 10:48
Trrrbit, вы тему читали? На четвертой странице, в начале мой пост маленькой програмки закрывающей окна мастера установки оборудования. Именно закрывает, ибо просто нажать в этом окне Enter не прокатит. Это один из кирпичиков.

Я делаю то же что и вы, вот в таком порядке.
1. Загружаясь с WinPE диска акронис разворачивает готовый настроенный образ.
2. Система стартует и пытается установить драйвера. В системе никаких драйверов нету, поэтому она устанавливает только то что может, а на все остальное открывает одно за одним окошки мастера установки оборудования. Вся беда в том, что если у вас не установлена сетевая карта и система спрашивает на нее драйвера, то пока вы не дадите системе драйвера на карту или не пошлете систему нафиг, она не продолжит установку известных ей устройств и не поставит ваши USB клавомыши.
3. Поэтому моя программа просто закрывает эти окошки, ведет подсчет закрытых окошек мастера. Когда количество закрытых окон мастера сходится с количество неизвестных устройств в диспечере задач, то программа перестает следить за окошками мастера оборудования и передает управление установщику оборудования.
4. Установка драйверов происходит с внешнего носителя, не привязана к буквам диска и использует обычные ДрайверПаки типа Driverpacks.net или DriverPacks Solution.
5. Далее ребут и смотрим чтобы все установилось, далее еще раз ребут, чтобы разрешение экрана и размерность элеметнов выровнялась.

Вся работа в развернутой системе происходит автоматом. Основной упор на установку именно неизвестных (желтых) устройств, т.е. если система установила пусть даже старый драйвер устройства, я его не обновляю, для меня важно общее время выполнения. Пока еще сыровато и есть глюки, но исправляю потиху.
Автор: DiaBlo90
Дата сообщения: 07.07.2010 11:39
ViSiToR
Спс оромное)))
Разобрался в чем косяк был))))
Тестил на висте, забыл добавить права админа
Терь все норм))))
Автор: Trrrbit
Дата сообщения: 07.07.2010 13:11
KiLL
Спасибо за ответ. Но для меня это темный лес... Можно сразу ЕХЕ-файлик. Мне даже на принципиально как он работатет. Мне нужно чтобы клавомыши работали....
БУДУ ОЧЕНЬ БЛАГОДАРЕН.
Автор: KiLL
Дата сообщения: 07.07.2010 22:31
Trrrbit, если бы ты скомпилировал выложенный ранее код, то уже имел бы EXE.

http://rapidshare.com/files/405565063/BypassHardwareWizard.exe

Страницы: 12345678910111213

Предыдущая тема: Проблемы с VMware Workstation (часть 4)


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