Windows+Shell编程
通过COM技术实现Windows Shell编程
新浪首页 >科技时代 >正文返回打印通过C O M技术实现W i n d o w s S h e l l编程(图)h t t p://w w w.s i n a.c o m.c n2005年12月22日 07:39 天极y e s k y在W i n d o w s环境下,不论是使用V i s u a l C++还是D e l p h i或是其他一些软件开发工具开发的应用程序,尽管存在着差别,但有一点是相同的:都是运行于W i n d o w s操作系统之下的。
在程序开发过程中也经常要在自己的应用程序中加入一些W i n d o w s系统本身就有的功能,比如文件的拷贝、删除、查找以及运行程序等等。
而这些功能在W i n d o w s操作系统下都是具备的,显然如果能直接从系统中调用这些功能将不仅仅减少程序的大小和开发人员的工作量,而且由于是直接通过操作系统来完成这些功能,将会大大减小这部分程序出现异常错误的概率。
W i n d o w s系统虽说也存在不少错误,但常用功能的错误还是比较少的,而且通过补丁程序可以更低限度减少系统错误,因此程序员可以将调试检错的注意力放在应用程序的其他地方,对于调用系统功能这部分代码则可以不必投入太大的精力去调试,因为这部分调试的工作在操作系统发布的时候就已经由微软做好了。
本文通过外壳编程,实现了搜寻文件、运行程序、控制工具条、最大最小化窗口的功能,程序的运行界面如图一所示:图一、W i n d o w s外壳编程序界面效果图一、实现方法前面所说的直接使用W i n d o w s操作系统部分功能的编程方法就是针对W i n d o w s操作系统外壳的编程,可以通过对操作系统提供的几个编程接口对操作系统的部分功能进行调用,甚至可以按照自己的意图在应用程序中对部分功能进行修改、扩展。
但这方面的资料介绍不是特别多,讲的也大都语焉不详,而且用通常的编程方法去进行外壳编程是非常麻烦的,动辄就要对相关的结构对象进行设置,而这样的结构里的数据成员少则十来个多则几十个,因此配置起来非常烦琐,下面就以一个比较简单的外壳操作--拷贝文件进行举例说明: ……S H F I L E O P S T R U C T F i l e O p;//外壳的文件操作结构F i l e O p.h w n d=m_h W n d;//设置句柄//设置操作方式,拷贝用F O_C O P Y,删除用 F O_D E L E T EF i l e O p.w F u n c=F O_C O P Y;F i l e O p.p F r o m=m_s o u r c e;//源文件路径F i l e O p.p T o=m_d e t e c t;//目标文件路径F i l e O p.f F l a g s=F O F_A L L O W U N D O;//允许恢复F i l e O p.h N a m e M a p p i n g s=N U L L;F i l e O p.l p s z P r o g r e s s T i t l e=s t r T i t l e;//设置标题S H F i l e O p e r a t i o n(&F i l e O p);//执行外壳拷贝i f(F i l e O p.f A n y O p e r a t i o n s A b o r t e d)//监测有无中止T R A C E("A n O p e r a t i o n w a s a b o r t e d!!!\n");……上述代码实现起来虽然效果还是不错的,但然实现起来却是比较麻烦的,这仅仅是一个比较简单的外壳操作,对于一些比较复杂的外壳操作比如系统托盘、任务条等等的编程,更是尤为严重,而且象此类编程,M F C里并没有提供封装好的程序类库,提供的只有系统的W i n A P I应用程序接口,因此在程序开发过程中往往会有一种在进行S D K编程的感觉。
windows shell编程指南与实例
windows shell编程指南与实例Windows Shell是Windows操作系统中的一个重要组件,它可以让用户通过命令行界面与操作系统进行交互。
本文将为读者介绍Windows Shell编程的基本知识和实例,帮助读者更好地理解和使用Windows Shell。
## 一、Windows Shell简介Windows Shell是Windows操作系统的用户界面,它提供了一种与操作系统进行交互的方式。
在Windows系统中,用户可以通过Shell来执行命令、管理文件和目录、配置系统等操作。
Windows Shell有多种版本,包括命令提示符(Command Prompt)和Windows PowerShell等。
## 二、Windows Shell编程基础### 1. 命令提示符命令提示符是Windows Shell的一种基本形式,它提供了一种简单的命令行界面,用户可以直接在命令提示符窗口中输入命令并执行。
下面是一些常用的命令提示符命令:- `dir`:显示当前目录下的文件和子目录。
- `cd`:切换当前目录。
- `mkdir`:创建新目录。
- `del`:删除文件。
- `copy`:复制文件。
### 2. Windows PowerShellWindows PowerShell是Windows操作系统的高级命令行工具,它提供了更强大和灵活的功能。
与命令提示符不同,Windows PowerShell支持使用脚本语言编写批处理脚本,可以实现更复杂的操作。
下面是一个简单的Windows PowerShell脚本示例:```$files = Get-ChildItem -Path "C:\Folder" -Recurse -File foreach ($file in $files) {if ($file.Length -gt 1024) {Write-Host "$($) is larger than 1KB."}}```上述脚本使用`Get-ChildItem`命令获取指定目录下的所有文件,并遍历每个文件,如果文件大小大于1KB,则输出文件名。
打造Windows下自己的ShellCode
打造Windows下自己的ShellCode适合读者:漏洞分析员、黑迷前置知识:汇编阅读能力,漏洞调试基本步骤,VC使用方法WTF:这几次的菜鸟版EXP系列文章都是重点讲解溢出编程的原理和思路,包括漏洞的定位,利用构造以及遇到限制时ShellCode的编码技巧等,但对ShellCode本身的编写,特别是Windows 环境下适合读者:漏洞分析员、黑迷前置知识:汇编阅读能力,漏洞调试基本步骤,VC使用方法WTF:这几次的菜鸟版EXP系列文章都是重点讲解溢出编程的原理和思路,包括漏洞的定位,利用构造以及遇到限制时ShellCode的编码技巧等,但对ShellCode本身的编写,特别是Windows环境下ShellCode的初步编写,却很少提及。
在文章中都是说发扬“拿来主义”,看准外面现成的ShellCode,直接拿来用,对不合规范的地方稍微改改就成——其实我们是有策略的,试想一来就一大堆汇编,初学者不晕就懵,不被吓跑才怪,所以前期重点放在激发大家的兴趣上。
但作为一个菜鸟,在兴趣激起来后,毕竟要进入到ShellCode的编写中。
一是因为Exploit很大的乐趣就在于ShellCode的编写,二是明白了ShellCode的编写,才能更好的使用和改进外面的代码。
那,我们开始……打造Windows下自己的ShellCode文/图王炜/ww0830为了帮助初学者了解ShellCode的编写,并能一步一步操作得到自己的ShellCode,因此将Windows下ShellCode的编写过程作详细的介绍,以利于像我一样的菜鸟,最终能够写出简单的但却是真实的ShellCode;而进一步高级的ShellCode的编写,也会在系列后面的文章中一步一步的演示的,希望大家会发现,Exp真好,ShellCode最美妙!ShellCode简介和编写步骤从以前的文章和别人的攻击代码中可以知道,ShellCode是以“\xFF\x3A\x45\x72……”的形式出现在程序中的,而Exploit的构造就是想方设法地使计算机能转到我们的ShellCode上来,去执行“\xFF\x3A\x45\x72……”――由此看出,ShellCode才是Exploit攻击的真正主宰(就如同独行者是我们文章的主宰一样)。
windows shell扩展编程 具体案例
Windows Shell 扩展编程允许在 Windows 资源管理器中添加自定义功能或修改资源管理器的行为。
这可以包括添加上下文菜单、自定义图标、属性页等。
下面是一个简单的 Windows Shell 扩展编程案例,展示如何创建一个上下文菜单项。
Windows Shell 扩展编程案例:添加上下文菜单项在这个案例中,我们将创建一个简单的上下文菜单项,用于在资源管理器中显示选定文件的路径。
步骤:1.创建 Shell 扩展 DLL 项目:使用 Visual Studio 创建一个 DLL 项目,并选择 "ATL Project" 模板。
2.实现 Shell 扩展接口:打开Class View,在SimpleObject类中添加IShellExtInit和IContextMenu接口。
3.实现 IShellExtInit 接口:在Initialize方法中获取选中文件的路径。
4.实现 IContextMenu 接口:在QueryContextMenu方法中添加上下文菜单项。
5.编译和注册 DLL:编译项目,并将 DLL 注册到系统中。
6.在资源管理器中测试:选择一个文件,右键单击,应该能够看到添加的上下文菜单项。
示例代码:以下是CShellExtension类的简化实现:实现细节和功能强大的 Windows Shell 扩展可能更加复杂,取决于的需求。
可能需要参考 Microsoft 的文档和示例代码以获取更多详细信息。
请注意,Windows Shell 扩展编程涉及 COM 编程和与 Windows Shell 接口的交互,需要小心处理资源和遵循 Microsoft 的最佳实践。
Windows Shell 编程
Windows Shell 编程第一章Windows Shell是什么一个操作系统外壳的不错的定义是它是一个系统提供的用户界面,它允许用户执行公共的任务,如访问文件系统,导出执行程序,改变系统设置等。
MS-DOS有一个扮演着这个角色。
然而Windows已经有了图形界面环境,他的外壳程序也就必然是图形方式的。
在Windows95以前,默认的Windows Shell就是程序管理器。
程序管理器是一个中央控制台,从那里你可以启动应用程序,重排和重组图标,执行新任务。
换句话说,程序管理器就像他的名字提示的那样管理所有集中在Windows大伞之下的程序。
现在对应程序管理器的是文件管理器,它是一个专门为维护文件系统而设计的工具。
随着Windows95的出现,探测器取代了这两个老工具,并集成了二者的功能,如果你愿意,你仍能发现文件管理器仍然深深地隐藏在Windows系统目录中。
然而,由于用户友善性方面比他的后继者差,现今已经很少使用了。
一般错误的概念认为,探测器就是一个程序,当你需要通过点击“我的计算机”或右击“开始”按钮来浏览文件系统时这个程序启动。
事实上,探测器总是启动和运行着的,从引导开始一直到你关闭计算机。
直觉是“探测器”实际上就是新概念下的窗口。
探测器是一个可执行模块(explorer.exe),它实现了Windows外壳功能。
在这一章中,主要是介绍外壳和探测器,更精确地讲是Shell的组成部分探测器结构Shell的组成部分Shell由许多不同的部分组成,现在我们就从最显而易见的桌面和任务条开始。
从概念上讲,桌面是所有Windows Shell对象的父对象,即宿主对象。
就实现方式而言,桌面是一个系统定义窗口类的特殊窗口(命名为#32769),并且是所有窗口的祖先窗口。
那些导出应用的顶层窗口一般而言都是桌面的子窗口。
在这些子窗口中有一个有趣的窗口子树,它的根是“程序管理器”。
你可以用CV++带的工具Spy++来检查窗口栈中打开的窗口。
Windows Shell扩展编程完全指南
第一节一步步教你如何编写Shell扩展所谓的Shell扩展就是能够添加某种功能到Windows Shell的COM对象。
Windows里有着各种各样的扩展,但关于Shell扩展的原理以及如何编写Shell扩展的文档却很少。
如果你想深入地了解Shell各方面的细节,我特别推荐Dino Esposito的著作《Visual C++ Windows Shell Programming》。
但对于那些没有这本书的,或只对Shell扩展本身感兴趣的朋友,我写了这个编程指南希望能够帮助你理解怎样编写Shell扩展。
该指南假设你理解COM和A TL的基本原理及应用。
第一节对Shell扩展进行了概括性的介绍, 并给出了一个上下文菜单的扩展以引起你对以后各章的兴趣.但Shell扩展到底是什么玩意呢?"Shell扩展"从字面上分两个部分,Shell与Extension。
Shell指Windows Explorer, 而Extension则指由你编写的当某一预先约定好的事件(如在以.doc为后缀的文件图标上单击右键)发生时由Explorer调用执行的代码。
因此一个Shell扩展就是一个为Explorer添加功能的COM对象。
Shell扩展是个进程内服务器(运行在Explorer进程内),它实现了一些接口来处理与Explorer 的通信。
ATL在我看来是设计Shell扩展最简单最快捷的方法,如果没有它,你就不得不一遍又一遍地编写繁琐的QueryInterface() 及AddRef()代码.另外,在Windows NT 和2000上调试Shell扩展相对比较容易一些,这我以后会讲到的。
Shell扩展有很多种类型,每种类型都在各自不同的事件发生时被调用运行,但也有一些扩展的类型和调用情形是非常相似的。
现在你可能想知道Shell扩展到底是什么样的. 如果你安装了WinZip(有谁没装的吗?), 它就包含了多种的Shell扩展,其中也就有上下文菜单扩展.下图是WinZip 8 为压缩文件对象添加的定制菜单项:WinZip 编写了添加菜单项的代码, 提供了浏览器状态栏上的菜单项帮助提示, 并在用户选择一个菜单命令时执行相应的操作。
windows shell 正则
windows shell 正则Windows Shell(也称为命令提示符或PowerShell)是Windows操作系统中用于执行命令和脚本的环境。
在Windows Shell中,可以使用正则表达式来进行文本匹配和替换操作。
正则表达式是一种强大的文本匹配工具,可以用来查找特定模式的文本,例如匹配特定字符、单词或模式。
在Windows Shell中,可以使用一些特定的命令和工具来进行正则表达式的操作。
其中包括findstr命令和Select-String命令。
这些命令可以用来在文本文件或者输出中查找匹配正则表达式的内容。
例如,可以使用以下命令来在文本文件中查找包含特定模式的行:findstr /r "pattern" filename.或者在PowerShell中使用Select-String命令:Get-Content filename | Select-String "pattern"在使用正则表达式时,需要注意一些语法和规则。
例如,`.`表示匹配任意字符,``表示匹配前面的字符零次或多次,`+`表示匹配前面的字符一次或多次,`[]`表示匹配括号内的任意一个字符,`^`表示匹配行的开头,`$`表示匹配行的结尾等等。
此外,还可以使用`\`来转义特殊字符。
需要注意的是,Windows Shell中的正则表达式语法可能与其他环境有所不同,因此在使用时需要参考相应的文档和规范。
另外,正则表达式的复杂度和灵活性较高,可以实现各种复杂的文本匹配和替换操作,但也需要谨慎使用,以免出现意外的匹配结果。
总之,在Windows Shell中使用正则表达式可以帮助我们进行更加灵活和高效的文本处理操作,但需要注意语法和规则,确保正确地匹配和处理目标文本。
Windows常用shell命令大全
Windows常用shell命令大全基于鼠标操作的后果就是OS界面外观发生改变,就得多花学习成本。
更主要的是基于界面引导Pa th与命令行直达速度是难以比拟的。
另外Geek很大一部分是键盘控,而非鼠标流的。
整理Windo ws的常用S hell命令,一方面帮助深入学习Mysq l,另一方面准备尝试过渡到Li nux家族来。
一、Windows下Shell命令概述Windows的Shell命令又是Wi ndows的CMD命令。
而cmd命令又是原来MS-DOS系统保留下来。
Shell来源路径与配置对应的命令资源配置在win dows的环境变量中:Windows Shell命令是基于配置好的Path环境变量,对Shell命令在Path路径中依次从前至后搜寻到对应命名的可执行入口。
也就是可以自行编写一些Sh ell程序,C、Java、Perl等等,然后配置到环境变量中,就可以有自己的私有Shel l命令了。
大多数默认的Shell命令对应目标程序打多在―C:/Windows/‖及―C:/Windows/System32‖目录下。
而基于Wind ows的一些应用程序(如Mysql)都会向Wind ows的Pa th中配置添加自己的目录。
Shell命令的执行方式∙一般的是通过调出CMD控制台执行∙对于较熟悉的可以自行编写b at批处理S hell命令,然后保存为 .bat 后缀格式文件。
∙以Win7为例,可以通过Win键调出sea rch 窗口,快捷执行,但不能全部使用∙同时可以通过W in+R调出运行窗口来执行二、常用Shell程序命令大全∙显示连接配置 ipconfi g /all∙显示DNS缓存内容 ipconfi g /display dns∙去除DNS缓存内容 ipconfi g /flushdn s∙释放全部(或指定)适配器的由DH CP分配的动态IP地址) ipconfi g /release ∙为全部适配器重新分配IP地址 ipconfi g /renew∙刷新DHCP并重新注册DN S ipconfi g /registe rdns∙显示DHCPClass ID ipconfi g /showcla ssid∙修改DHCPClass ID ipconfi g /setclas sid关机操作shu tdown命令Shutdow n使您能够一次关闭或重新启动一台本地或远程计算机:语法::shutdow n [/i | /l | /s | /r | /a | /p | /h | /e] [/f] [/m //compute rname/] [/t XXX] [/d[p:]XX:YY/c"Comment"]参数:∙/i : 显示―远程关机对话框‖。
winxshell用法
winxshell用法
WinxShell 是一个功能强大的 Windows 系统管理工具,它提供
了许多方便快捷的功能,可以帮助用户更高效地管理和操作
Windows 系统。
下面我们来看一下 WinxShell 的用法。
1. 文件管理,WinxShell 可以方便地进行文件管理,包括复制、粘贴、剪切、重命名等操作。
通过 WinxShell,用户可以快速找到
并管理文件,提高工作效率。
2. 系统设置,WinxShell 提供了丰富的系统设置功能,用户可
以通过命令行快速打开各种系统设置界面,方便快捷地进行系统设置。
3. 系统监控,WinxShell 可以帮助用户监控系统运行情况,包
括 CPU 使用率、内存占用情况、磁盘空间等信息,帮助用户及时发
现和解决系统运行问题。
4. 脚本编写,WinxShell 支持脚本编写,用户可以编写各种批
处理脚本来完成自动化任务,提高工作效率。
总之,WinxShell 是一个非常实用的 Windows 系统管理工具,它的强大功能和方便快捷的操作方式,可以帮助用户更好地管理和操作 Windows 系统,提高工作效率。
希望大家可以充分利用WinxShell,让工作更加轻松高效。
Windows常用shell命令
Windows常⽤shell命令⼀、Windows的Shell命令⼜是Windows的CMD命令。
⽽cmd命令⼜是原来MS-DOS系统保留下来⼆、Windows Shell命令是基于配置好的Path环境变量,对Shell命令在Path路径中依次从前⾄后搜寻到对应命名的可执⾏⼊⼝三、调出cmd窗⼝执⾏(ctrl+R)以下命令四、常⽤的⼯具五、常⽤管理配置⼯具六、⾼级配置管理七、⽹络配置ipconfig命令1、显⽰连接配置 ipconfig /all2、显⽰DNS缓存内容 ipconfig /displaydns3、去除DNS缓存内容 ipconfig /flushdns3、释放全部(或指定)适配器的由DHCP分配的动态IP地址) ipconfig /release4、全部适配器重新分配IP地址 ipconfig /renew5、刷新DHCP并重新注册DNS ipconfig /registerdns6、显⽰DHCP Class ID ipconfig /showclassid7、修改DHCP Class ID ipconfig /setclassid⼋、关机操作shutdown命令shutdown [/i | /l | /s | /r | /a | /p | /h | /e] [/f] [/m //computername/] [/t XXX] [/d [p:]XX:YY/c"Comment"]1、/i : 显⽰"远程关机对话框"。
/i 选项必须是键⼊的第⼀个参数,之后的所有参数都将被忽略。
2、/l : ⽴即注销当前⽤户,没有超时期限。
不能将 /l 与 /m //computername/ 或 /t ⼀起使⽤。
3、/s : 关闭计算机。
4、/r : 关机后重新启动计算机5、/a : 取消关机操作(仅在超时期限内有效)、a 参数仅可以与 /m //computername/ ⼀起使⽤6、/p : 仅关闭本地计算机(⽽不是远程计算机),没有超时期或警告。
windows shell .sh写法
windows shell .sh写法如何在Windows Shell中编写.sh脚本?在Windows中,通常我们使用的是批处理文件(.bat)来执行一系列的命令和程序。
但是有时候,我们可能需要编写一些更加复杂和强大的脚本,这时候我们可以使用像UNIX系统中一样的Shell脚本(.sh)来实现。
虽然Windows本身并不直接支持.sh脚本,但我们可以通过一些软件来实现,比如Git Bash或Cygwin。
下面,我将详细介绍如何在Windows Shell中编写.sh脚本,让你可以更加高效地实现你的任务。
步骤一:安装Git Bash或Cygwin首先,你需要在Windows系统上安装Git Bash或Cygwin。
这两个软件是基于UNIX环境的工具集合,可以在Windows系统上运行.sh脚本。
你可以在官方网站上下载安装程序,并按照提示完成安装过程。
步骤二:创建.sh文件一旦你安装了Git Bash或Cygwin,你就可以开始编写你的.sh脚本了。
打开你喜欢的文本编辑器(比如Notepad++或Visual Studio Code),创建一个新的文件,并将其保存为以.sh作为后缀名的文件。
步骤三:添加脚本命令在.sh文件中,你可以使用各种不同的命令和语法来实现你的任务。
以下是一些常用的命令和语法的示例:1. 注释:在脚本中,你可以使用"#"来添加注释,以便解释你的脚本中的各个部分。
2. 变量:你可以使用""来定义和引用变量。
例如,你可以使用"result=PWD"来获取当前目录的路径,并将其保存在名为"result"的变量中。
3. 条件语句:你可以使用"if"和"else"语句来执行不同的命令,具体取决于一个条件是否成立。
例如,你可以使用以下语法:if [ result == "/usr/local" ]; thenecho "当前目录是/usr/local"elseecho "当前目录不是/usr/local"fi4. 循环:你可以使用"for"和"while"循环来重复执行某个命令,直到满足一定的条件为止。
shellwindows对象方法
shellwindows对象方法ShellWindows 是 Windows 系统提供的一个对象,用于与 Windows资源管理器(File E某plorer)进行交互。
它提供了一组方法和属性,可以用于控制资源管理器的行为,并获取有关打开的窗口和文件夹的信息。
在本篇文章中,将详细介绍 ShellWindows 对象的各个方法。
1. Count 方法:该方法返回当前打开的资源管理器窗口的数量。
```pythonwindows_count = shell.Windows.Count。
```2. Item 方法:该方法返回指定索引位置的资源管理器窗口对象。
```pythonwindow = shell.Windows.Item(0)```3. FindWindow 方法:该方法返回指定文件夹路径或窗口标题的资源管理器窗口对象。
可以通过指定的路径或标题来查找相应的窗口。
```pythonwindow = shell.Windows.FindWindow("C:\\", None)```4. E某plore 方法:该方法打开一个新的资源管理器窗口,并指定要显示的文件夹路径。
```pythonnew_window = shell.Windows.E某plore("C:\\")```5. Open 方法:该方法打开一个新的资源管理器窗口,并指定要打开的文件路径。
```pythonnew_window = shell.Windows.Open("C:\\test.t某t")```6. ShowBrowserBar 方法:该方法显示指定的资源管理器窗口的特定工具栏。
```pythonwindow = shell.Windows.Item(0)window.ShowBrowserBar("{EFA24E62-B078-11D0-89E4-00C04FC9E26E}", True)```7. Register 方法:该方法在资源管理器窗口中注册一个后台应用程序。
Windows Shell扩展编程傻瓜手册大全
Windows Shell扩展编程傻瓜手册大全:上下文菜单扩展Part I: A step-by-step tutorial on writing shell extensions第一节:Windows shell扩展初步:上下文菜单扩展作者:Michael Dunn译者:yesaidu源代码下载:12目录●README●系列绪言●第一部分绪言●从AppWizard开始●初始化接口●上下文菜单交互接口○更改上下文菜单○在状态栏显示拉线式(fly-by)帮助○执行用户选择○其他代码细节●注册Shell扩展●调试Shell扩展●所有的外观●版权与许可●修订历史README我想,你在行动之前,或者你在本手册的讨论板发帖之前应该阅读这份材料。
本手册最初是用VC 6编写的。
现在,VC8都出来了,我感觉是时候对本手册进行升级到VC7.1了。
(通过VC7.1自动升级VC6项目,并不一定会完全地完成代码转换;因此,VC7.1用户可能碰到这样的现象,即在转换、编译示例代码后,运行时可能没有效果或出错。
)只要我仔细检查并更新本手册,本手册将体现VC7.1的新特点。
我将会提供VC7.1项目的源码下载。
VC2005用户要注意了:VC2005体验版(Express edition)没有一同发布ATL或MFC。
既然本手册用到了ATL,有时还使用了MFC,因此,你不能用VC2005体验版来编译示例代码。
如果你正使用VC6,那么,你应该设法取得最新的平台SDK。
你可以使用WEB安装版(web install version),或者下载CAB文件或者ISO镜像包,安装它们到本地。
确认把SDK的INCLUDE和LIB目录添加到了VC的搜索路径中。
你能在PSDK程序组中找到Visual Studio Registration目录。
这是一个好主意,无论你使用VC7,还是用VC8,你都能取得最新的PSDK头文件和库文件。
VC7用户注意了:如果你没有更新PSDK,必须改变默认的INCLUDE路径。
WindowsShell编程_第十五章
第十五章SHELL扩展谈到Windows Shell编程,Shell扩展是最重要的科目之一,绝大多数商业应用的最酷特征的都是通过Shell扩展实现的,而且有许多显著的系统特征实际都是插入了扩展代码。
Shell扩展尤其令人激动的是它允许你把你的应用作为Shell的一部分来处理。
Shell扩展的另一个好处是微软正在使它变得更聪明,例如,‘查找’菜单,从Windows95 到Windows98 一直是通过Shell扩展增强的,而且增加了新条目。
还有,出现在文档关联菜单上的位图项也是使用Shell扩展增加的。
Shell扩展不仅是构建增加Shell功能模块的重要手段,而且也是使应用获得有力的Shell特征的重要方法。
在前面各章中,我们讨论了系统集成方面Win32应用程序应该做的工作。
我们探讨了关联菜单,图标,和几个其它方面技术。
然而,这些都是静态和确定的。
你可以设置或删除它们,然而,这些就是你所能做的全部:在这之间你不能做任何事情。
因此,通向完全融入Windows的应用最后一步是要考虑编写一个或多个Shell扩展的可能性。
注意,我说的“可能性”,事实上尽管Shell扩展是与Shell通讯的有力并且是灵活的方法,但是它并不是你和你的程序必须做的。
在这一章中,我们将探讨所有Shell扩展的编程技术,并且提供某些有意义的示例,主要方向是:Shell扩展是什么,怎样与它们一同工作用C++ 和ATL怎样写Shell扩展Shell扩展的排错方法使用Shell扩展定制关联菜单,图标,和属性这章的最后部分将专注于文件观察器,严格地说,它们并不是Shell扩展,但是它们有类似的内部结构。
文件观察器是一个程序模块,它可以使你能快速预览给定类型的文档而不需要借助建立和管理那种类型文件的应用。
文件观察器通常与关联菜单的‘快速观察’项关联。
Shell扩展:类型和提示Shell扩展是一个进程内COM服务器,它在探测器需要时被加载。
Shell扩展不是一个全新的概念,它只比Wondows3.1的文件管理器外挂多了一点点东西。
WindowsShell编程_第八章
第八章程序执行器在Windows95以后,文档的概念得到了进一步增强。
这隐含地说,文档不仅仅是ASCII文档,也不仅仅是Word或Excel文件,‘文档’在这里的意思是更广泛的对象,它是系统命名空间的一部分,并且有(或可能有)程序来‘打开’,‘打印’,‘探索’或‘查询’这些文档对象,换句话说,文档是一个程序可以在其上执行操作(命令串,如‘打开’,‘打印’,‘探索’)的项。
这种被执行的能力不再是具有扩展名如.exe,.com,.pif,.bat这一小类文件的特权。
自Windows95以后,所有具有关连动词的文件都变得可以执行了。
因此,单独的执行程序现在不多了。
程序就是一个文件,运行它们只是你在一个文件上执行的活动。
在寻找一种触发外部程序的方法时,我们现在有了一个选择,正确的选择显然是重要的。
这些选择经过两个中间阶段已经有了一定的进化,但是基本上还是从一个函数—WinExec()—到另一个函数—ShellExecuteEx()—的迁移。
在这一章中我们将说明启动应用的各种选择。
建立进程,打开文档等,特别,我们还解释:WinExec()和CreateProcess()之间的差异怎样用ShellExecute()和ShellExecuteEx()取代其它函数动词,文档和策略怎样用钩子客户化执行进程我们还给出代码的示例说明:怎样探测默认浏览器怎样运行程序和等待它们终止怎样显示一个文件的‘属性’对话框怎样显示‘查找’对话框怎样防止用户访问某些文件夹或运行某些应用开始先让我们看一看CreateProcess()比老的WinExec()有多先进。
从WinExec()到CreateProcess()在Windows3.1下,WinExec()是运行外部程序唯一的方法。
它有一个全世界最简单的原型—只要需要瞥一眼就能飞快地记住它。
如果想要启动程序,只需要指定它的名字和新窗口属性就可以了:UINT WinExec(LPCSTR lpCmdLine, UINT uCmdShow);lpCmdLine参数是一个NULL终止的串指针,指向包含要启动应用的命令行:程序名和它所接受的变量。
WindowsShell编程
Windows Shell 编程第九章第九章图标与Windows任务条如果问一个非程序人员Windows最好的特色是什么,得到的答案应该是系统最有吸引力的图标。
无论是Windows98现在支持的通用串行总线(USB)还是WDM(看上去有点像一个软件协会而不象普通的设备驱动体系结构的缩写),图标在人们的心目中仍然是亲切的。
你必须承认,微软总是从它的图形族群中获得最大的利益。
要了解使用图标表述菜单命令背后的的简单(或不简单)概念,你需要的不是绘制激情也不是艺术欣赏,而是应该清楚,仅使用32X32像素和16种颜色的图块做这样的表述是一个伟大的成绩。
对于微软的图标,最值得欣赏的是即使在最低分辨率(16X16像素)下,它们也是清晰的和容易理解的。
随着Windows95的发布,图标巩固了它在Windows中已有的地位。
种类也增加了—此时的图标有16X16甚至48X48的分辨率,而且系统也支持更多的颜色。
在很多商业产品中使用256色图标是很普通的。
与图标相关的另一个主题是任务条。
这并不是说任务条仅和图标有关。
而是因为从程序按钮,快速启动工具条到托盘区域,它都非常好地使用了图标。
从编程人员的观点看,最好的消息是微软引进了SHGetFileInfo()函数,它的行为我们已经在第四章中彻底地讨论过了。
无论它的名字怎样,这个函数对图标操作而言是最好的。
此外随着活动桌面和后来的Windows98的引入,系统给出了一个与任务条一同工作的招牌接口。
任务条窗口的结构(以及桌面本身的结构)有了相当的改变。
如此,在这一章中我们打算:对操作图标的函数提供一个总的说明示范说明怎样从模块中抽取图标首先给出一种方法在托盘区域放置图标,而后是管理托盘区域图标检测新任务条的布局解释关于任务条的没有说明资料的COM接口在这一章中我们还写了一个浏览包含在任何可执行文件中图标的函数,以及一段自动重启Shell的代码,更重要的是这段代码能够感觉到什么时候Shell重启动了。
WindowsShell编程
Windows Shell 编程第十章第十章Winows辅助库关于Windows98,最令人欣赏的是它确定不再使用comctl32.lib和shell32.lib的版本延续,因此IE4和活动桌面也就不再跟随发布了——在Windows98中,机器中的所有库都是一致的。
然而,我们担心这种平静的状态仅仅是暂时的,很快我们将还要建立增强控件来修补用户界面,这或许是风暴到来之前的平静。
为了使我们增强对Windows98的认识,也是为了记住程序员不堪回首的过去,在这一章中,我们将简要回顾从传统的Windows95到Windows98期间那些一直困扰我们的问题。
我们也揭示后来的库中什么是新东西。
而后讨论三组新的辅助函数,它们是关于‘回收站’,注册表和字符串处理方面的。
最后,我们探讨一个公开的秘密:一个非官方资料说明的,不被官方承认的驱动器格式化函数S HFormatDrive()。
概括地讲,我们打算讨论:微软回答的关于Shell版本的问题‘回收站’API操作字符串和注册表的辅助库的概览Windows98中还有那些是没有说明资料的特别,我们的目标是给出一种通用的技术来客户化和改进系统对话框。
然后使用这种技术解释没有官方说明资料的SHFormatDrive()函数,这是探索用编程方式格式化驱动器的一个辅助例程。
版本特色这得从Web IE3.0的第一个贝塔版说起,你会立刻注意到这个扁平的带有纹理的工具条,而后是更复杂的(可调尺寸的)和触手可及对象。
虽然并不明显地知道它们怎样工作,但它们一定是酷的,所以它们被称之为酷条(coolbar)在安装新的系统DLL副本期间,IE3.0抛出覆盖comctl32.dll的警告信息。
从此,粗心的程序员就开始使用烙有IE3.0标记的控件了(主要是coolbar),在某些场合下,建立的应用要求安装IE3. 0才能正常工作。
更糟糕的是微软很长时期以来都拒绝授权发布新版的comctl32.dll,直到最近才给出了一个自抽取模块来安装最近的Windows95和WindowsNT4.0机器上的控件库。
visual c++ windows shell程序设计 示例程序
visual c windows shell程序设计示例程序在Visual C++中,我们可以编写Windows Shell程序来创建自定义的图标和功能。
以下是一个简单的示例程序,它会在Windows任务栏上创建一个自定义的图标。
当用户单击该图标时,它会显示一个简单的消息框。
首先,我们需要包含必要的头文件,包括windows.h和shellapi.h。
```cpp#include <windows.h>#include <shellapi.h>```接下来,我们定义WinMain函数作为程序的入口点。
该函数接受四个参数:应用程序实例句柄、前一个实例句柄、命令行参数和窗口显示方式。
```cppint WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){// 注册应用程序窗口类WinRegisterClass(hInstance, "MyApp", "MyApp", 0, 0, SW_SHOWNORMAL);// 创建应用程序窗口HWND hWnd = WinCreateStdWindow(NULL,WS_OVERLAPPEDWINDOW, NULL, "MyApp", WS_VISIBLE | WS_POPUP | WS_SYSMENU, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hInstance);// 创建图标NOTIFYICONDATA nid = {0};nid.cbSize = sizeof(NOTIFYICONDATA);nid.hWnd = hWnd;nid.uID = 1;nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;nid.uCallbackMessage = WM_USER;nid.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON));strcpy_s(nid.szTip, "My App");// 注册图标Shell_NotifyIcon(NIM_ADD, &nid);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}```这个程序首先使用WinRegisterClass函数注册一个应用程序窗口类,然后使用WinCreateStdWindow函数创建窗口,并将其显示在屏幕上。
(C#)Windows Shell 外壳编程系列
(C#)Windows Shell 外壳编程系列(1-9)篇(C#)Windows Shell 外壳编程系列1 - 基础,浏览一个文件夹(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~)Windows Shell 编程,即Windows 外壳编程。
我们所看到的资源管理器以及整个桌面,都是一个Shell。
关于Windows 外壳的基本概念,我这里不做详细介绍,不了解的朋友,可以看看姜伟华的Windows外壳名字空间的浏览。
好,现在让我们从基础学起,早日做出一个强大的资源管理器软件。
(偶也是初学者,多多指教)1 - 基础,浏览一个文件夹我们知道,在win32中是以外壳名字空间的形式来组织文件系统的,在外壳名字空间里的每一个对象(注)都实现了一个IShellFolder的接口,通过这个接口我们可以直接查询或间接得到其他相关的接口。
(注:这里的对象指的是外壳名字空间中的一个节点,对象有可能是一个文件夹,有可能是一个文件,也有可能是一个虚拟文件夹,例如:我的电脑,网上邻居,控制面板等)在C#中,我们这样定义 IShellFolder 接口:using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace WinShell{[ComImport][InterfaceType(ComInterfaceType.InterfaceIsIUnknown)][Guid("000214E6-0000-0000-C000-000000000046")]public interface IShellFolder{}}当然,这个接口还没有列出细节函数。
我们要做的仅仅是从最基础开始。
首先我们必须了解,在外壳编程中,要使用 PIDL 路径代替普通路径(如果对 PIDL 不熟悉,请看Windows外壳名字空间的浏览)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这本书中首先给出所有 API 函数的解释,进一步探讨函数的原型,资料介绍的差别以及其中的 Bugs。通常我的目的是要澄清所有你在资料中遇到的含混之处。第三章到第九章涉及到特殊的 APIs 分组, 其中包含了典型的 Shell 操作,特别在第三章中讲解 SHFileOperation()函数,涉及到文件的拷贝、移 动、删除和重命名操作。第四章揭示了神秘的 SHGetFileInfo()函数,系统提供了获取文件(属性、图 标、类型和显示名)的系统信息和 Shell 信息的方法。第五章解释文件夹内部组织的叠放过程,包括设置、 浏览和象 Favorites 和 SendTo 那样的特殊文件夹。
快 捷方式和属性在第六章中介绍,其中将介绍建立和解析快捷方式和经常使用的字段。第七章则正 式进入探测器地址空间,并且从另一个角度讨论客户化问题:在探测 器不可知的情况下什么是你所能安全 操作的。特别是我们向你展示一个置换过的“开始”按钮和不同的菜单。一旦你这样做过之后,你就有了 完全控制 Windows 系统的能力了。在余下的第八和第九章中我们将讲述程序的扩张,图标和任务条,我 们将说明怎样编程加入新的具有自己的菜单的按钮到任务条中。
桌面并不是这样工作的,相反,快捷方式作为图标是由一个普通的 ListView 显示的。当然这个 ListView 有了一个不寻常的变异,但是它确实是一个 ListView,因此它也就不难从消息中获取处理对象了, 将在第九章中给出例程进行说明。
探测器结构
探测器是一个扮演着系统外壳角色的应用程序。当说到外壳扩展的时候,我们讲的就是有探测器 感知的、装入的并最终执行的代码块。
你可以用 CV++带的工具 Spy++来检查窗口栈中打开的窗口。
程序管理器保持了兼容性,在图中你可以看到,他的封装结构:程序管理器的直接下级是一个命为 SHELLDLL DefView 的窗口类,这个窗口包含了一个默认的观察对象,事实上这个窗口负责枚举标准文件 夹的内容,它总是从 ListView 控件中导出,这是一个通用的系统控件。SHELLDLL DefView 窗口包含了一 个 ListView(类名为 SysListView32)和一个标题控件(类名为 SysHeader32),标题控件仅仅用于 ListView 的报 告观察。
探测器可以被看作为一个微型的窗口开发环境。想象一下:它有自己的函数和对话框;允许写特 殊的与已存在的体系集成的应用程序;能包容应用和文档。他甚至可以解释任何活动的脚本兼容语言的脚 本(VBScript,JScript,Perl,等等)。本书中将包含所有这些特征。
扩展的切入点
随 Windows3.1一起发布的文件管理器有着非常好的旦未充分利用的特性,比如:它能够在运行时加载 DLL,执行具有特殊原形的已注册函数等。也就是说,在这个资源中有一点,其代码本身能够知晓某些活 动是由用户执行的。换句话说,文件管理器支持扩展行为,当执行特定的活动时,查找注册的扩展并装载 和运行之。
关于 DDE 接口变成与 Shell 的详细说明,建议察看资料 Internet ClientSDK 其中给出了最新的信息。 DDE 是一款较老的技术,微软已经有大量的资料说明。
任务条
主要的 Windows Shell 部件就是任务条,它实际上就是由探测器进程所拥有的一个窗口。每当你需要 终止探测器进程的时候,都将引起任务条的消失和重新显现。每当他重新显现的时候他注册一个具有不同 HWND 的新窗口。因而,就引用而言,你没有必要保留这个窗口的 HWND。任务条也是也各拥有“开始” 按钮的窗口,在托盘区域有时钟和类似按钮的控件,表示正在运行的应用。
在这一章中,主要是介绍外壳和探测器,更精确地讲是 Shell 的组成部分
探测器结构
Shell 的组成部分
Shell 由许多不同的部分组成,现在我们就从最显而易见的桌面和任务条开始。从概念上讲,桌面是 所有 Windows Shell 对象的父对象,即宿主对象。就实现方式而言,桌面是一个系统定义窗口类的特殊窗口 (命名为#32769),并且是所有窗口的祖先窗口。那些导出应用的顶层窗口一般而言都是桌面的子窗口。在 这些子窗口中有一个有趣的窗口子树,它的根是“程序管理器”。
一般错误的概念认为,探测器就是一个程序,当你需要通过点击“我的计算机”或右击“开始” 按钮来浏览文件系统时这个程序启动。事实上,探测器总是启动和运行着的,从引导开始一直到你关闭计 算机。直觉是“探测器”实际上就是新概念下的窗口。探测器是一个可执行模块(explorer.exe),它 实现了 Windows 外壳功能。
小结
这一章中我们描绘了未来各章中打算作的事情,尤其是我们试图解释: Shell 的本质和结构 各 Shell 版本之间的差异
第二章 Shell 的结构
“Shell 编程”的大伞之下有大量的 API 函数和 COM 接口。这个种类繁多的‘命令’集允许你用不同的方 法对 Windows Shell 进行编程。函数和接口并不是两种提供相同功能的等价途径,相反,它们在不同的逻辑 层上提供不同的功能。
随着 IE4.0的活动桌面和 Windows98的发布,默认的观察对象已经有了基于某些浏览器能力的变 化。在下一章中我们将更进一步讨论这些观察对象和他们的变化。
程序管理器
就象前面提到的一样,程序管理器窗口是为了兼容性而保留的。它正好演示了一个窗口应用从16位到32位 的演变过程。在 Win16环境中,与 Shell 唯一的通讯方式是通过动态数据交换(DDE)。这个层面的代码在 Windows95甚至 Windows98中还在维护。为什么呢?,为了兼容性。
我们后面在探测器外壳和命名空间扩展中见到的实际上有相同的原理。不同的完全是细节方面的 实现。文件管理器用于加载具有预定义原形的传统的 DLL 全程函数,而探测器是这一过程更加规范。尤其 是它采用 COM 接口(可以看作预定义和固定函数原型的集合)和进程内服务器(实质上的 DLL) 当然,COM 接口和进程内服务器比函数集和 DLL 更复杂,但是,这也使探测器进程比老的基于 DLL 的进 程更规范和有力。
程序管理器是一个中央控制台,从那里你可以启动应用程序,重排和重组图标,执行新任务。换 句话说,程序管理器就像他的名字提示的那样管理所有集中在 Windows 大伞之下的程序。现在对应程序管 理器的是文件管理器,它是一个专门为维护文件系统而设计的工具。
随着 Windows95的出现,探测器取代了这两个老工具,并集成了二者的功能,如果你愿意,你仍 能发现文件管理器仍然深深地隐藏在 Windows 系统目录中。然而,由于用户友善性方面比他的后继者差, 现今已经很少使用了。
第一章 Windows Shell 是什么
一个操作系统外壳的不错的定义是它是一个系统提供的用户界面,它允许用户执行公共的任务,如访 问文件系统,导出执行程序,改变系统设置等。MS-DOS 有一个 扮演着这个角色。然而 Windows 已经有了图形界面环境,他的外壳程序也就必然是图形方式的。在 Windows95以前,默认的 Windows Shell 就是程序管理器。
这个问题很有道理,简单的回答就是,为了使我们的应用根号和更丰满。但是这个回答有点过于辞令化, 我们这样做是为了使我们的模块与系统集成到一起,或者说更自动化。
本书的结构
有两种方法对外壳编程,使用 API 函数和使用 COM 接口。这两种方法既不互相独立也不相互重 叠,它们是两个不同的方向和两种不同领域,这一点我们在下一章中将进一步阐述。现在让我们直接浏览 一下个章节的内容。
第十四章集中于指导你采用 Shell 和命名空间扩展的应用和理由方面。我将揭示实际上的 Shell 集 成的应用究竟是什么和为什么说 Shell 扩展是把应用模块与系统 Shell 融合的最好方法。第十五章说明 怎样写一个 Shell 扩展来客户化关联菜单、图标和属性,以及怎样排错。第十六章概括了命名空间扩展内 容,并且包含一个例子,说明怎样加一个可展开节点到探测器的树观察中,并以文件夹的形式展示了当前 窗口的堆栈过程。
API 函数包含了用户想要在 Shell 对象上执行的基本操作,如文件和文件夹。COM 接口则给出了 扩展增强,甚至客户化各种要素对象的机会,包括 Shell 本身标准行为。用面向任务的方法对函数和对象进 行分组将给我们一个总体上观察 Shell 的机会,因此,我们仍然能够把它看作一个具有属性和方法的对象。 在这一章中我们将努力分出每一个函数和接口究竟属于哪一个功能组。这将有助于我们从大量的功能碎片 中寻找出 Shell 编程接口。
命 名空间扩展有两种形式,这要看你怎样连接。如果你用文件类型连接命名空间扩展,尽管有复 杂的代码支持,其功能上仍然等价于关联菜单的扩展。然而,如果你用 文件夹连接命名空间扩展,这个文 件夹将变成客户文件夹,你的代码将确定文件夹的内容、探测器显示的图标、子文件夹、排序、关联菜单 等。
为什么要对 Shell 编成
在这一章中,将包含有:
我们在这本书中使用的定义
Shell API 函数的功能分组
对探测器的扩展
在探测器环境中,基本上有两种类型的扩展:外壳扩展和命名空间扩展。从名字上看有点混淆, 探测器就是 Windows 的外壳,所以两种类型的扩展都可以作为外壳扩展。换句话说,外壳和命名空间扩展 二者都扩展了探测器能力。但是在他们之间有一些差别。
外 壳扩展是一种加到给定类型的所有文件上的客户行为,给定类型的文件按照客户要求显示在探 测器的观察中。如此,你可以称之为“外壳观察的扩展”。客户的行 为,如拖拽,右击关联菜单,绘制图 标或显示属性对话框等由一定数量的特殊事件触发。你可以定义这些事件的特殊处理器程序,例如你可以 确定显示给定.Bmp 文件的图标,为所有 Windows 元文件加一个预览页面到属性对话框,甚至可以在关联 菜单中增加一个可执行功能。将在十五章中给出例程。