Bonjour,
Je développe une petite application qui doit permettre (entre autre) d'effectuer toutes les actions de l'explorateur windows sur des fichiers (les actions que l'on peut accéder par le clic droit sur un fichier dans l'explorer, par exemple "ouvrir", "éditer", etc).
Mais j'ai un problème lorsqu'il s'agit d'ouvrir plusieurs fichiers en même temps. Pour ce cas, je me base sur l'action "Play in Winamp" sur des fichiers .mp3.
Dans la base de registre, cette action correspond à la commande suivante :
"C:\Program Files\Winamp\winamp.exe" "%1"
%1 étant remplacé par le nom du fichier.
Je suis à peu près sur que l'explorateur windows, lorsque plusieurs mp3 sont séléctionnés, execute cette commande pour chacun des fichiers. C'est winamp ensuite qui se charge de son côté de detecter qu'il est executé plusieurs fois dans un temps "très court" pour créer une unique playlist avec les fichiers. (Et ne pas avoir qu'un seul fichier dans la playlist au final donc, puisque le paramètre "%1" represente toujours qu'un seul des fichiers sélectionnés).
Je code mon appli en C#. J'ai d'abord essayé, en parsant la clé registre, d'utiliser Process.Start avec winamp comme programme et le nom d'un fichier de la liste en argument (en répétant cet appel pour tous les fichiers séléctionnés).
Mais problème #1 : cela fonctionne, mais les fichiers ne sont pas dans l'ordre dans la playlist. Cela vient du fait (je pense) qu'à partir du moment ou on démarre un autre processus, on n'a plus aucun contrôle sur l'ordonnancement, et donc les différentes instances de winamp génèrent la playlist dans un ordre inattendu.
Ensuite, j'ai essayé d'utiliser la fonction ShellExecute (qui provient de shell32.dll). Je lui passe en paramètre la commande "play" (telle qu'elle est inscrite dans le registre), et le nom d'un fichier mp3 en path, et je l'appelle une fois par fichier.
Mais problème #2 : je me retrouve dans le cas où au final, winamp est ouvert seulement avec le dernier fichier de la liste. Apparemment, ShellExecute attend que le programme passe en mode où il récupère les messages windows avant de retourner, ce qui fait que winamp prends mes appels pour des appels distincts (comme si on lançait les mp3 a la main les uns après les autres : au final, on a plus que le dernier fichier dans la playlist).
Ma question consiste donc à résoudre l'un des deux problèmes : soit réussir à "ordonner" les créations de processus via mes appels successifs à Process.Start, soit réussir à utiliser ShellExecute pour lancer une liste de fichiers. J'ai essayé divers méthodes d'appel pour passer en path non pas un fichier, mais une liste de fichier, mais à chaque fois la méthode ShellExecute me retourne un code 2 (file not found). Ce que j'ai testé entre autre :
"fichier1" "fichier2"...
"fichier1", "fichier2", ...
"fichier1"; "fichier2"; ...
Je préfèrerai d'ailleurs utiliser la méthode ShellExecute, qui est plus simple à généraliser que Process.Start (car parser les clés registres peut ne pas fonctionner pour des clés un peu exotique).
Merci.
Partager