从 AccessibleObjectFromWindow 获取对象扩展?
我设法使用 SystemAccessibleObject 从 Windows 资源管理器获取当前工作文件夹中的选定文件 http://mwinapi.sourceforge.net/
我想获取带有扩展名的文件名,但如果您启用“隐藏已知文件类型的扩展名”,那么将只有文件名。我就卡在这一步了
我的代码:
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;
任何帮助将不胜感激!
I managed to get the selected file in the current working folder from Windows Explorer using SystemAccessibleObject from http://mwinapi.sourceforge.net/
I want to get the filename with extension but if you enable "Hide extensions for known file types" then there will be only the filename. I'm stuck on this step.
My 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;
Any helps would be appreciated!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我对 SystemAccessibleObject 一无所知,但为什么不从不同的角度来处理这个问题呢?您知道目录和不带扩展名的文件名,因此可以使用 Directory.GetFiles 并“查找”带有扩展名的文件。
I do not know anything about the SystemAccessibleObject but why not approach this from a different angle. You know the directory and the file name without extension, so you could use the Directory.GetFiles and "find" your file with extension.
我还没有找到完美的解决方案,但使用剪贴板并不是一个坏主意。
I didn't figure out the perfect solution yet but using Clipboard is not a very bad idea.