摘要:
【PIDL简介】从Windows 95开始,微软公司为操作系统引入了新的外壳界面,新的外壳从根本上改变了应用程序同操作系统的结合方式,遗憾的是微软公司对于发布同外壳相关的编程信息方面显得很吝啬,可以得到的资料非常少,而且质量也不高。对于Delphi开发者来说,情况就更为严重了,因为几乎所有的Windows API 文档都是针对C/C++程序员的,但是Nothing is impossible,在本文中,我们将开始外壳编程的历险,就让我们从PIDL开始吧。编辑本段【PIDL外壳命名空间】新外壳系统中的一个核心概念就是命名空间(namespace),对于DOS来说,命名空间可以理解为就是整个文件系 阅读全文
摘要:
第十六章命名空间扩展探测器使用层次结构表述形成系统的许多对象——文件,文件夹,打印机,网络对象等等。这些对象组合定义了一个命名空间,这是一个封闭的符号或名字集合,其中任何给定的符号或名字都能成功地被唤醒。在命名空间中解析一个名字就是成功地连接给定的名字到某个它所表述的实际信息。探测器仔细地把所有这些对象收集到一起,与它们通讯,把它们的内容显示在典型的两窗框窗口中,树状观察在左侧,列表观察在右侧。我们实际所关注的是探测器是否支持插入代码到它的结构中并增加全新定制对象的接口。事实上,Windows本身就伴随一定数量的命名空间扩展,例子包括‘拨号网络’,‘我的公文包’,以及‘我的计算机’文件夹。在这 阅读全文
摘要:
第十五章SHELL扩展谈到Windows Shell编程,Shell扩展是最重要的科目之一,绝大多数商业应用的最酷特征的都是通过Shell扩展实现的,而且有许多显著的系统特征实际都是插入了扩展代码。Shell扩展尤其令人激动的是它允许你把你的应用作为Shell的一部分来处理。Shell扩展的另一个好处是微软正在使它变得更聪明,例如,‘查找’菜单,从Windows95到Windows98一直是通过Shell扩展增强的,而且增加了新条目。还有,出现在文档关联菜单上的位图项也是使用Shell扩展增加的。Shell扩展不仅是构建增加Shell功能模块的重要手段,而且也是使应用获得有力的Shell特征的 阅读全文
摘要:
第十四章设计Shell集成应用有一些工具可以使应用程序更紧密地与Shell和底层系统进行集成。也就是说,用户可以象处理系统文档和程序那样处理你的文档和程序。例如,右击文件来显示可用功能列表等。Windows为每一个文件提供默认的功能集,如‘打开…’,‘属性’,‘拷贝’等。是否能为特定的文档增加特殊功能。为此,我们必须客户化这个文档类的关联菜单。另一个应该与Shell集成的例子是:假设你的程序有建立空文档的能力,用户使用系统的‘新建’菜单项在任一文件夹上飞快地建立新文档,要想如此,就必须在系统注册表中记入一些信息。当然,这是特殊情形,作为开发人员和应用设计人员还应该重视许多其它有用的特征。在这一 阅读全文
摘要:
第十三章Windows脚本环境现在的许多开发人员以前都是在MS-DOS环境下编程的。几乎所有人都接触过批处理文件——一种基于文本命令的文件。这种文件使你能够在一个可执行命令中组合多个指令。批处理文件的语法相当简单,很容易编写。然而有些人认为批处理文件的语法过于简单。.bat文件的解释器对于识别某些基本的控制元素,如‘if’,是足够智能的,但是,对于提供现代的和功能强大的脚本环境,它就差得太远了。直到最近,Windows才给出了一个较好的机制——MS-DOS批处理文件仍然作为Windows的可执行文件机制,这就是Windows脚本环境(WSH)的引进。我们在这一章将看到WSH提供的支持要比.ba 阅读全文
摘要:
第十二章脚本Shell对象新的Windows Shell包含了丰富的新对象,这些新对象通过自动化体系提供了对Shell主要特征的完全访问能力。IE4.0在新版的shdocvw.dll中引进了这些COM新对象,并把它们作为核心部件。这些对象可以使你能编程驱动Shell和它的文件夹,并且在Internet客户SDK资料中(现在已经集成到平台SDK资料中)对这些对象有详细说明。由于这些对象是自动化服务器,因此使用VB、delphi、VC++所写的程序很容易使用它们。也可以使用脚本代码包括来自Windows脚本环境(WSH)的代码调用这些对象,下一章我们将介绍WSH。在这一章中,我们将调查Shell对 阅读全文
摘要:
第十一章探索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的机会,因此,我们仍然能够把它看作一个具有属性和方法的对象。在这一章中我们将努力分出每一个函数和接口究竟属于哪一个功能组。 阅读全文
摘要:
一个操作系统外壳的不错的定义是它是一个系统提供的用户界面,它允许用户执行公共的任务,如访问文件系统,导出执行程序,改变系统设置等。MS-DOS有一个Command.COM扮演着这个角色。然而Windows已经有了图形界面环境,他的外壳程序也就必然是图形方式的。在Windows95以前,默认的Windows Shell就是程序管理器。程序管理器是一个中央控制台,从那里你可以启动应用程序,重排和重组图标,执行新任务。换句话说,程序管理器就像他的名字提示的那样管理所有集中在Windows大伞之下的程序。现在对应程序管理器的是文件管理器,它是一个专门为维护文件系统而设计的工具。随着Windows95的 阅读全文
摘要:
文件夹浏览(SHBrowseForFolder)一.首先要为SHBrowseForFolder准备一个结构体BROWSEINFOtypedef struct _browseinfoW { HWND hwndOwner; PCIDLIST_ABSOLUTE pidlRoot; LPWSTR pszDisplayName; // Return display name of item selected. LPCWSTR lpszTitle; // text to go in the b... 阅读全文