¿Hay alguna manera simple de abrir el cuadro de diálogo "Abrir con"?¿Cómo puedo mostrar el cuadro de diálogo "Abrir con"?
Respuesta
Esto debería hacer el truco ...
var processInfo = new ProcessStartInfo(fileName);
processInfo.Verb = "openas";
Process.Start(processInfo);
Aunque, Oded hace un gran punto - no saber exactamente cómo/dónde se va a utilizar dicha funcionalidad significa esto podría no ser la respuesta para su situación .
Comentarios recientes sobre esta respuesta van a mostrar que no estaba muy detallado en primer lugar. Se producirá un problema si intentas openas
un archivo que ya tiene el verbo open
definido en ese tipo de archivo. Del mismo modo, si intentas open
un archivo que no tiene ese verbo definido, habrá problemas. La cuestión sería:
Win32Exception: No hay ninguna aplicación asociada con el archivo especificado para esta operación
De la parte superior de mi cabeza he sugerido a Tomás que con el fin de utilizar este tipo de código en una aplicación de producción que necesitaría ser minuciosa y tal vez verificar el registro, o averiguar si un archivo puede y debe abrirse con cualquier verbo determinado. Podría ser más simple que eso cuando considere ProcessStartInfo.Verbs
: una vez que se configure fileName
, le proporcionará una colección de posibles verbos asociados con el tipo de archivo. Esto debería facilitar la determinación de qué hacer con qué archivo.
Para concluir, como mencioné a Thomas, deberá tener cuidado y agregar algo de complejidad/inteligencia a su aplicación; esta respuesta ciertamente no es una solución general.
No funciona ... Win32Exception, "No hay ninguna aplicación asociada con el archivo especificado para esta operación" –
@ThomasLevesque Solo funcionará si no hay "programas predeterminados" están definidos; es decir, si hay un 'Abrir con ...'menú contextual para el archivo, entonces esto fallará. Si se trata de un tipo de archivo desconocido con simplemente una opción 'Abrir', esto funcionará. Lo contrario también es cierto: al usar el verbo 'open' para los tipos de archivos conocidos se ejecutará el programa predeterminado pero se alterará esta misma excepción si se desconoce. Por lo tanto, en una aplicación adecuada, debes ser cuidadoso al respecto; tal vez haciendo una búsqueda en el repositorio de tipos de archivo conocido (registro) y basando su decisión de cómo abrir los hechos dados por el sistema. –
@ThomasLevesque De hecho, ni siquiera necesita ir a tales longitudes: ['ProcessStartInfo.Verbs'] (http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.verbs (VS.90) .aspx) se rellenará con los posibles verbos para un archivo cuando se establezca 'fileName', lo que significa que puede verificar si el verbo' open' está definido y si no usa 'openas'. Esto no atrapa todos los casos que apuesto, así que agrega tu propia inteligencia a voluntad. –
Hay toneladas de shell examples en el All In One Code Framework. Tal vez puedas echarles un vistazo para ver si un ejemplo tiene funciones que quieres tener.
Usando
System.Diagnostics.Process.Start(path);
El archivo se openened con el programa por defecto, si no se programa por defecto se define el diálogo abierto con será mostrado.
Usted puede usar la función:
[DllImport("shell32.dll", SetLastError = true)]
extern public static bool
ShellExecuteEx(ref ShellExecuteInfo lpExecInfo);
Tienes un ejemplo para utilizar esta función: this link
Algunos ingeniería inversa con procexp reveló una línea de comandos rundll32.exe que funcionó. Aquí está un ejemplo de programa que lo utiliza:
using System;
using System.Diagnostics;
using System.IO;
class Program {
static void Main(string[] args) {
ShowOpenWithDialog(@"c:\temp\test.txt");
}
public static void ShowOpenWithDialog(string path) {
var args = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "shell32.dll");
args += ",OpenAs_RunDLL " + path;
Process.Start("rundll32.exe", args);
}
}
Probado en Win7, no puede adivinar lo bien que funciona en otras versiones de Windows.
Gracias @Hans! Estuve dando vueltas por un tiempo y esto es lo que necesitaba. No estaba usando la ruta completa de shell32.dll. – tehDorf
Tenga en cuenta que 'OpenAs_RunDLL' no está documentado y [no siempre funciona.] (Http://stackoverflow.com/questions/23566667/rundll32-shell32-dll) –
- 1. Mostrar el cuadro de diálogo "abrir con" en Android
- 2. ¿Cómo abrir el cuadro de diálogo integrado de Copiar archivo?
- 3. Abrir el cuadro de diálogo de descarga con PHP
- 4. Abrir cuadro de diálogo de archivo
- 5. Eclipse: oculta rutas en el cuadro de diálogo "Abrir recurso"
- 6. Abrir cuadro de diálogo de notificación
- 7. Blanco - Cuadro de diálogo Abrir archivo
- 8. ¿Cómo mostrar repetidamente un cuadro de diálogo con PyGTK/Gtkbuilder?
- 9. Cómo mostrar el icono apropiado en el cuadro de diálogo
- 10. ¿Cómo puedo mostrar el diálogo "abrir con" para una extensión de archivo no registrada?
- 11. cómo mostrar un cuadro de diálogo en jQuery Mobile
- 12. Agregar editores en Visual Studio "Abrir con ..." cuadro de diálogo
- 13. ¿Cómo puedo abrir un cuadro de diálogo de impresión con Javascript?
- 14. Mostrar el teclado virtual para el cuadro de diálogo
- 15. Abrir el cuadro de diálogo de JQuery Ui en MousePosition
- 16. Abrir el cuadro de diálogo "guardar como ..." desde: ex comando
- 17. Abrir nuevo cuadro de diálogo desde un cuadro de diálogo en qt
- 18. ¿Cómo puedo mostrar un cuadro de diálogo no modal y mostrar información en él de inmediato?
- 19. Abrir el cuadro de diálogo en WPF MVVM
- 20. Mostrar el cuadro de diálogo del selector de archivos
- 21. Cómo utilizar Abrir con cuadro de diálogo cuando el formato de archivo no reconocido
- 22. ¿Cómo abrir el cuadro de diálogo "Windows no puede abrir este archivo"?
- 23. ¿Cómo puedo forzar a PropertyGrid a mostrar un cuadro de diálogo personalizado para una propiedad específica?
- 24. Android IME: ¿cómo mostrar un cuadro de diálogo emergente?
- 25. Al crear un cuadro de diálogo con jquery, ¿cómo puedo ocultar el diálogo div?
- 26. ¿Cómo puedo abrir el cuadro de diálogo redactar/crear correo utilizando el cliente de correo electrónico predeterminado del usuario?
- 27. Cuadro de diálogo con EditText y Spinner
- 28. Cómo habilitar la opción "Usar siempre el programa seleccionado para abrir este tipo de archivo" en el cuadro de diálogo Abrir-con-diálogo?
- 29. ¿Cómo se muestra el cuadro de diálogo "Abrir archivo" en Access 2007 VBA?
- 30. ¿Cómo puedo mostrar solo ciertas extensiones de archivo en un cuadro de diálogo de archivo abierto?
¿Winforms? WPF? ¿Formas web? MVC? – Oded
CodeProject tiene un artículo que ocupa el primer lugar al buscar en Google: http://www.codeproject.com/KB/shell/openwith.aspx. Sin embargo, me gustaría ver una forma más bonita de hacer esto, en lugar de recurrir a externos ('ProcessStartInfo', ¿no?). –
http://stackoverflow.com/a/32153874/5306861 – codeDom