我想以编程方式控制文件资源管理器窗口的状态(使用Matlab)。具体来说,我想更改窗口状态(最小化,最大化,弹出到前台),更改当前查看的文件夹,并可能预选文件。
我知道我可以通过system
电话打开文件资源管理器,但我不想每次都打开一个新窗口。我也知道limited control提供的DDE。但是DDE非常过时,甚至更糟糕的记录,Matlab对COM和.NET接口的支持比DDE更好。
文件资源管理器是否公开COM或.NET接口?如果是这样,我在哪里可以找到它们?特别是知道文件资源管理器的PROGID会有很大帮助。
我在线搜索,但COM和.NET不容易搜索 - 甚至在Windows Developer搜索中也没有(最重要的结果是以.com和.net结尾的所有域名)
更新:
感谢到目前为止提供的信息,我能够使用
启动一个新的资源管理器窗口h_s = actxserver('shell.application');
h_s.Explore('c:\Users')
但我没有看到这将如何让我操纵资源管理器窗口。据我所知,shell.application对象允许我与shell进行交互,而不是使用文件资源管理器。我没有找到允许我更改所选文件的方法。此外,每次拨打h.Explore()
时,都会打开一个新窗口。
作为替代方案,通过在注册表中查找(我在HKEY_CLASSES_ROOT中查找具有名为CLSID的“子键”的键),我找到了Internet Explorer的progID,但导航到文件URI不起作用。相反,我打开一个Internet Explorer窗口和一个显示错误位置的新文件资源管理器窗口。
h_e = actxserver('InternetExplorer.Application')
h_e.Navigate('file:///C:/Users')
答案 0 :(得分:3)
Windows Shell有数百个可以使用的接口,并且您不需要使用progid来使用COM接口。
但是,对于自动化客户端(脚本,VB等),它还有特制的:Scriptable Shell Objects,这些语言更易于使用。我想他们在MatLab中也能很好地工作。
对于这些接口,所有progid的母亲都是“ shell.application ”。
答案 1 :(得分:1)
差不多两年后,我有一个相似的(如果不那么雄心勃勃的)目标:从Matlab,我想在所有文件资源管理器窗口中记录当前路径。下面的代码对我有用(也许可以扩展为进行额外的操作):
explorer = actxserver('Shell.Application');
windows = explorer.Windows;
nWins = windows.Count;
for iWin = 1:nWins
w1 = windows.Item(int32(iWin-1)); % Item is zero-based
URL = w1.get('LocationURL'); % https://msdn.microsoft.com/en-us/library/aa752127%28v=vs.85%29.aspx
if isequal(lower(URL(1:5)), 'file:') % File Explorer window
if isequal(URL(6:8), '///') % Local file
pn = URL(9:end);
else
pn = URL(6:end); % Remote file
end
pn = strrep(pn, '/', '\'); % I'm a Windows guy
pn = strrep(pn, '%20', ' '); % ...and a WYSIWYG guy
elseif isequal(lower(URL(1:5)), 'http:')
pn = URL; % Internet Explorer Window
end
disp(pn)
end