Použití dialogového okna Kopírovat z Exploreru

Volání API není zase tak snadné, jak vypadá: API funkce očekává, že v UDT budou bytově  zarovnané hodnoty, ale VB zarovnává UDT v mezích double byte. Tudíž, musíme maličko zapracovat, aby vše pracovalo korektně:

Public Function SHFileOP(ByRef lpFileOp As SHFileOpStruct) As Long

   Dim result As Long
   Dim lenFileop As Long
   Dim foBuf() As Byte

   lenFileop = LenB(lpFileOp)
   ReDim foBuf(1 To lenFileop)
'Velikost struktury.

   'Nyní musíme zkopírovat strukturu do bytového pole
   Call CopyMemory(foBuf(1), lpFileOp, lenFileop)

   'Nyní přesuneme posledních 12 bytů po 2 pro bytové zarovnání
   Call CopyMemory(foBuf(19), foBuf(21), 12)
   result = SHFileOperation(foBuf(1))

   SHFileOP = result

End Function

Zavoláme-li tuto funkci, tak ta nejprve odstraní náš problém, a teprve potom provede volání API.

Jak pracuje struktura SHFILEOPSTRUCT:

hwnd: ukazatel na okno vlastníka dialogu. Lze ji nastavit na hWnd okna, které volá funkci, nebo na 0, která říká, že vlastníkem je Desktop.

wFunc:
- FO_COPY - kopíruje soubory specifikované v pFrom do umístění specifikované v pTo.
- FO_DELETE - smaže soubory specifikované v pFrom. (pTo je ignorováno.)
- FO_MOVE - přesune soubory specifikované v pFrom do umístění specifikované v pTo.
- FO_RENAME - přejmenuje soubory specifikované v pFrom.

pFrom: řetězec, obsahující jména zdrojových souborů a adresářů. Jednotlivé položky jsou oddělené znakem Null (vbNullChar) a je ukončen dvěma znaky Null. Je důležité si toto zapamatovat.

pTo: řetězec, obsahující jméno cílového souboru nebo adresáře. Pokud jsou v pFrom specifikovány pouze soubory, lze do pTo zadat specifická jména, oddělená znakem Null a zakončená dvojitým Null.

fFlags: příznaky, které kontrolují operaci. Zde mohou být uloženy kombinace následujících příznaků, zkombinované pomocí operátoru Or:

- FOF_ALLOWUNDO - Nastaví Undo informaci, pokud je možná.
- FOF_CONFIRMMOUSE - Zatím není implementováno.
- FOF_FILESONLY - Provede operaci pouze na souborech, pokud je specifikace jmen provedena pomocí (*.*).
- FOF_MULTIDESTFILES - pTo obsahuje specifikaci více cílových souborů (jeden pro každý zdrojový soubor) místo adresáře, kam budou všechny zdrojové soubory uloženy.
- FOF_NOCONFIRMATION - Odpovídá Ano všem pro všechny dialogy.
- FOF_NOCONFIRMMKDIR - Nepožaduje potvrzení vytvoření nového adresáře, pokud jej operace potřebuje.
- FOF_NOCOPYSECURITYATTRIBS - Nekopíruje bezpečností atributy souboru na NT.
- FOF_NOERRORUI - V případě chyby se tato uživateli nezobrazí.
- FOF_NORECURSION - Nepracovat s rekurzivními adresáři (tzn. pracovat s adresáři specifikovanými v pFrom, a ne s podadresáři).
- FOF_RENAMEONCOLLISION - V případě, že cílový soubor již existuje, bude přejmenován.
- FOF_SILENT - Nezobrazuje ukazatel průběhu.
- FOF_SIMPLEPROGRESS - Zobrazí ukazatel průběhu ale nezobrazí jména souborů.
- FOF_WANTMAPPINGHANDLE - Pokud je specifikováno FOF_RENAMEONCOLLISION, pak  hNameMappings bude vyplněn, pokud byl nějaký soubor přejmenován.

Následující parametry se aplikují pouze v prostředí Internet Explorer 5:

- FOF_NO_CONNECTED_ELEMENTS - Nepracuje na připojených elementech
- FOF_WANTNUKEWARNING - Během mazání varovat před trvalým odstraněním namísto přesunem do koše (částečně přepíše FOF_NOCONFIRMATION)

fAnyOperationsAborted: obsahuje 0, pokud operace nebyla přerušena, jinak nenulové číslo.

hNameMappings: ukazatel na mapovací objekt, který obsahuje pole struktur  SHNAMEMAPPING. Každá struktura obsahuje nové a staré jména souborů pro všechny soubory, na nichž byla provedena operace. Používá se pouze v případě, že do fFlags  byl zahrnut parametr FOF_WANTMAPPINGHANDLE.

lpszProgressTitle - řetězec, specifikující titulek ukazatele průběhu. Je použit pouze tehdy, obsahuje-li fFlags parametr FOF_SIMPLEPROGRESS.

Zpět Další

Autor: The Bozena