Windows文件资源管理器是否具有COM或.NET接口?

时间:2014-05-28 15:29:21

标签: .net matlab com windows-explorer

我想以编程方式控制文件资源管理器窗口的状态(使用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') 

2 个答案:

答案 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