2009-10-08 11 views
5

Quiero (mediante programación) imprimir documentos de varios tipos, pidiéndole a Windows que lo haga (utilizando la aplicación asociada predeterminada). ¿Cómo puedo hacer esto (en API .NET o C++/Win32)?¿Cómo puedo solicitarle a Windows que imprima un documento?

Por ejemplo, si tengo instalados MS Office y Acrobat Reader en la máquina, los archivos PDF deben imprimirse con Acrobat Reader, y los archivos DOC deben imprimirse con MS Word. Pero si no tengo instalado MS Office, los archivos DOC se deben imprimir con Wordpad u OpenOffice.org Writer si este último está instalado, o la aplicación que sea actualmente la asociación predeterminada para ese tipo de archivos.

Respuesta

6

Intente utilizar la función ShellExecute.

Por ejemplo, en C:

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

Gracias por el ejemplo. –

5

Llame ShellExecute. Use "print" para el parámetro lpOperation.

+2

No todos los archivos se pueden imprimir de esta manera. La afirmación es que generalmente funciona para archivos que tienen un menú contextual "imprimir" en Windows Explorer. En mi sistema, eso excluye HTML y DOC - No tengo MS Office, pero sí tengo Open Office * y * MS Word Reader. Aún así, es probablemente tan bueno como usted puede hacer, salvo escribir algo que "guiones" aplicaciones enviando mensajes falsos de teclado y mouse. – Steve314

+0

Gracias por la información. –

+1

Steve, si Open Office y Word Reader no se registran como capaces de manejar el verbo "imprimir", entonces eso es una deficiencia de * esos * programas. No se puede esperar que escribamos formas específicas de aplicaciones para imprimir documentos, especialmente formatos tan complejos como HTML o Word. –

4

Aquí hay un código para 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

Gracias por el ejemplo de C#. –

Cuestiones relacionadas