événement fichier sélectionné

Signaler
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Il y a quelques mois j'avais demandé sur ce forum comment créer un événement qui se déclanche quand un fichier est séléctionné. On m'avais alors proposé le code suivant :

private static void Main( string[ ] args )
{
    string url =  "C:\";
    object o = null;

    InternetExplorer ie = new InternetExplorer( );
    ie.DocumentComplete += delegate
    {
        try
        {
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine( url );

            ShellFolderView doc = ( ShellFolderView )ie.Document;
            doc.SelectionChanged += delegate
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine( doc.FocusedItem.Name );
            };

            ShellFolderViewOC oc = new ShellFolderViewOC( );
            oc.SetFolderView( doc ); // Redirige les events O_o
        }
        catch
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine( "Error" );
        }
    };

    ie.Visible = true;
    ie.Navigate( url, ref o, ref o, ref o, ref o );

    Console.ReadLine( );
}

Ce code marchait, mais depuis que j'ai installé Internet Explorer 7 sur mon ordinateur ça ne fonctionne plus. Y aurait-il une solution pour résoudre le problème (sans repasser à IE 6) ? Doit-on forcément utiliser Shell et la classe InternetExplorer pour créer ce genre d'événements ?

merci d'avance pour votre aide.

Mathmax

9 réponses

Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

hein, je savais pas que la classe InternetExplorer et ShellFolderView existait, c'est des objets COM importés?
Sinon, qu'est ce que tu veux dire un fichier sélectionner? sélectionné dans l'explorateur Windows ou dans ta ListBox par exemple?

[:D] @++
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

J'importe le composant COM "Microsoft Internet Controls" (shdocvw.dll).
J'entends pas "fichier sélectionné", sélectionné dans l'explorateur windows. As-tu une idée pour rendre ce bout de code fonctionnel ? Ou peu être faut-il écrire différemment l'événement ?

Mathmax
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

Salut,
Après un peu de recherche, je suis tombé sur ce thread http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=696891&SiteID=1
Apparement IE7 ne supporte plus l'ancien modèle.

Regarde ces liens, ce sont des alternatives :
http://www.codeproject.com/cs/miscctrl/foldertreeview.asp
http://www.codeproject.com/cs/files/advancedfileexplorer.asp
http://www.codeproject.com/csharp/tv-lv-basic41.asp

Modifie les à ta guise. Allez bonne chance...

[:D] @++
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
51
Salut,

La class FileSystemWatcher ne suffit t'elle pas ?

<hr size="2" />-Blog-
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

J'allais lui suggérer ça quand j'ai compris que ce qu'il voulait était simplement d'intégrer un explorateur de dossier dans son programme.

[:D] @++
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

En fait, ce que tu me propose badrbadr ne correcspond pas à ce que je voudrais. Dans l'exemple que tu me donne on crée un explorateur windows et il est alors facile de capter un événement "fichier séléctionné" puisque c'est en fait une ligne séléctionné dans un contrôle. Moi ce que je voudrais, c'est un événement qui se produit chaque fois qu'un fichier est séléctionné dans une fenêtre windows correspondant à un dossier. Je vais regarder si la classe FileSystemWatche permet celà.
Messages postés
475
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
3 novembre 2008

Mmmm, je doute fort que FileSysemWatcher aille la "finesse" de surveiller un fichier jusqu'à sa sélection.
Cette classe permet seulement de détecter les événement de modification, de création, de suppression et de modification du nom d'un fichier.
Si tu trouves une solution, partage-là avec nous :)
[:D] @++
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
36
Salut, j'ai reconnu mon code.  Il semblerait que le "model object" d'IE7 est changé, ce que confirme le lien vers le forum de la MSDN donné par Badrbadr :

"This is expected behavior in IE7 as the shell folder view has been separated from the IExplore.exe process. You'll need to script Windows Explorer rather than Internet Explorer to acces the shell folder view."

Soit le nouvel objet "Windows Explorer" est un ActiveX et donc est accessible depuis CSharp, soit faut écrire un wrapper pour les interfaces COM du Shell et/ou de Windows Explorer, et ça c'est plus compliqué ( c'est peut être disponible sur codeproject ).

FileSysemWatcher ne detecte pas ce genre d'évènements.
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Merci pour ces informations.
J'ai essayé d'importer pas mal de dll qui pourraient contenir la classe "Windows Explorer" mais je n'ai rien trouvé. Une solution qui pourrait me convenir serait d'intégrer un explorateur windows dans mon programme à condition que celui-ci permette un affichage miniature des fichiers. J'ai bien trouvé quelques ActivX qui pourraient permettre de faire cela (par exemple celui-ci), mais ils sont à chaque fois payants.
Pour ce qui est d'écrire un wrapper, je ne vois pas comment faire, ni d'ailleurs ce que cela veux dire...

Mathmax