|
OPEN SOURCE PROJECT
Работа с папками
| |
andXrei | Дата: Вторник, 10.03.2009, 14:31 | Сообщение # 1 |
Майор
Группа: Проверенные
Сообщений: 95
Статус: Offline
| Работа с функцией SHFileOperationA, ниже приведенный алгоритм должен удалить папку 32 в директории [C:\][вместе с подпапками] Запускаеться, но ничего не происходит--почему?? format PE GUI 4.0 entry start include 'win32a.inc' section '.data' data readable writable SzFullPath db 'C:\32.txt',0 wFunc db 'FO_DELETE',0 fFlags db 'FOF_SILENT',0 section '.code' code readable executable start: invoke SHFileOperationA,SzFullPath,wFunc,fFlags invoke ExitProcess,0 section 'idata' import data readable writable library shell32,'SHELL32.DLL' library kernel32,'KERNEL32.DLL' import shell32,\ SHFileOperationA,'SHFileOperationA' import kernel32,\ ExitProcess,'ExitProcess'
|
|
| |
fasm | Дата: Вторник, 10.03.2009, 15:52 | Сообщение # 2 |
Admin
Группа: Заблокированные
Сообщений: 122
Статус: Offline
| В общем вы используете не правильно параметры, надо так: Code lpFileOp SHFILEOPSTRUCT ... invoke SHFileOperation, lpFileOp struct SHFILEOPSTRUCT hwnd dd 0 wFunc dd 0 pFrom dd 0 pTo dd 0 fFlags dd 0 fAnyOperationsAborted dd 0 hNameMappings dd 0 lpszProgressTitle dd 0 ends
|
|
| |
andXrei | Дата: Среда, 11.03.2009, 12:53 | Сообщение # 3 |
Майор
Группа: Проверенные
Сообщений: 95
Статус: Offline
| Че та я не допонял А можно исходник????
|
|
| |
fasm | Дата: Среда, 11.03.2009, 13:01 | Сообщение # 4 |
Admin
Группа: Заблокированные
Сообщений: 122
Статус: Offline
| ну в принципе, вечером я сам все сделаю...
|
|
| |
andXrei | Дата: Вторник, 17.03.2009, 20:17 | Сообщение # 5 |
Майор
Группа: Проверенные
Сообщений: 95
Статус: Offline
| Исходник так и не сделали??
|
|
| |
fasm | Дата: Вторник, 17.03.2009, 21:30 | Сообщение # 6 |
Admin
Группа: Заблокированные
Сообщений: 122
Статус: Offline
| Сейчас сделаю последние доработки... Кстати вы пишите: library shell32,'SHELL32.DLL' library kernel32,'KERNEL32.DLL' а так в принципе нельзя, портите формат исполняймого файла, правильно будет: library shell32,'SHELL32.DLL',\ kernel32,'KERNEL32.DLL'
|
|
| |
fasm | Дата: Вторник, 17.03.2009, 21:37 | Сообщение # 7 |
Admin
Группа: Заблокированные
Сообщений: 122
Статус: Offline
| format PE GUI 4.0 entry start include '%fasminc%\win32a.inc' struct SHFILEOPSTRUCT hwnd dd 0 wFunc dd 0 pFrom dd 0 pTo dd 0 fFlags dd 0 fAnyOperationsAborted dd 0 hNameMappings dd 0 lpszProgressTitle dd 0 ends FO_DELETE = 3 FOF_ALLOWUNDO = 40h ; иметь возможность отмены FOF_NOCONFIRMATION = 10h <span style="color:gray">; Выводить диалог о удаление папки и содержимого section '.data' data readable writable SzFullPath db 'C:\1',0 lpFileOp SHFILEOPSTRUCT section '.code' code readable executable start: mov [lpFileOp.wFunc], FO_DELETE mov eax, SzFullPath mov [lpFileOp.pFrom], eax mov [lpFileOp.fFlags], FOF_ALLOWUNDO mov [lpFileOp.fAnyOperationsAborted], TRUE invoke SHFileOperationA,lpFileOp invoke ExitProcess,0 section 'idata' import data readable writable library shell32,'SHELL32.DLL',\ kernel32,'KERNEL32.DLL' import shell32,\ SHFileOperationA,'SHFileOperationA' import kernel32,\ ExitProcess,'ExitProcess' _______________________________________ ps/ Все исходники которые я оставляю на форуме, можно найти в каталоге файлов...
|
|
| |
andXrei | Дата: Понедельник, 23.03.2009, 17:53 | Сообщение # 8 |
Майор
Группа: Проверенные
Сообщений: 95
Статус: Offline
| А как можно скопировать папку с помощью SHFileOperation Вместо FO_DELETE поставить FO_COPY=2 ? И куда нужно указать новый путь? Расталкуйте!! Вот дочего я додумался:: Code
include 'win32ax.inc' struct SHFILEOPSTRUCT hwnd dd 0 wFunc dd 0 pFrom dd 0 pTo dd 0 fFlags dd 0 fAnyOperationsAborted dd 0 hNameMappings dd 0 lpszProgressTitle dd 0 ends FO_COPY = 2 FOF_ALLOWUNDO = 40h FOF_NOCONFIRMATION = 10h
.data
SzFullPath db 'C:\Folder',0 SzFullNewPath db 'E:\Folder',0 lpFileOp SHFILEOPSTRUCT
.code
start: mov [lpFileOp.wFunc], FO_COPY mov eax, SzFullPath mov [lpFileOp.pFrom], eax mov ebx, SzFullNewPath mov [lpFileOp.pTo],ebx mov [lpFileOp.fFlags], FOF_ALLOWUNDO mov [lpFileOp.fAnyOperationsAborted], TRUE
push lpFileOp call [SHFileOperation] push 0 call [ExitProcess]
.end start Но он почемуто не может найти папку
Сообщение отредактировал andXrei - Понедельник, 23.03.2009, 18:08 |
|
| |
fasm | Дата: Понедельник, 23.03.2009, 18:43 | Сообщение # 9 |
Admin
Группа: Заблокированные
Сообщений: 122
Статус: Offline
| FO_MOVE = $0001; FO_COPY = $0002; FO_DELETE = $0003; FO_RENAME = $0004; FOF_MULTIDESTFILES = $0001; FOF_CONFIRMMOUSE = $0002; FOF_SILENT = $0004; FOF_RENAMEONCOLLISION = $0008; FOF_NOCONFIRMATION = $0010; FOF_WANTMAPPINGHANDLE = $0020; FOF_ALLOWUNDO = $0040; FOF_FILESONLY = $0080; FOF_SIMPLEPROGRESS = $0100; FOF_NOCONFIRMMKDIR = $0200; FOF_NOERRORUI = $0400; А диск Е: есть?
|
|
| |
andXrei | Дата: Понедельник, 23.03.2009, 19:40 | Сообщение # 10 |
Майор
Группа: Проверенные
Сообщений: 95
Статус: Offline
| Quote (fasm) А диск Е: есть? Есть Так что здесь не правельно: Code include 'win32ax.inc' struct SHFILEOPSTRUCT hwnd dd 0 wFunc dd 0 pFrom dd 0 pTo dd 0 fFlags dd 0 fAnyOperationsAborted dd 0 hNameMappings dd 0 lpszProgressTitle dd 0 ends FO_COPY = $0002 FOF_ALLOWUNDO = 40h FOF_NOCONFIRMATION = 10h
.data
SzFullPath db 'C:\Folder',0 SzFullNewPath db 'E:\Folder',0 lpFileOp SHFILEOPSTRUCT
.code
start: mov [lpFileOp.wFunc], FO_COPY mov eax, SzFullPath mov [lpFileOp.pFrom], eax mov ebx, SzFullNewPath mov [lpFileOp.pTo],ebx mov [lpFileOp.fFlags], FOF_ALLOWUNDO mov [lpFileOp.fAnyOperationsAborted], TRUE
push lpFileOp call [SHFileOperation] push 0 call [ExitProcess]
.end start Прикомпиляции этого исходника выдается ошибка "Не удаеться скопировать файл. Не удаеться произвести чтение из файла или сдиска' А когда создаш папку в диске E то выдает ошибку 'Не удается скопировать Folder. Папка в которую следует поместить файлы одновременно является их исходным '/ Но в итоге он копирует папку с файлами в папку находящиюся в E:\ Почему это происходит??объясните причину??
Сообщение отредактировал andXrei - Понедельник, 23.03.2009, 19:52 |
|
| |
fasm | Дата: Вторник, 24.03.2009, 10:28 | Сообщение # 11 |
Admin
Группа: Заблокированные
Сообщений: 122
Статус: Offline
| include '%fasminc%\win32ax.inc' struct SHFILEOPSTRUCT hwnd dd 0 wFunc dd 0 pFrom dd 0 pTo dd 0 fFlags dd 0 fAnyOperationsAborted dd 0 hNameMappings dd 0 lpszProgressTitle dd 0 ends FO_COPY = 2h FOF_ALLOWUNDO = 40h FOF_NOCONFIRMMKDIR = 200h FOF_MULTIDESTFILES = 1h FOF_RENAMEONCOLLISION = 8h FOF_NOCONFIRMATION = 10h .data SzFullPath db 'C:\Folder',0,0 SzFullNewPath db 'D:\Folder',0,0 lpFileOp SHFILEOPSTRUCT .code start: mov [lpFileOp.wFunc], FO_COPY mov [lpFileOp.pFrom], SzFullPath mov [lpFileOp.pTo], SzFullNewPath mov [lpFileOp.fFlags],FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION mov [lpFileOp.fAnyOperationsAborted], FALSE push lpFileOp call [SHFileOperation] push 0 call [ExitProcess] .end start Просто надо было в строке с путем к папке дописать еще один завершающий нуль...
|
|
| |
|