C#语言有很多值得学习的地方,这里我们主要介绍C#语言开发Windows Shell扩展,包括介绍结构声明等方面。
.NET平台是微软公司推出的作为未来软件运行和开发的环境,C#是微软力荐的在.NET平台下开发应用软件的***语言。本文将讨论在.NET环境下如何使用C#语言开发Windows Shell扩展问题。如今Windows家族已发展到XP世代了,想必每个程序员都对Shell Extension不会感到陌生吧,在这里我不想花太多的时间介绍Shell Extension的原理知识,本文中将通过一个实例介绍用C#创建一个Shell Extension,在此过程中也会简单介绍一些Shell Extension的原理知识。
本实例实现一个ShellExecuteEx Win32调用的钩子操作,Windows Explorer常常会用到这个调用,如打开、编辑、打印等等Shell操作都要用到这个调用。在Windows注册表HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks项下安装了所有实现Shell扩展的组件信息。当Windows Explorer执行Shell操作前,先在注册中查找到已注册的Shell扩展组件,并将其实例化,每个Shell扩展组件必须至少实现了IShellExecuteHook接口,此接口提供了一个Execute()函数,Explorer将通过组件实例对象调用Execute()函数,如此函数返回为S_FALSE继续后面的操作,如返回S_OK则停止后面的所有操作。根据以上原理,本实例要实现使用C#语言开发Windows Shell扩展。
结构声明
在Execute()方法中有一个SHELLEXECUTEINFO结构体参数sei,接下来要声明结构体:
- [StructLayout(LayoutKind.Sequential)]
- public class SHELLEXECUTEINFO {
- public int cbSize;
- public int fMask;
- public int hwnd;
- [MarshalAs(UnmanagedType.LPWStr)]
- public string lpVerb; /* 动作,如edit,open,print... */
- [MarshalAs(UnmanagedType.LPWStr)]
- public string lpFile; /* 根据lpVerb的值而定,常为文件名 */
- [MarshalAs(UnmanagedType.LPWStr)]
- public string lpParameters; /* 参数字符串 */
- [MarshalAs(UnmanagedType.LPWStr)]
- public string lpDirectory; /* 路径名 */
- public int nShow;
- public int hInstApp;
- public int lpIDList;
- public string lpClass;
- public int hkeyClass;
- public int dwHotKey;
- public int hIcon;
- public int hProcess;
- }
【编辑推荐】