利用delphi编写windows外壳扩展

对于操作系统原理比较了解的朋友都会知道,一个完备的操作系统都会提供了一个外壳(shell),以方便普通的用户使用操作系统提供的各种功能。windows(在这里指的是windows 95\windows nt4.0以上版本的操作系统)的外壳不但提供了方便美观的gui图形界面,而且还提供了强大的外壳扩展功能,大家可能在很多软件中看到这些外壳扩展了。例如在你的系统中安装了winzip的话,当你在windows explore中鼠标右键点击文件夹或者文件后,在弹出菜单中就会出现winzip的压缩菜单。又或者bullet ftp中在windows资源管理器中出现的ftp站点文件夹。windows支持七种类型的外壳扩展(称为handler),它们相应的作用简述如下: 

(1)context menu handlers:向特定类型的文件对象增添上下文相关菜单;

(2)drag-and-drop handlers用来支持当用户对某种类型的文件对象进行拖放操作时的ole数据传输;

(3)icon handlers用来向某个文件对象提供一个特有的图标,也可以给某一类文件对象指定图标;

(4)property sheet handlers给文件对象增添属性页(就是右键点击文件对象或文件夹对象后,在弹出菜单中选属性项后出现的对话框),属性页可以为同一类文件对象所共有,也可以给一个文件对象指定特有的属性页;

(5)copy-hook handlers在文件夹对象或者打印机对象被拷贝、移动、删除和重命名时,就会被系统调用,通过为windows增加copy-hook handlers,可以允许或者禁止其中的某些操作;

(6)drop target handlers在一个对象被拖放到另一个对象上时,就会被系统被调用;

(7)data object handlers在文件被拖放、拷贝或者粘贴时,就会被系统被调用。

windows的所有外壳扩展都是基于com(component object model) 组件模型的,外壳是通过接口(interface)来访问对象的。外壳扩展被设计成32位的进程中服务器程序,并且都是以动态链接库的形式为操作系统提供服务的。因此,如果要对windows 的用户界面进行扩充的话,则具备写com对象的一些知识是十分必要的。 由于篇幅所限,在这里就不介绍com,读者可以参考微软的msdn库或者相关的帮助文档,一个接口可以看做是一个特殊的类,它包含一组函数合过程可以用来操作一个对象。写好外壳扩展程序后,必须将它们注册才能生效。所有的外壳扩展都必须在windows注册表的hkey_classes_root\clsid键之下进行注册。在该键下面可以找到许多名字像{0000002f-0000-0000-c000-000000000046}的键,这类键就是全局唯一类标识符(guid)。每一个外壳扩展都必须有一个全局唯一类标识符,windows正是通过此唯一类标识符来找到外壳扩展处理程序的。

在类标识符之下的inprocserver32子键下记录着外壳扩展动态链接库在系统中的位置。与某种文件类型关联的外壳扩展注册在相应类型的shellex主键下。如果所处的windows操作系统为windows nt,则外壳扩展还必须在注册表中的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ShellExtensions\Approved主键下登记。编译完外壳扩展的dll程序后就可以用windows本身提供的regsvr32.exe来注册该dll服务器程序了。如果使用delphi,也可以在run菜单中选择register activex server来注册。 

时间: 2024-12-31 02:55:54

利用delphi编写windows外壳扩展的相关文章

windows-软件Visual C++ 6怎么利用MFC编写Windows控制台应用程序,帮忙补下代码

问题描述 软件Visual C++ 6怎么利用MFC编写Windows控制台应用程序,帮忙补下代码 过程步骤: 新建一个名称为MFCConsole的工程,工程的类型是Win32 Console Application,并且选择An empty project.完成之后插入一个C++源文件,文件名为MFCConsole.cpp,并输入如下代码. 程序.MFCConsole.cpp 这是书上代码. #include #include #include CWinApp theApp; int _tma

由ATL想起的外壳扩展编程(一)

好久没有给VC知识库发稿了,实在不好意思,由于前段时间实在太忙所以一直没有时间闲下心来写点东西,期间也有不少朋友给我来信讨论问题,我很感谢大家对我的支持,我欢迎大家继续来信,共同交流,共同进步!这次我想和大家一起讨论一下 Windows 的 Shell 扩展编程,首先在阅读以下内容之前我还是推荐大家看一下<COM技术内幕>这本大作,不过即使您没有有关的基础知识其实也是无所谓的,因为以下讲解是傻瓜式讲解. 开发环境 Windows Professional 2000 Microsoft Visu

