↑  ←  Описание функции


_WinAPI_GetOpenFileName

Создает диалоговое окно "Открыть", которое позволяет пользователю указать диск, каталог и имя файла или несколько файлов для открытия

#include <WinAPI.au3>
_WinAPI_GetOpenFileName([$sTitle = "" [, $sFilter = "All files (*.*)" [, $sInitalDir = "." [, $sDefaultFile = "" [, $sDefaultExt = "" [, $iFilterIndex = 1 [, $iFlags = 0 [, $iFlagsEx = 0 [, $hwndOwner = 0]]]]]]]]])

Параметры

$sTitle [необязательный] Заголовок диалогового окна
$sFilter [необязательный] Набор фильтров, каждый из которых состоит из двух элементов, например "Все файлы (*.*)|Текстовые файлы (*.txt)|Аудио файлы (*.mp3;*.wav;*.wma)"
    Первый элемент в каждом фильтре описывает фильтр, например "Текстовые файлы"
    Второй элемент фильтра указывает маску файла, например "*.TXT"
    Чтобы указать множество масок в одном фильтре, перечисляйте их используя разделитель ";" (точка с запятой), например "*.TXT;*.DOC;*.BAK"
    Маска может быть комбинацией допустимых символов в имени файла и подстановочного знака звездочки (*)
    Не включайте пробелы в маску.
$sInitalDir [необязательный] Строка (путь), задающая начальный каталог
$sDefaultFile [необязательный] Имя файла по умолчанию, которое будет в поле ввода "Имя файла:"
$sDefaultExt [необязательный] Строка содержащая расширение по умолчанию
$iFilterIndex [необязательный] Номер фильтра в списке "Типы файлов:", который будет выбран.
$iFlags [необязательный] Смотрите значения параметра Flags в описании структуры $tagOPENFILENAME
$iFlagsEx [необязательный] Смотрите значения параметра FlagEx в описании структуры $tagOPENFILENAME
$hwndOwner [необязательный] Дескриптор родительского окна, которому принадлежит окно. Это значение может быть любым допустимым дескриптором окна, или 0, если диалоговое окно не имеет родительского окна.

Возвращаемое значение

Успех:Возвращает массив следующего формата:
$Array[0] - Количество строк
$Array[1] - Выбранный путь
$Array[2] - Выбранный файл
$Array[n] - Выбранный файл
Ошибка:Возвращает массив с 1 элементом, равным 0

См. также

$tagOPENFILENAME, _WinAPI_GetSaveFileName, _WinAPI_CommDlgExtendedError

См. также

Искать GetOpenFileName в библиотеке MSDN

Пример


#include <StructureConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

Global $iMemo

_Example_Defaults()
_Example_ExplorerStyleMultiSelect()
_Example_OldStyle()
_Example_ExplorerStyleSinglSelect()
_Example_ExplorerStyle_NoPlaceBar()

