Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)

Модерирует : gyra, Maz

Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

sproxy



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору


Код:
#region: - Include
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
#endregion
 
#region: - Option

    Opt('GUIOnEventMode',       1)
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        1)
    Opt('TrayIconHide',         0)
#endregion
 
#region: - _FileSelectFolder Constants

;~ Сообщения, формируемые диалогом выбора
Global Const $BFFM_INITIALIZED = 1 ;~ Инициализация диалога завершена
Global Const $BFFM_SELCHANGED = 2 ;~ Выбор пользователем нового каталога
Global Const $BFFM_VALIDATEFAILEDA = 3 ;~ ANSI: в окно редактирования введен некорректный текст
Global Const $BFFM_VALIDATEFAILEDW = 4 ;~ WideChar: в окно редактирования введен некорректный текст
Global Const $BFFM_IUNKNOWN = 5 ;~ При инициализации: передача указателя на экземпляр IUnknown
;~ Сообщения, принимаемые диалогом выбора

Global Const $BFFM_ENABLEOK = $WM_USER + 101 ;~ Включить/выключить кнопку "Ok"
Global Const $BFFM_SETOKTEXT = $WM_USER + 105 ;~ Задать текст кнопки "Ok"
Global Const $BFFM_SETEXPANDED = $WM_USER + 106 ;~ Раскрыть в дереве определенную папку
Global Const $BFFM_SETSTATUSTEXTA = $WM_USER + 100 ;~ ANSI: задать текст статусной строки
Global Const $BFFM_SETSTATUSTEXTW = $WM_USER + 104 ;~ WideChar: задать текст статусной строки
Global Const $BFFM_SETSELECTIONA = $WM_USER + 102 ;~ ANSI: переместить курсор к определенному каталогу в дереве
Global Const $BFFM_SETSELECTIONW = $WM_USER + 103 ;~ WideChar: переместить курсор к определенному каталогу в дереве
;~ Флаг, включающий "новый стиль" диалога

Global Const $BIF_NEWDIALOGSTYLE = 0x40 ;~ Вывести диалоговое окно "нового стиля" (IE 5.0)
;~ Флаги, применимые только для диалога в "старом стиле" (флаг $BIF_NEWDIALOGSTYLE сброшен)

Global Const $BIF_RETURNONLYFSDIRS = 0x1 ;~ Выбирать только объекты файловой системы
Global Const $BIF_STATUSTEXT = 0x4 ;~ Отображение дополнительного текстовое поля
Global Const $BIF_BROWSEFORCOMPUTER = 0x1000 ;~ Выбирать только компьютеры в сетевом окружении
Global Const $BIF_BROWSEFORPRINTER = 0x2000 ;~ Выбирать только принтеры в сетевом окружении
;~ Флаги, применимые только для диалога в "новом стиле" (флаг $BIF_NEWDIALOGSTYLE установлен)

Global Const $BIF_UAHINT = 0x100 ;~ Показывать текст "подсказки", недействителен для флага $BIF_EDITBOX (IE 6.0)
Global Const $BIF_NONEWFOLDERBUTTON = 0x200 ;~ Не отображать кнопку создания нового каталога (IE 6.0)
Global Const $BIF_SHAREABLE = 0x8000 ;~ Отображать специфические сетевые ресурсы: диски, принтеры, задания, etc. (IE 5.0)
;~ Флаги, примененимые к обоим стилям диалога

Global Const $BIF_DONTGOBELOWDOMAIN = 0x2 ;~ Не открывать домены в сетевом окружении
Global Const $BIF_BROWSEINCLUDEFILES = 0x4000 ;~ Позволить выбирать файлы (IE 5.0)
Global Const $BIF_EDITBOX = 0x10 ;~ Включить строку редактирования (IE 4.71)
Global Const $BIF_VALIDATE = 0x20 ;~ Посылать сообщение о наборе недопустимого имени (IE 4.71)
;~ Маска допустимых флагов для диалога "старого стиля"

Global Const $BIF_ALLOLDSTYLEFLAGS = BitOR ( _
    $BIF_DONTGOBELOWDOMAIN, $BIF_BROWSEINCLUDEFILES, $BIF_EDITBOX, $BIF_VALIDATE, _
    $BIF_BROWSEFORCOMPUTER, $BIF_BROWSEFORPRINTER, $BIF_RETURNONLYFSDIRS, $BIF_STATUSTEXT)
;~ Маска допустимых флагов для диалога "нового стиля"
Global Const $BIF_ALLNEWSTYLEFLAGS = BitOR ( $BIF_NEWDIALOGSTYLE, _
    $BIF_DONTGOBELOWDOMAIN, $BIF_BROWSEINCLUDEFILES, $BIF_EDITBOX, $BIF_VALIDATE, _
    $BIF_NONEWFOLDERBUTTON, $BIF_UAHINT, $BIF_SHAREABLE)
 
