2009-10-08 13 views
5

Chcę (programowo) drukować dokumenty różnych typów, prosząc system Windows, aby to zrobił (przy użyciu domyślnej powiązanej aplikacji). Jak mogę to zrobić (w API .NET lub C++/Win32)?Jak mogę poprosić Windows o wydrukowanie dokumentu?

Na przykład, jeśli mam zainstalowany program MS Office i Acrobat Reader na komputerze, pliki PDF powinny zostać wydrukowane przez Acrobat Reader, a pliki DOC powinny zostać wydrukowane przez MS Word. Ale jeśli nie mam zainstalowanego MS Office, pliki DOC powinny być drukowane za pomocą WordPacka lub OpenOffice.org Writer, jeśli ten ostatni jest zainstalowany, lub jakakolwiek aplikacja jest obecnie domyślnym skojarzeniem dla tego typu plików.

Odpowiedz

6

Spróbuj użyć funkcji ShellExecute.

Na przykład w katalogu C:

ShellExecute(my_window_handle, "print", path_to_file, NULL, NULL, SW_SHOW); 
+0

Dziękuję za przykład. –

5

połączeń ShellExecute. Użyj "print" dla parametru lpOperation.

+2

Nie wszystkie pliki mogą być drukowane w ten sposób. Twierdzenie jest takie, że zwykle działa w przypadku plików, które mają menu kontekstowe "drukuj" w Eksploratorze Windows. W moim systemie to wyklucza HTML i DOC - nie mam MS Office, ale mam Open Office * i * MS Word Reader. Mimo to jest to prawdopodobnie tak dobre, jak tylko możesz, bez pisania czegoś, co "skrypcia" aplikacji poprzez wysyłanie fałszywych wiadomości klawiatury i myszy. – Steve314

+0

Dziękuję za informację. –

+1

Steve, jeśli Open Office i Word Reader nie rejestrują się jako zdolni do obsługi czasownika "print", to jest to wada * tych * programów. Nie możemy oczekiwać, że napisze specyficzne dla aplikacji sposoby drukowania dokumentów, zwłaszcza formatów tak złożonych, jak HTML czy Word. –

4

Oto kod C#:

public void ShellExecute(string filename, string verb) 
    { 
     System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo(); 
     si.UseShellExecute = true; 
     si.FileName = filename; 
     si.Verb = verb; 
     System.Diagnostics.Process.Start(si); 
    } 
+0

Dziękuję za przykład C#. –

Powiązane problemy