¿Cómo abrir un cuadro de diálogo predeterminado para la ventana si ShellexCute falla debido a la asociación de archivos en C ++?

StackOverflow https://stackoverflow.com/questions/6364879

Pregunta

Puedo usar la función de Windows ShellexCute para abrir un archivo sin problemas siempre que el archivo tenga una asociación correcta.

Si no existe una asociación, me gustaría usar el diálogo predeterminado de Windows para abrir el archivo:

image

es posible? ¿Si es así, cómo?

¿Fue útil?

Solución

los documentado camino Para mostrar que el diálogo es usar el verbo OpenAs.

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED|COINIT_DISABLE_OLE1DDE);
SHELLEXECUTEINFO sei = { sizeof(sei) };
sei.fMask = SEE_MASK_NOASYNC;
sei.nShow = SW_SHOWNORMAL;
sei.lpVerb = "openas";
sei.lpFile = "C:\\yourfile.ext";
ShellExecuteEx(&sei);

Si lo revisas debajo HKEY_CLASSES_ROOT\Unknown\shell\openas Usted ve que esto es lo mismo que llamar a la exportación (indocumentada) OpenAs_rundll en Shell32.

Otros consejos

Ejecutar RUNDLL32 Shell32,OpenAs_RunDLL path/to/file/to/open

Simplemente no use verbo explícito. Usar un verbo específico como 'abierto' es un gran error:

  • 'Open' puede no ser un verbo predeterminado (por ejemplo, puede ser 'Play', 'Editar' o 'Ejecutar')
  • 'Abierto' puede no existe

Es mucho más correcto a Simplemente pase nulo como verbo. El sistema seleccionará automáticamente el verbo más apropiado:

  • Se utilizará el verbo predeterminado, si está configurado
  • Se utilizará el verbo 'abierto', si no se establece un verbo predeterminado
  • Se utilizará el primer verbo, si no hay verbos predeterminados y 'abiertos' disponibles
  • Si no se asignan verbos, el sistema traerá el cuadro de diálogo "Abrir con"

En otras palabras, simple

ShellExecute(0, NULL, 'C:\MyFile.StrangeExt', ...);

Mostrará el diálogo "abierto con".

Solo usa un específico verbo si quieres un específico acción. Por ejemplo, 'imprimir', 'explorar', 'runas'. De lo contrario, simplemente pase nulo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top