Otwieranie okna z wyborem domyślnego programu dla pliku

0

Czy ktoś wie czy z poziomu C# można otworzyć okno "Otwórz za pomocą" (w załączniku przykład) pod Windows 7 ?
Prawdopodobnie będzie się to wiązało z importem jakiejś biblioteki systemowej i wywołaniu konkretnej funkcji, tylko skąd wziąć info z tym związane?

0

W jaki sposób otworzyć?
Chcesz "nagle" wymusić otworzenie tego okna znikąd czy ma się ono pokazać po otworzeniu jakiegoś typu pliku?

0

Dla konkretnego typu pliku. Mam kolekcję obiektów FileInfo która przechowuje różne pliki o różnych rozszerzeniach. I chodzi o to, żeby dla wskazanego obiektu otworzyć to okienko, aby móc wybrać program za pomocą którego uruchomiony zostanie plik. Coś takiego.

0

Zobacz ten temat:
http://stackoverflow.com/questions/4726441/c-sharp-how-can-i-show-open-with
Jest tam kilka ponoć działających przykładów

0

No i wypróbowałem tamte przykłady i zdaje się, że każde z nich prowadzi do tego samego, bo zawsze prowadzi to do...wyjątku:

System.ComponentModel.Win32Exception (0x80004005): Z określonym plikiem nie skojarzono dla tej operacji żadnej aplikacji X

gdzie w miejscu X pojawia się nazwa pliku dla którego próbuje otworzyć okienko "Otwórz za pomocą".
A ten plik, to np. .avi lub .rmvb, czy inny plik wideo. To samo dla plików graficznych. I nie bardzo wiem czemu taki wyjątek. Nawet sprawdzałem w rejestrze że te pliki są skojarzone z konkretną aplikacją (też było to pokazane w tych przykładach), tym bardziej że standardowe odpalenie pliku działa bez problemu. Ktoś ma jakieś pomysły co jest nie tak?
Spośród tamtych przykładów wybrałem taki, bo jest dość elegancki (ale inne też próbowałem):

    class OpenWithDialog
    {
        public static ProcessStartInfo GetProcess(string fileName)
        {
            ProcessStartInfo info = new ProcessStartInfo(fileName);
            info.Verb = "openas";

            return info;
        }

    }

No i wywołuje to tak

System.Diagnostics.Process.Start(OpenWithDialog.GetProcess(Plik.FullName)); 

gdzie 'Plik' to właściwość która zwraca FileInfo na wybrany plik.
Jakieś pomysły?

1

http://www.codeproject.com/Articles/13103/Calling-the-Open-With-dialog-box-from-your-applica

edit:
Ok, sprawdziłem sobie i na XPku działa, ale na siódemce już nie. Trzeba z tego co wyczytałem wywołać funkcję z shell32.dll bezpośrednio, ale wtedy pokazuje się (przynajmniej u mnie) okienko z informacją, że próbuję otworzyć plik nieprzypisany do żadnej aplikacji itd. Jeśli wybiorę plik, który jest już skojarzony z jakimś to się normalnie pokazuje okno z wyborem aplikacji, której chcę użyć.
Kod:

string path = "c:\\file.txt";
Process p = new Process();
ProcessStartInfo pi = new ProcessStartInfo("rundll32.exe");
pi.UseShellExecute = false;
pi.RedirectStandardOutput = true;
pi.Arguments = "shell32.dll,OpenAs_RunDLL " + path;
p.StartInfo = pi;
p.Start();

Znalezione w komentarzu użytkownika brucerer: http://www.codeproject.com/script/Membership/View.aspx?mid=3540632

0

U mnie na Win7 działa to bez zarzutów, także udało się. Teraz muszę tylko dostosować kod do własnych potrzeb. Dzięki za pomoc, pozdro.

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