Func _Example_Defaults()
    Local $hGui, $btn_dialog, $aFile, $sError

    ; Создаёт GUI
    $hGui = GUICreate("Использование по умолчанию", 500, 296)
    $iMemo = GUICtrlCreateEdit("", 2, 32, 496, 226, $WS_HSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    $btn_dialog = GUICtrlCreateButton("Открыть", 215, 263, 70, 28)
    GUISetState()

    While 1
        Switch GUIGetMsg()
            Case $btn_dialog
                $aFile = _WinAPI_GetOpenFileName() ; Использование по умолчанию
                If $aFile[0] = 0 Then
                    $sError = _WinAPI_CommDlgExtendedError()
                    MemoWrite("CommDlgExtendedError (" & @error & "): " & $sError)
                Else
                    For $x = 1 To $aFile[0]
                        MemoWrite($aFile[$x])
                    Next
                EndIf
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    GUIDelete($hGui)
EndFunc   ;==>_Example_Defaults

Func _Example_ExplorerStyleMultiSelect()
    Local $hGui, $btn_dialog, $aFile, $sError

    ; Создаёт GUI
    $hGui = GUICreate("Стиль Проводника (множественный выбор)", 500, 296)
    $iMemo = GUICtrlCreateEdit("", 2, 32, 496, 226, $WS_HSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    $btn_dialog = GUICtrlCreateButton("Открыть", 215, 263, 70, 28)
    GUISetState()

    While 1
        Switch GUIGetMsg()
            Case $btn_dialog
                $aFile = _WinAPI_GetOpenFileName("Мой диалог открытия файла", _
                        "Текстовые файлы (*.txt;*.au3)", ".", @ScriptName, "", 1, _
                        BitOR($OFN_ALLOWMULTISELECT, $OFN_EXPLORER), 0, $hGui)
                If $aFile[0] = 0 Then
                    $sError = _WinAPI_CommDlgExtendedError()
                    MemoWrite("CommDlgExtendedError (" & @error & "): " & $sError)
                Else
                    For $x = 1 To $aFile[0]
                        MemoWrite($aFile[$x])
                    Next
                EndIf
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    GUIDelete($hGui)
EndFunc   ;==>_Example_ExplorerStyleMultiSelect

Func _Example_OldStyle()
    Local $hGui, $btn_dialog, $aFile, $sError

    ; Создаёт GUI
    $hGui = GUICreate("Старый стиль (множественный выбор)", 500, 296)
    $iMemo = GUICtrlCreateEdit("", 2, 32, 496, 226, $WS_HSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    $btn_dialog = GUICtrlCreateButton("Открыть", 215, 263, 70, 28)
    GUISetState()

    While 1
        Switch GUIGetMsg()
            Case $btn_dialog
                $aFile = _WinAPI_GetOpenFileName("Мой диалог открытия файла", _
                        "Текстовые файлы (*.txt)|AutoIt файлы (*.au3)", ".", @ScriptName, _
                        "", 2, $OFN_ALLOWMULTISELECT, 0, $hGui)
                If $aFile[0] = 0 Then
                    $sError = _WinAPI_CommDlgExtendedError()
                    MemoWrite("CommDlgExtendedError (" & @error & "): " & $sError)
                Else
                    For $x = 1 To $aFile[0]
                        MemoWrite($aFile[$x])
                    Next
                EndIf
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    GUIDelete($hGui)
EndFunc   ;==>_Example_OldStyle

Func _Example_ExplorerStyleSinglSelect()
    Local $hGui, $btn_dialog, $aFile, $sError

    ; Создаёт GUI
    $hGui = GUICreate("Стиль Проводника (выбор только одного)", 500, 296)
    $iMemo = GUICtrlCreateEdit("", 2, 32, 496, 226, $WS_HSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    $btn_dialog = GUICtrlCreateButton("Открыть", 215, 263, 70, 28)
    GUISetState()

    While 1
        Switch GUIGetMsg()
            Case $btn_dialog
                $aFile = _WinAPI_GetOpenFileName("Мой диалог открытия файла", _
                        "Текстовые файлы (*.txt)|AutoIt файлы (*.au3)", ".", @ScriptName, _
                        "", 2, 0, 0, $hGui)
                If $aFile[0] = 0 Then
                    $sError = _WinAPI_CommDlgExtendedError()
                    MemoWrite("CommDlgExtendedError (" & @error & "): " & $sError)
                Else
                    For $x = 1 To $aFile[0]
                        MemoWrite($aFile[$x])
                    Next
                EndIf
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    GUIDelete($hGui)
EndFunc   ;==>_Example_ExplorerStyleSinglSelect

Func _Example_ExplorerStyle_NoPlaceBar()
    Local $hGui, $btn_dialog, $aFile, $sError

    ; Создаёт GUI
    $hGui = GUICreate("Стиль Проводника (выбор только одного)", 500, 296)
    $iMemo = GUICtrlCreateEdit("", 2, 32, 496, 226, $WS_HSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    $btn_dialog = GUICtrlCreateButton("Открыть", 215, 263, 70, 28)
    GUISetState()

    While 1
        Switch GUIGetMsg()
            Case $btn_dialog
                $aFile = _WinAPI_GetOpenFileName("Мой диалог открытия файла", _
                        "Текстовые файлы (*.txt)|AutoIt файлы (*.au3)", ".", @ScriptName, _
                        "", 2, BitOR($OFN_ALLOWMULTISELECT, $OFN_EXPLORER), $OFN_EX_NOPLACESBAR, $hGui)
                If $aFile[0] = 0 Then
                    $sError = _WinAPI_CommDlgExtendedError()
                    MemoWrite("CommDlgExtendedError (" & @error & "): " & $sError)
                Else
                    For $x = 1 To $aFile[0]
                        MemoWrite($aFile[$x])
                    Next
                EndIf
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    GUIDelete($hGui)
EndFunc   ;==>_Example_ExplorerStyle_NoPlaceBar

; Записывает строку в элемент для заметок
Func MemoWrite($sMessage)
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite