摘要:
第十一章探索Shell我们现在将注意力从API转向Windows Shell本身。从这一章往后,我们的目标主要集中在清晰和全面的揭示探测器的工作原理和Shell命名空间的构成对象上,最后给出客户化探测器和扩展其特征和行为的示例程序。Windows Shell,也称之为探测器,是一群特殊模块的集合,这些模块一起形成了Shell的命名空间,并且给出了执行大量特殊任务的能力,例如,探测文件夹,显示特定的目录子树,装入外部模块并与它通讯等。尽管最终结果可能会有差异,只要这些对象被调用和显示,探测器总是进入后台操作。在许多情况下,探测器提供的服务都是通过命令行与给定程序通讯来进行的,因而,如果你希望探测 阅读全文
摘要:
第十章Winows辅助库关于Windows98,最令人欣赏的是它确定不再使用comctl32.lib和shell32.lib的版本延续,因此IE4和活动桌面也就不再跟随发布了——在Windows98中,机器中的所有库都是一致的。然而,我们担心这种平静的状态仅仅是暂时的,很快我们将还要建立增强控件来修补用户界面,这或许是风暴到来之前的平静。为了使我们增强对Windows98的认识,也是为了记住程序员不堪回首的过去,在这一章中,我们将简要回顾从传统的Windows95到Windows98期间那些一直困扰我们的问题。我们也揭示后来的库中什么是新东西。而后讨论三组新的辅助函数,它们是关于‘回收站’,注 阅读全文
摘要:
第九章图标与Windows任务条如果问一个非程序人员Windows最好的特色是什么,得到的答案应该是系统最有吸引力的图标。无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去有点像一个软件协会而不象普通的设备驱动体系结构的缩写),图标在人们的心目中仍然是亲切的。你必须承认,微软总是从它的图形族群中获得最大的利益。要了解使用图标表述菜单命令背后的的简单(或不简单)概念,你需要的不是绘制激情也不是艺术欣赏,而是应该清楚,仅使用32X32像素和16种颜色的图块做这样的表述是一个伟大的成绩。对于微软的图标,最值得欣赏的是即使在最低分辨率(16X16像素)下,它们也是清晰的和容易理 阅读全文
摘要:
第八章程序执行器在Windows95以后,文档的概念得到了进一步增强。这隐含地说,文档不仅仅是ASCII文档,也不仅仅是Word或Excel文件,‘文档’在这里的意思是更广泛的对象,它是系统命名空间的一部分,并且有(或可能有)程序来‘打开’,‘打印’,‘探索’或‘查询’这些文档对象,换句话说,文档是一个程序可以在其上执行操作(命令串,如‘打开’,‘打印’,‘探索’)的项。这种被执行的能力不再是具有扩展名如.exe,.com,.pif,.bat这一小类文件的特权。自Windows95以后,所有具有关连动词的文件都变得可以执行了。因此,单独的执行程序现在不多了。程序就是一个文件,运行它们只是你在一 阅读全文
摘要:
第七章侵入Shell与所有其它Win32进程一样,Shell也有其自己的内存地址空间,这是其它应用完全不可知的地址空间。为了进入这个地址空间,我们必须传递一定数量的控制点,就象我们正在跨过国家边界一样。在Windows Shell这块陆地上什么是我们感兴趣的呢,它是一个伊甸园吗,它有丰富的金矿吗,它是天堂的宝库吗?不幸,它都不是。进入Shell,只是简单地允许我们编写代码执行在Shell外面不能执行的操作。通过注入代码到一个Win32进程的地址空间,我们能够控制这个程序的行为,能够过滤它的事件,查看消息流,以及强迫它做(或不做)一定的操作。为了达到这个目的,我们可以采取几种不同的方法。有力的方 阅读全文
摘要:
第六章快捷方式的最短路径Windows Shell允许存储任何对象的引用到系统范围内的任何地点。例如,当你从一个文件夹拖拽可执行程序到另一个文件夹时,鼠标自动改变形状给出除拷贝和移动文件之外的第三种选择。除非你确定,否则可执行文件是不能拷贝或移动的,相反,每次你做这样的操作时,实际拷贝或移动的是对它的物理位置的一个引用,实际所建立的不是文件的拷贝,而是它的初始位置的连接。所有这些都是快捷方式的示例,这种东西在老版本的Windows中就已经存在—例如,程序管理器的图标就是早期的快捷方式。然而,不要弄混了,它们不是相同的,主要差别在于快捷方式具有可以指向文件对象这个更普遍的机理:不仅是可执行文件, 阅读全文
摘要:
第五章浏览文件夹我在第二章中给出了文件夹的概览和它在Windows Shell中的地位,在这一章中我们打算更详细地讨论它们。我们主要集中精力阐述涉及文件夹所有层面的Shell函数,以及保证所有操作顺利进行的潜在机理。因此,我们需要深入研究两个起着非常重要作用的概念:快捷方式和PIDLs。前者是下一章的题目,在这一章中我们将研究PIDLs,其中包括:SHBrowseForFolder()函数的用途关于PIDLs进一步的讨论,以及怎样使用PIDLs虚拟文件夹和位置怎样获得文件夹的设置我们将要论述的例子包含了一个增强版本的API函数SHBrowseForFolder(),一些使它更容易同PIDLs一 阅读全文
摘要:
第四章文件的本质以前,所有文件和目录都有一个确定的属性集:时间,日期,尺寸,以及表示‘只读的’,‘隐藏的,‘存档的’,或‘系统的’状态标志。然而,Windos95(及后来的WindowsNT4.0)出现使这些概念产生了改变,其中最重要的‘文件’变得更加广泛。现在,文件可以是任何Shell部件对象—不一定必须是文件系统的部件。文件的精确定义是,任何作为Shell命名空间部件的对象称之为文件对象。注意,在定义中所说的‘命名空间’,它不是C++的关键字。‘Shell命名空间’所指的是实际组成Shell的所有命名项的集合。它们都被显示在探测器的树观察中。并不是所有文件都是文件系统中的一个实体,比如‘打 阅读全文
摘要:
第三章操作文件我依然清楚地记得,Windows95的贝塔版出现的情形,它在朋友之间和学院中传播,好酷,全新的文件管理器,一种全图标,全彩色可客户化的界面,以及活泼的动画标识使得在文件拷贝和删除方面的操作更容易和直观。作为真正的软件狂人,我们能为一个比萨饼的奖金开始竞赛,一直以求成为第一个能够编程再造如此行为的人—即,怎样以动画方式拷贝文件。花了几个小时的时间才在一大堆新函数中找出了SHFileOperation()函数,这是一个响应动画拷贝的API函数,它也是探测器执行所有文件操作的函数。竞赛的规则之一是建立一个具有这个唯一目标功能的演示程序。在这个函数出现之后,这个问题实际上是十分简单的。事 阅读全文
摘要:
第二章Shell的结构“Shell编程”的大伞之下有大量的API函数和COM接口。这个种类繁多的‘命令’集允许你用不同的方法对Windows Shell进行编程。函数和接口并不是两种提供相同功能的等价途径,相反,它们在不同的逻辑层上提供不同的功能。 API函数包含了用户想要在Shell对象上执行的基本操作,如文件和文件夹。COM接口则给出了扩展增强,甚至客户化各种要素对象的机会,包括Shell本身标准行为。用面向任务的方法对函数和对象进行分组将给我们一个总体上观察Shell的机会,因此,我们仍然能够把它看作一个具有属性和方法的对象。在这一章中我们将努力分出每一个函数和接口究竟属于哪一个功能组。 阅读全文