2010-10-13 23 views
0

j'ai réussi à obtenir le fichier sélectionné dans le dossier de travail en cours à partir de Windows Explorer à l'aide SystemAccessibleObject de http://mwinapi.sourceforge.net/Obtenir l'extension d'objet de AccessibleObjectFromWindow?

Je veux obtenir le nom du fichier avec l'extension, mais si vous activez l'option « Masquer les extensions des types de fichiers connus » alors il n'y aura que le nom de fichier Je suis coincé sur cette étape.

Mon code:

SystemAccessibleObject currentWorkingWindow = SystemAccessibleObject.FromWindow(new SystemWindow(GetForegroundWindow()), AccessibleObjectID.OBJID_WINDOW).Children.Where(c => c.RoleString.Equals("client")).FirstOrDefault(); 

      if (null != currentWorkingWindow) 
      { 
       SystemWindow addressBar = currentWorkingWindow.Window.AllDescendantWindows.Where(w => w.ClassName.Equals("ComboBox")).FirstOrDefault(); 

       if (null != addressBar) 
       { 
        string addressBarContent = addressBar.Content.LongDescription; 

        Match m = Regex.Match(addressBarContent, "Address \\[push button\\]\\n[A-Z]: \\n[A-Z]: ([A-Z]:\\\\[^/:*?<>|\"\\r\\n\\t]+)"); 

        if (null != m || null != m.Groups[1]) 
        { 
         SystemWindow currentListView = currentWorkingWindow.Window.AllDescendantWindows.Where(w => w.ClassName.Equals("SysListView32")).FirstOrDefault(); 

         if (null != currentListView) 
         { 
          SystemAccessibleObject currentListViewItems = SystemAccessibleObject.FromWindow(currentListView, AccessibleObjectID.OBJID_WINDOW).Children.Where(c => c.RoleString.Equals("list")).FirstOrDefault(); 

          if (null != currentListViewItems) 
          { 
           SystemAccessibleObject[] selectedItems = currentListViewItems.SelectedObjects; 

           string currentWorkingFolderPath = m.Groups[1].Value; 

           if (0 != selectedItems.Count()) 
           { 
            string[] fileNames = currentListView.Content.PropertyList.Select(p => p.Value).ToArray(); 
           } 
          } 
         } 

         currentListView = null; 
        } 

        m = null; 
       } 

       addressBar = null; 
      } 

      currentWorkingWindow = null; 

Tout aide serait appréciée!

Répondre

0

Je n'ai pas encore trouvé la solution parfaite, mais utiliser le Presse-papiers n'est pas une très mauvaise idée.

0

Je ne sais rien de l'objet SystemAccessibleObject mais pourquoi ne pas l'aborder sous un angle différent. Vous connaissez le répertoire et le nom de fichier sans extension, de sorte que vous pouvez utiliser le Directory.GetFiles et "trouver" votre fichier avec l'extension.

foreach (string fileName in fileNames) 
{ 
    string[] matchedFiles = Directory.GetFiles(currentWorkingFolderPath, fileName+"*"); 
    etc... 
} 
+0

Merci pour votre commentaire, mais il ne peut pas m'aider. Je veux utiliser cette fonction sur le dossier de travail actuel, pas le dossier prédéfini. – ByulTaeng