Otwieranie okna z wyborem domyślnego programu dla pliku

Odpowiedz Nowy wątek
2012-09-09 19:36

Rejestracja: 9 lat temu

Ostatnio: 6 miesięcy temu

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?

Pozostało 580 znaków

2012-09-09 19:51
Moderator

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Wrocław

0

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


Pozostało 580 znaków

2012-09-10 04:33

Rejestracja: 9 lat temu

Ostatnio: 6 miesięcy temu

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.

Pozostało 580 znaków

2012-09-10 08:41

Rejestracja: 8 lat temu

Ostatnio: 1 dzień temu

0

Zobacz ten temat:
http://stackoverflow.com/ques[...]harp-how-can-i-show-open-with
Jest tam kilka ponoć działających przykładów

Pozostało 580 znaków

2012-09-12 20:10

Rejestracja: 9 lat temu

Ostatnio: 6 miesięcy temu

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?

Pozostało 580 znaków

2012-09-12 22:11

Rejestracja: 9 lat temu

Ostatnio: 6 lat temu

http://www.codeproject.com/Ar[...]-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/sc[...]bership/View.aspx?mid=3540632


Pozdro & poćwicz!
edytowany 2x, ostatnio: stfu, 2012-09-12 22:21

Pozostało 580 znaków

2012-09-13 15:17

Rejestracja: 9 lat temu

Ostatnio: 6 miesięcy temu

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.

Pozostało 580 znaków

Odpowiedz

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