Urządzenie przenośne jak się dobrać do niego?

0

Witam serdecznie,

czy ktoś z Kolegów będzie tak miły i poświęci kilka minut na rozwiązanie mojego problemu?
Nie bardzo wiem jak dostać się do "urządzenia przenośnego" a właściwie do jego ścieżki. Chciałbym modyfikować, otwierać, usuwać pliki z urządzenia z poziomu programu, jednak nie mogę dostać się do ścieżki. O ile w przypadku folderu np na dysku C sprawa jest prosta: "C:\jakiś_folder" o tyle z urządzeniem przenośnym robią się schody. Gdy chce skopiować ścieżkę z mojego komputera jedyne co mogę skopiować to: "Komputer\MP3_Player\Magazyn wymienny\mp3" po czym po odpaleniu programu program się wysypuje z błędem o treści mniej więcej: dysk nie istnieje.

Czy ktoś zechce pomóc? Z góry bardzo dziękuję.

Pozdrawiam

0

A to dysk wymienny nie ma przypisanej litery dysku... ?

0

Witam,

Fr33Q, dziękuję za podjęcie tematu.

Odpowiadając na pytanie,niestety nie.... Jest jakieś wyjście z sytuacji?

Pozdrawiam

0

Jest. Zrobiłem mały risercz. Każdy element widoczny w eksploratorze implementuje interfejs IShellItem. Nie musi być to tak naprawdę katalog czy plik, nie musi też istnieć "fizycznie". Dlatego ścieżek te elementy nie mają. To, co jest widoczne w pasku to tylko "ludzkie" nazwy poszczególnych elementów. To teraz, jak się do nich dobrać?
Najprawdopodobniej programiści przy tworzeniu sterownika i rozszerzenia eksploratora musieli wybrać tam jakieś UUID, ale można zrobić to prościej. Gdzie jest widoczna ikonka urządzeń przenośnych? W oknie mojego komputera :). Tak więc trzeba przeszukać właśnie ten widok, żeby znaleźć nasz cel.
Wszystko, co jest ci potrzebne (odpowiednie funkcje i interfejsy) znajdziesz tutaj: http://msdn.microsoft.com/en-us/library/windows/desktop/ff521731%28v=VS.85%29.aspx
W Viście i 7 dodali kilka nowych funkcji i interfejsów, które znacznie ułatwiają sprawę, żeby przeiterować po elementach 'mojego komputera' potrzebne będą SHGetKnownFolderItem (z FOLDERID_ComputerFolder jako pierwszy argument), interfejs IEnumShellItems i wywołanie BindToHandler na IShellItem, pętla while i IShellItem::GetDisplayName, żeby najprościej po nazwie znaleźć urządzenie).

Jak z korzystać z COM w .NET możesz znaleźć w Google.

1 użytkowników online, w tym zalogowanych: 0, gości: 1