Global  $iEnable_OK = 0
#endregion
 
#region: - Global

    Global  $hWinMain, $sFiles_Filter
#endregion
 
#region: GUI

    $hWinMain = GUICreate('Test', 400, 400, -1, -1)
        GUISetOnEvent($GUI_EVENT_CLOSE,     '_Pro_Exit')
 
    GUICtrlCreateButton('Select 1', 10, 50, 150, 25)
        GUICtrlSetOnEvent(-1, '_Select_Dir_1')
 
    GUICtrlCreateButton('Select 2', 10, 50+45, 150, 25)
        GUICtrlSetOnEvent(-1, '_Select_Dir_2')
#endregion
 
#region: - После создания всех GUI

    GUISetState(@SW_SHOW, $hWinMain)
#endregion
 
#region: - Sleep, Exit

While 1
    Sleep(10)
WEnd
 
Func
_Pro_Exit()
    Exit
EndFunc

#endregion
 
Func _Select_Dir_1()
    $sFiles_Filter = 'IEXPLORE.EXE'
    _FileSelectFolder('Укажите папку содержащую файл(ы): ' & $sFiles_Filter, 0, BitOR($BIF_NEWDIALOGSTYLE, $BIF_RETURNONLYFSDIRS, $BIF_NONEWFOLDERBUTTON), @ProgramFilesDir & '\Internet Explorer\')
EndFunc
Func
_Select_Dir_2()
    $sFiles_Filter = 'IEXPLORE.EXE'
    _FileSelectFolder('Укажите папку содержащую файл(ы): ' & $sFiles_Filter, 0, BitOR($BIF_NEWDIALOGSTYLE, $BIF_RETURNONLYFSDIRS, $BIF_NONEWFOLDERBUTTON), @ProgramFilesDir)
EndFunc
 
Func
_FileSelectFolder($sText='', $iRoot=0, $iFlags=0, $sInitDir=@ScriptDir, $hWnd=0, $sCallbackProc='_FileSFCallbackProc')
    Local $pidl, $iRes='', $pCallbackProc=0, $iMask = $BIF_ALLOLDSTYLEFLAGS, $Error = 0
    ; Контроль входных параметров
    ;$sInitDir = StringRegExpReplace($sInitDir, '([^\\])\\*$', '\1\\')
    ;If StringRight($sInitDir, 1)=':' Then $sInitDir &= '\'

    If BitAND($iFlags, $BIF_NEWDIALOGSTYLE) Then $iMask = $BIF_ALLNEWSTYLEFLAGS
    ; Создание и инициализация основных структур данных
    Local $uBI = DllStructCreate ("hwnd;ptr;ptr;ptr;int;ptr;ptr;int") ; BROWSEINFO
    Local $uTX = DllStructCreate ("wchar[260];wchar") ; Текст приглашения
    Local $uMP = DllStructCreate ("wchar[260]") ; MAX_PATH
    Local $uCB = DllStructCreate ("wchar[260];int") ; CallBack структура
    DllStructSetData ($uTX, 1, $sText)
    DllStructSetData ($uCB, 1, $sInitDir)
    DllStructSetData ($uCB, 2, $iFlags)
    ; Заполнение структуры BROWSEINFO
    DllStructSetData ($uBI, 1, $hwnd)
    DllStructSetData ($uBI, 3, DllStructGetPtr($uMP))
    DllStructSetData ($uBI, 4, DllStructGetPtr($uTX))
    DllStructSetData ($uBI, 5, BitAND($iFlags, $iMask))
    DllStructSetData ($uBI, 7, DllStructGetPtr($uCB))
    ; Получение указателя на CallBack-функцию
    If $sCallbackProc <> '' Then $pCallbackProc = DllCallbackRegister($sCallbackProc, 'int', 'hwnd;int;long;ptr')
    If @error Then Return SetError(2, @error, '') ; ОШИБКА получения указателя
    DllStructSetData($uBI, 6, DllCallbackGetPtr($pCallbackProc))
    ; Получение указателя на корневую папку (PIDL)
    Local $iRet = DllCall ("shell32.dll", "ptr", "SHGetSpecialFolderLocation", _
        "int", 0 , "int", $iRoot , "ptr", DllStructGetPtr($uBI, 2))
    If $iRet[0]=0 Then
        ; Запуск системного диалога
        $pidl = DllCall("shell32.dll", "ptr", "SHBrowseForFolderW", "ptr", DllStructGetPtr($uBI))
        $iRes = DllStructGetData($uMP, 1) ; сохраняем имя объекта
        If $pidl[0] Then
            ; Обработка полученного указателя (PIDL)
            $iRet = DllCall("shell32.dll", "int", "SHGetPathFromIDListW", "ptr", $pidl[0], "ptr", DllStructGetPtr($uMP))
            If $iRet[0] Then $iRes = DllStructGetData($uMP, 1)
            DllCall("ole32.dll", "int", "CoTaskMemFree", "ptr", $pidl[0]) ; чистим за собой
        Else
            $Error = 1
        EndIf
        DllCall("ole32.dll", "int", "CoTaskMemFree", "ptr", DllStructGetData($uBI, 2)) ; чистим за собой
    Else
        SetError(1, 0, '') ; ОШИБКА в параметре корневой папки
    EndIf
    If
$pCallbackProc Then DllCallBackFree($pCallbackProc) ; закрытие указателя
    Return SetError($Error, 0, $iRes)
EndFunc
Func
_FileSFCallbackProc($hWnd, $iMsg, $wParam, $lParam)
    Local $uTB = DllStructCreate("wchar[260];ptr"), $uCB = DllStructCreate ("wchar[260];int", $lParam)
    Local Const $iFlag = BitOr($BIF_NEWDIALOGSTYLE, $BIF_RETURNONLYFSDIRS)
    Local $sRet, $iTst_Flag = BitXOR(BitAnd(DllStructGetData($uCB, 2), $iFlag), $iFlag)
 
    Switch $iMsg
        Case $BFFM_INITIALIZED
            DllCall("user32.dll","int","SendMessage", "hwnd", $hWnd, "int", $BFFM_SETSELECTIONW, "int", 1, _
                "ptr", DllStructGetPtr($uCB, 1))
 
            $sRet = DllCall("shell32.dll", "int", "SHParseDisplayNameW", _
                "wstr", DllStructGetData($uCB, 1), "ptr", 0, "ptr", DllStructGetPtr($uTB, 2), "int", 0, "ptr", 0)
 
            If IsArray($sRet) Then
                If
$sRet[0] = 0 Then
                    _FileSFCallbackProc($hWnd, $BFFM_SELCHANGED, DllStructGetData($uTB, 2), $lParam)
                    DllCall("ole32.dll", "int", "CoTaskMemFree", "ptr", DllStructGetData($uTB, 2)) ; Cleaning
                EndIf
            EndIf
        Case $BFFM_SELCHANGED
            If $iTst_Flag = 0 Then
                $sRet = DllCall("shell32.dll", "int", "SHGetPathFromIDListW", "ptr", $wParam, "ptr", DllStructGetPtr($uTB, 1))
 
                If IsArray($sRet) Then
                    Local $sPrompt_Data = StringRegExpReplace(ControlGetText($hWnd, "", "Static1"), "(?i)(?s)(\r\n)+.*$", "")
                    Local $sCurrent_Path = DllStructGetData($uTB, 1)
 
                    If $sCurrent_Path = "" Then
                        $sCurrent_Path = StringSplit(ControlTreeView($hWnd, "", "SysTreeView321", "GetSelected"), "|")
                        $sCurrent_Path = $sCurrent_Path[$sCurrent_Path[0]]
                    EndIf
 
                    Local $sFiles_Split = StringSplit($sFiles_Filter, "|")
                    $iEnable_OK = 0
 
                    For $i = 1 To $sFiles_Split[0]
                        If FileExists($sCurrent_Path & "\" & $sFiles_Split[$i]) Then
                            $iEnable_OK = 1
                            ExitLoop
                        EndIf
                    Next
 
                    DllCall("User32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", $BFFM_ENABLEOK, "int", 0, "ptr", $iEnable_OK)
 
                    ControlSetText($hWnd, "", "Static1", _
                        $sPrompt_Data & @CRLF & @CRLF & _StringGetShortString($sCurrent_Path, 50))
                EndIf
            EndIf
        Case 5
            DllCall("User32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", $BFFM_ENABLEOK, "int", 0, "ptr", $iEnable_OK)
    EndSwitch
EndFunc
Func _StringGetShortString($sString, $iMax_Ret_Lenght=30)
    If StringLen($sString) < $iMax_Ret_Lenght Then Return $sString
 
    If $iMax_Ret_Lenght <= 4 Then $iMax_Ret_Lenght = 5
    Local $iSide_Lenght = Round(($iMax_Ret_Lenght / 2) - 2, 0)
 
    Local $sLeft_Side = StringStripWS(StringLeft($sString, $iSide_Lenght), 3)
    Local $sRight_Side = StringStripWS(StringRight($sString, $iSide_Lenght), 3)
 
    Return $sLeft_Side & "...." & $sRight_Side
EndFunc


Всего записей: 556 | Зарегистр. 21-11-2007 | Отправлено: 22:36 05-03-2009
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » AutoIT (Часть 2)
Widok (01-06-2010 13:08): Лимит страниц. Продолжаем здесь.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru