Попробуй, может поможет. За все файловые операции отвечает функция SHFileOperation, которую мы и будем беспощадно использовать. Сначала объявим. (Сразу предупрежу — объявление берите отсюда. У меня в API Viewer'e оно почему-то было неправильное… Пришлось самому переписать… Private Declare Function SHFileOperation Lib "Shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long “Что-то мало тут параметров” — скажет внимательный читатель. И будет прав, их мало, всего один… Зато какой. То есть, этой функции передается некая структура, которая перед вызовом определенным образом заполняется. Смотрим структуру (API Viewer) Private Type SHFILEOPSTRUCT hwnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Long hNameMappings As Long lpszProgressTitle As String End Type Ага. Вот тут-то собака и порылась. По порядку. hwnd - handle вызывающего окна. wFunc - собственно, что делать будем? pFrom - а откуда? pTo - и куда? fFlags - особенные фичи fanyOperationsAborted - возвращается, если нас прервали… bNameMappings - долго объяснять, этот параметр нам не особо нужен lpszProgressTitle - заголовок окна Так, тут вроде все понятно. hWnd у нас всегда есть, а вот остальное… Привожу пример. Option Explicit Private Type SHFILEOPSTRUCT hwnd As Long wFunc As Long pFrom As String pTo As String fFlags As Integer fAnyOperationsAborted As Long hNameMappings As Long lpszProgressTitle As String End Type Private Declare Function SHFileOperation Lib "Shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long Private Sys As SHFILEOPSTRUCT Private Const FO_COPY = &H2& Private Const FO_DELETE = &H3& Private Const FO_MOVE = &H1& Private Const FO_RENAME = &H4& Private Const FOF_SILENT = &H4 Private Const FOF_SIMPLEPROGRESS = &H100 Private Const FOF_NOCONFIRMATION = &H10 Private Const FOF_NOCONFIRMMKDIR = &H200 Private Const FOF_RENAMEONCOLLISION = &H8 Private Sub Form_Load() Me.Show Sys.wFunc = FO_MOVE Sys.pFrom = "c:\temp\*.*" Sys.pTo = "d:\temp" Sys.hwnd = Form1.hwnd Sys.fFlags = FOF_SIMPLEPROGRESS Call SHFileOperation(Sys) End Sub Вопросы? То есть, после заполнения структуры, мы получим результат, а именно, вызовем функцию, и она нам все сделает. Самое интересное, так это флаги, которые она поддерживает. Пишу список… FOF_NOCONFIRMATION Говорит "Да для всех" на все тупые вопросы FOF_NOCONFIRMMKDIR Не спрашивает, надо ли создавать папку, если это нужно. FOF_RENAMEONCOLLISION Переименовывать файл, если такое имя уже есть. FOF_SILENT Молчать как рыба, то есть не выводить никаких окошек. FOF_SIMPLEPROGRESS Показывать окошко с процессом выполнения.
Ответить
|