[ Pobierz całość w formacie PDF ]
.c:\\JanBałaganiarz\\Pliki\\Robocze).Użycie tu wartości NULL lub łańcucha pustego powoduje zwrócenie informacji o wszystkich plikach Koszy znajdujących się na dyskach komputera.Parametr drugi, pSHQueryRBInfo, wskazuje strukturę typu SHQUERYBINFO, w której polach funkcja umieści odczytane informacje.Parametr cbSize, zawierający rozmiar struktury, musi zostać poprawnie ustawiony przed wywołaniem funkcji.SHEmptyRecycleBin()Funkcja SHEmptyRecycleBin() pozwala na opróżnienie Kosza.Oto jej deklaracja:HRESULT SHEmptyRecycleBin (HWND hwnd,LPCTSTR pszRootPath,DWORD dwFlags);Zwracana przez nią wartość wynosi S_OK w przypadku powodzenia; w przeciwnym razie zawiera kod błędu operacji OLE (tak samo, jak dla SHQueryRecycleBin()).Pierwszy parametr funkcji, hwnd, jest uchwytem okna, będącego rodzicem okien dialogowych, które mogą zostać wyświetlone w trakcie opróżniania Kosza.Użycie wartości NULL jest tu dopuszczalne, ale uniemożliwia wyświetlanie informacji o przebiegu operacji.Parametr pszRootPath pełni tę samą rolę, co w przypadku opisanej powyżej funkcji SHQueryRecycleBin() - określa położenie katalogu przechowującego zawartość Kosza.Łańcuch wskazywany przez pszRootPath musi zawierać co najmniej identyfikator dysku i symbol katalogu głównego, jednak może zawierać także nazwę podkatalogu (np.c:\\Dokumenty\\DoLikwidacji).Użycie łańcucha pustego lub wartości NULL powoduje opróżnienie wszystkich Koszy znajdujących się na dyskach komputera.Trzeci parametr, dwFlags, określa opcje wywołania i może przyjmować wartości opisane poniżej.Tabela 14.19.Opcje wywołania funkcji SHEmptyRecycleBin()StałaZnaczenieSHERB_NOCONFIRMATIONZabrania wyświetlania prośby o potwierdzenie usunięcia zawartości Kosza.SHERB_NOPROGRESSUIZabrania wyświetlania okna sygnalizującego postęp operacji.SHERB_NOSOUNDWyłącza dźwiękową sygnalizację zakończenia operacji.Przeglądanie folderówKolejną interesującą funkcją powłoki jest SHBrowseForFolder().Umożliwia ona przeglądanie folderów (katalogów) i wybranie jednego z nich jako folderu docelowego.Zna ją zapewne większość użytkowników Windows, którym zdarzyło się np.instalować sterowniki urządzeń.Możliwość wybrania folderu docelowego bywa niezwykle przydatna.Działanie funkcji SHBrowseForFolder() zademonstrujemy na przykładzie, który pozwala użytkownikowi wybrać jeden z istniejących już folderów i wyświetla jego nazwę w polu etykiety.Wybrany folder można następnie uczynić domyślnym.Wybór folderu za pomocą funkcji SHBrowseForFolder()Konstrukcję przykładu rozpocznij od uruchomienia IDE i umieszczenia na formularzu przycisku i etykiety (położenie obu elementów nie ma znaczenia).Na początku pliku Unit1.cpp (przed dyrektywą #include <vcl.h> wstaw następujące wiersze:#define NO_WIN32_LEAN_AND_MEAN#include <shlobj.h>Za pomocą inspektora obiektów utwórz funkcję obsługi zdarzenia OnClick dla przycisku, umieszczając w jej treści kod podany poniżej.Następnie skompiluj i uruchom aplikację.String Directory;BROWSEINFO BrowsingInfo;char FolderName [MAX_PATH];LPITEMIDLIST ItemID;memset(&BrowsingInfo, 0, sizeof(BROWSEINFO));BrowsingInfo.hwndOwner = Handle;BrowsingInfo.pszDisplayName = FolderName;BrowsingInfo.lpszTitle = "Wybierz folder:";ItemID = SHBrowseForFolder(&BrowsingInfo);if(ItemID) {char DirPath [_MAX_PATH]="";SHGetPathFromIDList(ItemID,DirPath);/* zapisz ścieżkę do zmiennej DirPath */Directory = DirPath;}Label1->Caption = Directory;Uruchomienie przykładu pozwala wybrać katalog (folder), którego nazwa jest następnie wyświetlana w polu etykiety.Oto deklaracja funkcji SHBrowseForFolder():WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(LPBROWSEINFO lpbi);Wartość zwracana przez funkcję wskazuje na identyfikator elementu wybranego z listy katalogów (wartość NULL oznacza anulowanie operacji przez użytkownika).Parametr lpbi jest strukturą typu LPBROWSEINFO, opisanego poniżej.typedef struct _browseinfo {HWND hwndOwner;LPCITEMIDLIST pidlRoot;LPSTR pszDisplayName;LPCSTR lpszTitle;UINT ulFlags;BFFCALLBACK lpfn;LPARAM lParam;int iImage;} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;Pole hwndOwner zawiera uchwyt okna będącego właścicielem okna dialogowego wyboru folderu.pidlRoot to wskaźnik do listy identyfikatorów elementów (struktury typu ITEMIDLIST), określającej położenie folderu, od którego ma się rozpocząć przeszukiwanie (drzewo wyświetlane w oknie dialogowym zawiera tylko ten folder i foldery niższego poziomu).Użycie w tym miejscu wartości NULL powoduje wyświetlenie pełnego drzewa folderów, począwszy od pulpitu (folderu głównego w danym systemie).Typ strukturalny ITEMIDLIST zdefiniowano następująco:typedef struct _ITEMIDLIST { //idlSHITEMID mkid; // lista identyfikatorów elementów} ITEMIDLIST, *LPITEMIDLIST;typedef const ITEMIDLIST *LPCITEMIDLIST;Pole pszDisplayName wskazuje na bufor, w którym zostanie zapisana nazwa katalogu wybranego przez użytkownika [ Pobierz całość w formacie PDF ]
zanotowane.pl doc.pisz.pl pdf.pisz.pl milosnikstop.keep.pl
.c:\\JanBałaganiarz\\Pliki\\Robocze).Użycie tu wartości NULL lub łańcucha pustego powoduje zwrócenie informacji o wszystkich plikach Koszy znajdujących się na dyskach komputera.Parametr drugi, pSHQueryRBInfo, wskazuje strukturę typu SHQUERYBINFO, w której polach funkcja umieści odczytane informacje.Parametr cbSize, zawierający rozmiar struktury, musi zostać poprawnie ustawiony przed wywołaniem funkcji.SHEmptyRecycleBin()Funkcja SHEmptyRecycleBin() pozwala na opróżnienie Kosza.Oto jej deklaracja:HRESULT SHEmptyRecycleBin (HWND hwnd,LPCTSTR pszRootPath,DWORD dwFlags);Zwracana przez nią wartość wynosi S_OK w przypadku powodzenia; w przeciwnym razie zawiera kod błędu operacji OLE (tak samo, jak dla SHQueryRecycleBin()).Pierwszy parametr funkcji, hwnd, jest uchwytem okna, będącego rodzicem okien dialogowych, które mogą zostać wyświetlone w trakcie opróżniania Kosza.Użycie wartości NULL jest tu dopuszczalne, ale uniemożliwia wyświetlanie informacji o przebiegu operacji.Parametr pszRootPath pełni tę samą rolę, co w przypadku opisanej powyżej funkcji SHQueryRecycleBin() - określa położenie katalogu przechowującego zawartość Kosza.Łańcuch wskazywany przez pszRootPath musi zawierać co najmniej identyfikator dysku i symbol katalogu głównego, jednak może zawierać także nazwę podkatalogu (np.c:\\Dokumenty\\DoLikwidacji).Użycie łańcucha pustego lub wartości NULL powoduje opróżnienie wszystkich Koszy znajdujących się na dyskach komputera.Trzeci parametr, dwFlags, określa opcje wywołania i może przyjmować wartości opisane poniżej.Tabela 14.19.Opcje wywołania funkcji SHEmptyRecycleBin()StałaZnaczenieSHERB_NOCONFIRMATIONZabrania wyświetlania prośby o potwierdzenie usunięcia zawartości Kosza.SHERB_NOPROGRESSUIZabrania wyświetlania okna sygnalizującego postęp operacji.SHERB_NOSOUNDWyłącza dźwiękową sygnalizację zakończenia operacji.Przeglądanie folderówKolejną interesującą funkcją powłoki jest SHBrowseForFolder().Umożliwia ona przeglądanie folderów (katalogów) i wybranie jednego z nich jako folderu docelowego.Zna ją zapewne większość użytkowników Windows, którym zdarzyło się np.instalować sterowniki urządzeń.Możliwość wybrania folderu docelowego bywa niezwykle przydatna.Działanie funkcji SHBrowseForFolder() zademonstrujemy na przykładzie, który pozwala użytkownikowi wybrać jeden z istniejących już folderów i wyświetla jego nazwę w polu etykiety.Wybrany folder można następnie uczynić domyślnym.Wybór folderu za pomocą funkcji SHBrowseForFolder()Konstrukcję przykładu rozpocznij od uruchomienia IDE i umieszczenia na formularzu przycisku i etykiety (położenie obu elementów nie ma znaczenia).Na początku pliku Unit1.cpp (przed dyrektywą #include <vcl.h> wstaw następujące wiersze:#define NO_WIN32_LEAN_AND_MEAN#include <shlobj.h>Za pomocą inspektora obiektów utwórz funkcję obsługi zdarzenia OnClick dla przycisku, umieszczając w jej treści kod podany poniżej.Następnie skompiluj i uruchom aplikację.String Directory;BROWSEINFO BrowsingInfo;char FolderName [MAX_PATH];LPITEMIDLIST ItemID;memset(&BrowsingInfo, 0, sizeof(BROWSEINFO));BrowsingInfo.hwndOwner = Handle;BrowsingInfo.pszDisplayName = FolderName;BrowsingInfo.lpszTitle = "Wybierz folder:";ItemID = SHBrowseForFolder(&BrowsingInfo);if(ItemID) {char DirPath [_MAX_PATH]="";SHGetPathFromIDList(ItemID,DirPath);/* zapisz ścieżkę do zmiennej DirPath */Directory = DirPath;}Label1->Caption = Directory;Uruchomienie przykładu pozwala wybrać katalog (folder), którego nazwa jest następnie wyświetlana w polu etykiety.Oto deklaracja funkcji SHBrowseForFolder():WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(LPBROWSEINFO lpbi);Wartość zwracana przez funkcję wskazuje na identyfikator elementu wybranego z listy katalogów (wartość NULL oznacza anulowanie operacji przez użytkownika).Parametr lpbi jest strukturą typu LPBROWSEINFO, opisanego poniżej.typedef struct _browseinfo {HWND hwndOwner;LPCITEMIDLIST pidlRoot;LPSTR pszDisplayName;LPCSTR lpszTitle;UINT ulFlags;BFFCALLBACK lpfn;LPARAM lParam;int iImage;} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;Pole hwndOwner zawiera uchwyt okna będącego właścicielem okna dialogowego wyboru folderu.pidlRoot to wskaźnik do listy identyfikatorów elementów (struktury typu ITEMIDLIST), określającej położenie folderu, od którego ma się rozpocząć przeszukiwanie (drzewo wyświetlane w oknie dialogowym zawiera tylko ten folder i foldery niższego poziomu).Użycie w tym miejscu wartości NULL powoduje wyświetlenie pełnego drzewa folderów, począwszy od pulpitu (folderu głównego w danym systemie).Typ strukturalny ITEMIDLIST zdefiniowano następująco:typedef struct _ITEMIDLIST { //idlSHITEMID mkid; // lista identyfikatorów elementów} ITEMIDLIST, *LPITEMIDLIST;typedef const ITEMIDLIST *LPCITEMIDLIST;Pole pszDisplayName wskazuje na bufor, w którym zostanie zapisana nazwa katalogu wybranego przez użytkownika [ Pobierz całość w formacie PDF ]