用Delphi编写可被其它语言调用的DLL

在所开以的应用软件中,有时我们对某些文件进行拷贝(如对数据库进行备份.制作安装程序),但是常用的一些语言却没有提供可直接进行文件拷贝的过程或函数.为此,我曾利用Delphi编制了可提供文件拷贝过程的动态连接库Copy.dll,其输出过程为CopyFile.由于DLL具有简化编程.运行速度快等诸多优点,且不受编程语言的限制, 用Delphi编写的Copf.dll同样被VB.VC等面向对象语言进行静态或动态调用,人而方便地在程序中实现文件拷贝. 附源程序如下: library copf; uses

用Delphi编写数据报存储控件

一.概述 在用Delphi编写数据库程序时,经常涉及到数据的导入和导出操作,如:将大型数据库中的数据存储为便携文件,以便于出外阅读:将存储在文件中的数据信息,导入到另外的数据库中:而且,通过将数据库中的数据存储为数据文件,更便于程序内部和程序间交换数据,避免通过内存交换数据的烦琐步骤,例如在笔者编写的通用报表程序中即以该控件作为数据信息传递的载体. 二.基本思路 作为数据报存储控件,应能够存储和读入数据集的基本信息(如:字段名,字段的显示名称,字段的数据类型,记录数,字段数,指定记录指定字段的当

利用VC++编写Windows95的CPL组件

控制面板是Windows 95 的控制中心,通过它可以完成添加新硬件设备.改变桌面设置.配置网络协议等多项工作.在Windows 95 中,控制面板通常有20 多个组件,我们只要用鼠标双击任一组件的图标,就会弹出一个对话框,对话框包含有设置一些系统参数的选项,这些参数的绝大多数都存放在Windows 95 的注册表中. ---- 控制面板的主程序是CONTROL.EXE,它在启动时自动Winndows\System 目录下查找并调入文件扩展名为CPL 的控制面板组件.控制面板组件是可以扩充的,一

利用LoadRunner编写socket性能测试脚本

一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socket概述 socket是操作系统中I/O系统的网络延伸部分,它扩展了操作系统的基本I/O到网络通信,使进程和机器之间的通信成为可能.如果想完全地理解socket在Loadrunner中如何工作的,熟悉一些关于它的历史会很有帮助. 当前常用的socket,最早起源于BSD UNIX类的操作系统.在UNIX系统上,比如BSD,把对网络的支持加入操作系统,以一

手把手教你编写基于PHP扩展库的后门教程

0x00 前言 今天我们将讨论编写基于PHP扩展库的后门.通常来说,大部分入侵者都会在脚本中留下自定义代码块后门.当然,这些东西很容易通过源代码的静态或动态分析找到. 利用PHP扩展库的好处显而易见: 1很难寻找 绕过disable_functions选项 有能力控制所有的代码 访问代码执行的API 但是我们需要有编辑PHP配置文件的能力. 0x01 细节 //[译者注:用linux两条命令搞定了,何必windows费这么大劲] 作为例子,我会用Windows来写.写扩展我用的Visual St

利用Delphi实现系统状态栏图标

利用Delphi实现系统状态栏图标   下面以一个具体的例子,详细介绍一下利用Delphi实现系统状态栏图标的步骤和方法. 1.创建一个应用程序,在主窗体上增加一个TpopupMenu组件.并为该弹出选单组件增加选单项Exit,标题为"退出". 2.在Uses中添加ShellAPI,因为在系统状态栏中增加图标时需调用ShellAPI中的函数 Shell_NotifyIconA.该函数需要两个参数,其中一个是TnotifyIconDataA结构,需在主窗体中增加TnotifyIconDa

【转】Windows Shell扩展编程傻瓜手册大全:上下文菜单扩展

引用自:http://blog.163.com/yesaidu@126/blog/static/51819307200861853827582/ Part I: A step-by-step tutorial on writing shell extensions 第一节:Windows shell扩展初步:上下文菜单扩展   作者:Michael Dunn 译者:yesaidu   源代码下载:1       2   目录 ● README ● 系列绪言 ● 第一部分绪言 ● 从AppWiza