资源管理窗口在哪打开(资源管理器查看文件方式)

软件开发活动,是需要不停地创造新的东西。但更多的时候,可能只是将现有的功能组件合成起来,构建出一个更大型的功能。今天我们我们就来谈谈后者。

如果给你一个窗口句柄,你可以得到什么信息?你可能会知道如下这些信息:
   > 它是否是一个资源管理器窗口,如果是的话
   > 当前这个窗口显示的是哪个文件夹
   > 以及当前哪个文件条目处于选中状态

上面说的这些功能点,其实并不复杂,只是我们需要将很多小型的代码片段拼接到一起,才能实现这些功能。

那我们就从ShellWindows对象开始吧, 这个对象代表了所有已打开的外壳窗口。你可以通过其Item属性来遍历它们。对于C 开发者来说,代码的实现看起来有点繁琐,因为这些外壳对象原本是用来在脚本语言中使用的,例如JScript或者Visual Basic。如下图所示:

对于每个窗口,我们可以获取其窗口句柄并判断它是否是我们想要的那个,代码如下图所示:

现在,我们已经通过IWebBrowserApp接口获取了文件夹,接下来我们需要获取顶层的外壳浏览器窗口了。可以通过查询SID_STopLevelBrowser服务并获取IShellBrowser接口,如下图所示:

从接口IShellBrowser中,我们可以通过QueryActiveShellView方法来获取当前外壳视图,如下图所示:

当然了,我们真正需要的是一个IFolderView接口,它是一个自动化对象,其中包含了我们需要的所有信息,如下图所示:

现在,一切准备工作已经完成了,你希望从IFolderView接口中获取什么样的信息呢?
   获取一下IShellFolder视图浏览位置如何?我们需要使用IPersistFolder2接口的GetCurFolder方法来做到这一点。GetFolder方法可以让我们能否访问到这个文件夹对象。(在大多数情况下,我们真正需要的就是这个IShellFolder接口,因为我们可以从这个接口中获取很多有用的信息),如下图所示:

为了显示出结果,我们这里使用了一个转换,将pid1转换为实际的文件路径,如下图所示:

还有上面其他的可以做的呢?哦,对了,我们可以看看当前选中的文件对象,如下图所示:

接下来,让我们显示选中文件的名称。为了做到这一点,我们需要对象的pidl和IShellFolder接口。主要是使用其Item属性,如下图所示:

(如果我们希望获取一个选中文件的集合,我们可以传递参数SVGIO_SELECTION到Item方法)

获取了对象的pidl之后,接下来,我们需要获取一下IShellFolder接口:

然后,我们通过使用GetDisplayNameOf方法来获取对象的显示名称,如下图所示:

我们可以使用StrRetToBuf函数来将STRRET结构体转换为一个字符串缓冲区:

是时候将以上所有代码片段集合在一起了,下面的代码,看起来有些丑陋,因为我将它们放到了一个巨大的函数中,而没有使用子函数调用。在实际的工程中,我还是会倾向于将它们封装成一个一个的帮助函数,这样就比较容易阅读和维护。
   完整版代码如下图所示:

大功告成,让我们来看看如何调用这个大型函数并显示出结果:

执行我们的例子程序,并将它放置到一边,然后打开一个资源管理器窗口并观察我们的程序的输出结果。

总结

读到这里的读者,我希望你可以明白我的意思:一个大型功能中的所有功能代码,实际上都是已经有了,只是你需要想办法将它们正确的组合到一起。从上面的代码中,我们可以看到,每一项子功能都不是很复杂,但是将它们以一种有趣的方式组合在一起,就需要花费些功夫了。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
   本文来自:《Querying information from an Explorer window》

最近我写了个东西

正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
   我想:你值得拥有。

(0)

相关推荐

  • 为PEr添加多种查看文件方式

    正常系统文件查看可以有很多种方式,什么“缩略图”、“图标”等这些,想不想在WinPE下也有这些功能呢?下面就跟着来添加这一功能吧。 用regedit挂载DEFAULT,修改注册表[SoftwareMi ...

  • xp系统怎么打开设备管理器

    电脑才装好系统,需要打开设备管理器查看电脑驱动的安装情况,那么该如何快捷的打开设备管理器呢? 方法1 01 这个方法很简单,方便快捷,只是需要记住命令 点击[开始]-->[运行],打开运行窗口. ...

  • Win7用Aero Flip 3D查看文件

    微软开发Vista系统时引入了Aero Flip 3D,使用 Windows Flip 3D,可以快速预览所有打开的窗口(例如,打开的文件、文件夹和文档)而无须单击任务栏。 Flip 3D 在一个“堆 ...

  • linux如何查看文件夹大小

    linux操作系统由于其开源免费逐渐流行开来,现在很多用户都开学习和使用linux操作系统,由于它跟我们所熟悉的windows操作系统有很大的差别,因此很多人在使用初期都不适应,不知道如此操作,就连查 ...

  • win10系统电脑内如何才能在打开资源管理器时弹出此电脑窗口

    在win10系统电脑中,如果想要在打开资源管理器的时候,弹出的是此电脑窗口的话,应如何设置呢?接下来就由小编来告诉大家.具体如下:1. 第一步,打开电脑并在桌面上找到此电脑图标,双击打开.2. 第二步 ...

  • win7系统如何打开资源管理器窗口

    电脑是现在十分常用的工具,部分用户仍然在使用win7系统,有些人不知道如何打开资源管理器窗口,接下来小编就给大家介绍一下具体的操作步骤.方法一:在开始菜单中打开Windows资源管理器1. 首先第一步 ...

  • win7系统快捷键Win+E不能打开资源管理器的解决方法

    不管是在玩电脑还是玩游戏,快捷键已经被大多用户所使用。但是今天随缘小编用WIN+E快捷键打不开资源管理器,这是怎么回事? win7系统Win+E快捷键不能打开资源管理器修复教程: 第一步、同时按下Wi ...

  • xp怎么打开资源管理器

    xp怎么打开资源管理器 1、快捷键:用快捷键打开资源管理器也挺方便的,只要同时按下键盘的Win+E两个键既可。 2、运行命令:首先按Win+R键打开运行窗口,然后输入explorer.exe后回车即可 ...

  • Win10如何禁止插入硬盘自动打开资源管理器

    Win10如何禁止插入硬盘自动打开资源管理器