Воскресенье
02.02.2025
16:47
Форма входа
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    OPEN SOURCE PROJECT

    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Работа с папками
    andXreiДата: Вторник, 10.03.2009, 14:31 | Сообщение # 1
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: 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
    Репутация: 5
    Статус: 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
    Репутация: 2
    Статус: Offline
    Че та я не допонял А можно исходник????
     
    fasmДата: Среда, 11.03.2009, 13:01 | Сообщение # 4
    Admin
    Группа: Заблокированные
    Сообщений: 122
    Репутация: 5
    Статус: Offline
    ну в принципе, вечером я сам все сделаю...
     
    andXreiДата: Вторник, 17.03.2009, 20:17 | Сообщение # 5
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: Offline
    Исходник так и не сделали??
     
    fasmДата: Вторник, 17.03.2009, 21:30 | Сообщение # 6
    Admin
    Группа: Заблокированные
    Сообщений: 122
    Репутация: 5
    Статус: 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
    Репутация: 5
    Статус: 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
    Репутация: 2
    Статус: 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
    Репутация: 5
    Статус: 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
    Репутация: 2
    Статус: 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
    Репутация: 5
    Статус: 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

    Просто надо было в строке с путем к папке дописать еще один завершающий нуль...

     
    • Страница 1 из 1
    • 1
    Поиск: