2010-04-13 6 views
0

Je suis chargé d'un projet qui me demande de récupérer un fichier spécifique à partir d'un dossier où je ne peux obtenir un X et Y sur l'écran. Alors que dans XP, j'ai réussi à utiliser le fait que Windows Explorer est essentiellement une vue de liste, et utilisé le message WM_HITTEST pour obtenir des informations sur le fichier, dans Windows 7, ce n'est pas le cas. Pour résoudre ce problème, j'utilise UI Automation, qui est un excellent outil pour de telles choses, le seul problème est que dans le cas, la poignée de fenêtres que je regarde appartient au bureau, et le bureau pourrait avoir plusieurs fichiers avec le même nom, mais avec des extensions différentes (et windows est configuré pour "masquer les extensions de types de fichiers connus") L'automatisation de l'interface utilisateur ne me renvoie pas l'extension. J'ai essayé beaucoup de choses, mais je ne trouve pas de solution robuste qui me donnerait 100% de succès.UI Automation/Récupérer Extension de fichier

Est-ce que quelqu'un a déjà essayé? avec succès?

+0

>> et Windows est configuré pour "Masquer les extensions des types de fichiers connus" - Êtes-vous autorisé à modifier ce paramètre manuellement ou via l'interface graphique en lui scénario? –

+0

Non, je ne crains pas ... sinon je l'aurais fait :) en gros, l'application devrait être aussi discrète que possible. –

Répondre

0

Pourriez-vous fournir plus de détails concernant "un fichier spécifique d'un dossier"?
Quelles règles utiliseriez-vous pour identifier un fichier manuellement?

Je ne dirais pas que passer par l'interface graphique est le meilleur moyen pour de tels cas. S'il y a quelque chose, que vous pouvez utiliser pour la reconnaissance d'un fichier, stocké dans le système de fichiers/dossiers, je vais essayer de passer par le back-end.

Un simple example pour illustrer. Comptage du nombre total de fichiers texte contenus dans un dossier et stockage d'un chemin de tous les fichiers Excel trouvés.

Dim sFolder 
Dim FSO, objFolder, objFile, objXLSList 
Dim intTXTCount 

sFolder = "C:\TEMP" 

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set objXLSList = CreateObject("Scripting.Dictionary") 

Set objFolder = FSO.GetFolder(sFolder) 
intTXTCount = 0 
For Each objFile In objFolder.Files 
If Regex_Test(objFile.Name, ".*\.[t,T][t,T][t,T]") Then 
    intTXTCount = intTXTCount + 1 
End If 
If Regex_Test(objFile.Name, ".*\.[x,X][l,L][s,S]") Then 
    objXLSList.Add objXLSList.Count, objFile.Name 
End If 
Next 

Merci,
Albert Gareev
http://automation-beyond.com/

+0

Salut Albert, merci pour la réponse, je suis désolé mais je ne peux pas décrire trop de l'application, comme je suis lié par NDA et tel, cependant, ce que je peux dire, c'est que l'approche que vous avez écrite, bien qu'il va travailler, ne peut pas être utilisé dans mon cas. Comme je l'ai dit, ce que je reçois est un X, Y et un handle à une fenêtre, à partir de laquelle je dois déduire ce que je regarde. Alors que l'automatisation de l'interface utilisateur peut certainement me donner beaucoup d'informations, elle ne me donne pas d'informations sur l'élément du système de fichiers que je regarde. –

+0

Eh bien, il ne me semble pas que "l'automatisation de l'interface utilisateur ... ne donne pas ... d'informations sur l'élément du système de fichiers réel". Étant donné que vous ne fournissez que les coordonnées d'un pixel, cela n'a rien à voir avec un système de fichiers. Quel outil utilisez-vous? Peut-il vous renvoyer un texte en utilisant OCR ou autre chose? Si vous pouvez récupérer le nom d'un dossier parent et un nom (même sans extension), vous pouvez toujours parcourir la collection d'enfants. –

+0

Salut Albert - Je crains que l'OCR ne puisse être utilisé en raison de problèmes de temps de traitement, de temps de développement et de complexité ... J'ai utilisé l'approche de boucler les fichiers dans le dossier contenant, mais si j'ai plusieurs fichiers avec le même nom, mais avec une extension différente, et tout ce que je reçois de l'automatisation de l'interface utilisateur est le nom de fichier sans l'extension, tout ce que je dois faire est l'index du fichier dans la liste, et ce n'est pas 100% J'utilise maintenant) - ce que je cherche est une approche qui me donnerait quelque chose qui est un peu plus robuste ... –