UI Automation / Получить расширение файла - PullRequest
0 голосов
/ 13 апреля 2010

Мне поручен проект, который требует от меня извлечения определенного файла из папки, где я могу получить только X и Y на экране. Хотя в XP мне удавалось использовать тот факт, что проводник Windows по сути представляет собой представление списка, и использовал сообщение WM_HITTEST для получения информации о файле, в Windows 7 это не так.

Для решения этой проблемы я использую UI Automation, который является отличным инструментом для таких вещей, единственная проблема в том, что в этом случае дескриптор окна, на который я смотрю, принадлежит рабочему столу, а на рабочем столе может быть несколько файлов с тем же именем, но с разными расширениями (а windows настроен на «скрытие расширений известных типов файлов»), автоматизация пользовательского интерфейса не возвращает мне это расширение. Я перепробовал много вещей, но не могу найти надежного решения, которое дало бы мне 100% успеха.

Кто-нибудь пробовал это? успешно?

1 Ответ

0 голосов
/ 13 апреля 2010

Не могли бы вы предоставить более подробную информацию о "конкретном файле из папки"?
Какие правила вы бы использовали для идентификации файла вручную?

Я бы не сказал, что прохождение через GUI - лучший способ для таких случаев. Если есть что-то, что вы можете использовать для распознавания файла, хранящегося в системе файлов / папок, я бы попробовал пройти через бэкэнд.

Простой пример для иллюстрации. Подсчет общего количества текстовых файлов, содержащихся в папке, и сохранение пути всех найденных файлов Excel.

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

Спасибо,
Альберт Гареев
http://automation -beyond.com /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...