Comment ouvrir une boîte de dialogue par défaut pour la fenêtre si ShellExecute échoue en raison de l'absence d'association de fichiers en C ++?

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

Question

Je peux utiliser la fonction Windows ShellExecute pour ouvrir un fichier sans problème tant que le fichier a une association correcte.

Si aucune association n'existe, je voudrais utiliser la boîte de dialogue Windows par défaut pour ouvrir le fichier:

 image

Est-ce possible?Si oui, comment?

Était-ce utile?

La solution

Le documenté moyen de montrer que le dialogue est d'utiliser le verbe 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 vous vérifiez sous HKEY_CLASSES_ROOT\Unknown\shell\openas, vous voyez que cela revient à appeler l'export OpenAs_RunDLL (non documenté) dans shell32.

Autres conseils

Exécutez RUNDLL32 Shell32,OpenAs_RunDLL path/to/file/to/open

N'utilisez simplement pas de verbe explicite.Utiliser un verbe spécifique comme «ouvrir» est une grosse erreur:

  • 'open' peut ne pas être un verbe par défaut (par exemple, il peut s'agir de 'play', 'edit' ou 'run')
  • "ouvert" peut ne pas exister

Il est plus correct de simplement passer NULL comme verbe .Le système sélectionnera automatiquement le verbe le plus approprié:

  • Le verbe par défaut sera utilisé, s'il est défini
  • Le verbe 'open' sera utilisé, si aucun verbe par défaut n'est défini
  • le premier verbe sera utilisé, si aucun verbe par défaut et "ouvert" n'est disponible
  • si aucun verbe n'est attribué - le système affichera la boîte de dialogue "Ouvrir avec"

En d'autres termes, simple

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

affichera la boîte de dialogue "Ouvrir avec".

N'utilisez un verbe spécifique que si vous souhaitez une action spécifique .Par exemple.'imprimer', 'explorer', 'runas'.Sinon, passez simplement nul.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top