Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как сделать "кнопку добавления файла".

Ответить
Настройки темы
[решено] Как сделать "кнопку добавления файла".

Аватара для Centrinar

Старожил


Сообщения: 247
Благодарности: 1

Профиль | Цитировать


Кнопка при нажатии на которую открывался бы проводник где надо указать файл. После чего данный файл копировался в нужную нам папку.

Отправлено: 15:24, 12-05-2010

 

Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#include <File.au3>

Global $sOut = "C:\" ; Папка назначения
Global $szDrive, $szDir, $szFName, $szExt, $Path

$sFileOpenDialog = FileOpenDialog("Выберите файл", @ProgramFilesDir & "\", "Exe (*.exe)", 1 + 8 + 16)
If Not (@error) Then
    $aPath = _PathSplit($sFileOpenDialog, $szDrive, $szDir, $szFName, $szExt)
    If FileExists($sFileOpenDialog) And IsArray($aPath) Then FileCopy($sFileOpenDialog, $sOut & $aPath[3] & $aPath[4])
EndIf
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 12-05-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


FlatX007, в этом случае имя файла указывать не обязательно:

Код: Выделить весь код
Global $sOut = "C:\" ; Папка назначения

$sFile = FileOpenDialog("Выберите файл", @ProgramFilesDir, "Exe (*.exe)", 1 + 8 + 16)

If Not @error Then
    FileCopy($sFile, $sOut)
    ShellExecute($sOut)
EndIf

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:48, 12-05-2010 | #3


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <WinAPIEx.au3>
#include <Misc.au3>

Global $sOut = "C:\" ; Папка назначения
Global $szDrive, $szDir, $szFName, $szExt, $aPath
Global $hProgressProc = DllCallbackRegister('_ProgressProc', 'dword', 'uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr')

$Form1 = GUICreate("", 248, 46)
$Button1 = GUICtrlCreateButton("Выбрать файл", 16, 8, 219, 25)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            _FileCopy()
            Switch @error
                Case 0
                    MsgBox(64, "", "Файл скопирован")
                Case 1
                    MsgBox(48, "", "Файл НЕ скопирован!")
            EndSwitch
            _Exit()
    EndSwitch
WEnd

Func _FileCopy()

    $sFileOpenDialog = FileOpenDialog("Выберите файл", @ProgramFilesDir & "\", "File (*.*)", 1 + 8 + 16)
    If Not (@error) Then
        $aPath = _PathSplit($sFileOpenDialog, $szDrive, $szDir, $szFName, $szExt)
        If FileExists($sFileOpenDialog) And IsArray($aPath) Then
            ProgressOn('_WinAPI_CopyFileEx', 'Copying...', '', -1, -1, 2)
            _WinAPI_CopyFileEx($sFileOpenDialog, $sOut & $aPath[3] & $aPath[4], 0, DllCallbackGetPtr($hProgressProc))
            If Not @error Then
                Return SetError(0, 0, 0)
            Else
                _WinAPI_ShowLastError()
                Return SetError(1, 0, 0)
            EndIf
        EndIf
    EndIf

EndFunc   ;==>_FileCopy

Func _ProgressProc($iTotalFileSize, $iTotalBytesTransferred, $iStreamSize, $iStreamBytesTransferred, $iStreamNumber, $iCallbackReason, $hSourceFile, $hDestinationFile, $iData)

    Local $Percent = Round($iTotalBytesTransferred / $iTotalFileSize * 100)

    If $Percent = 100 Then
        ProgressSet($Percent, '', 'Complete')
    Else
        ProgressSet($Percent)
    EndIf
    If _IsPressed('1B') Then
        Return $PROGRESS_CANCEL
    Else
        Return $PROGRESS_CONTINUE
    EndIf

EndFunc   ;==>_ProgressProc

Func _Exit()
    DllCallbackFree($hProgressProc)
    ProgressOff()
EndFunc   ;==>_Exit
WinAPIEx.au3
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:57, 12-05-2010 | #4


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:50, 12-05-2010 | #5


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Конечно точно описал задачу ... а если файл 4 гига, солько ждать окончания копирования ?

Отправлено: 13:16, 13-05-2010 | #6


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата FlatX007:
а если файл 4 гига, солько ждать окончания копирования ? »
В постановке задачи ничего не говорится о необходимости предусматривания данной ситуации.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:25, 13-05-2010 | #7


Аватара для Angelus

Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


а если файлов несколько?......как это проще сделать?

Отправлено: 17:21, 12-06-2010 | #8


Аватара для FlatX007

Ветеран


Сообщения: 553
Благодарности: 87

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
; Папки не копируются, только файлы!

Global $OUT = 'C:\Out'
Global $iIncrease, $iProsent

DirCreate($OUT)

$sMultiOpenFiles = _FileOpenDialogEx("Выберите файлы для копирования", @ProgramFilesDir, "File (*.*)", 4, -1)

If Not (@error) Then
    $iIncrease = 100 / $sMultiOpenFiles[0]
    For $i = 1 To $sMultiOpenFiles[0]
        FileCopy($sMultiOpenFiles[$i], $OUT)
        $iProsent += $iIncrease
        ConsoleWrite(Round($iProsent) & ' %' & @CRLF)
    Next
EndIf

Func _FileOpenDialogEx($sTitle, $sInitDir, $sFilter, $iOptions = 0, $iReturnMode = -1, $sDefaultName = '', $hWnd = 0)
    Local $sFOD_Ret = FileOpenDialog($sTitle, $sInitDir, $sFilter, $iOptions, $sDefaultName, $hWnd)
    If @error Then Return SetError(@error, @extended, $sFOD_Ret)

    Local $sRet = ''
    Local $aSplit_Str = StringSplit($sFOD_Ret, '|')

    If @error Or $aSplit_Str[0] < 2 Then
        If $iReturnMode > 0 Then Return $sFOD_Ret
        Return $aSplit_Str
    EndIf

    Local $sInit_Path = StringRegExpReplace($aSplit_Str[1], '([^\\])\\*$', '\1')

    For $i = 2 To $aSplit_Str[0]
        $sRet &= $sInit_Path & '\' & $aSplit_Str[$i] & '|'
    Next

    $sRet = StringRegExpReplace($sRet, '\|+$', '')
    If $iReturnMode > 0 Then Return $sRet

    Return StringSplit($sRet, '|')
EndFunc   ;==>_FileOpenDialogEx
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:59, 12-06-2010 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как сделать "кнопку добавления файла".

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как сделать кнопку "Ждущий режим" не активной Mishechka Microsoft Windows 2000/XP 2 06-05-2010 11:56
Интерфейс - [решено] как создать в панели задач кнопку "Свернуть все окна"? woldemarok Microsoft Windows 7 20 23-03-2010 23:25
Интерфейс - Как отключить кнопку "завершение работы" в экране приветствия vista Заказчик Microsoft Windows Vista 4 26-10-2009 16:00
Почему Windows при запуске файла с именем "start.exe" показывает кнопки как "Пуск"? Котяра Хочу все знать 9 22-06-2009 13:48
[решено] Помогите сделать кнопку для создания атрибута окну "поверх всеx" Pozia AutoIt 2 21-02-2009 22:48




 
Переход