C#語(yǔ)言開(kāi)發(fā)Windows Shell擴(kuò)展
C#語(yǔ)言有很多值得學(xué)習(xí)的地方,這里我們主要介紹C#語(yǔ)言開(kāi)發(fā)Windows Shell擴(kuò)展,包括介紹結(jié)構(gòu)聲明等方面。
.NET平臺(tái)是微軟公司推出的作為未來(lái)軟件運(yùn)行和開(kāi)發(fā)的環(huán)境,C#是微軟力薦的在.NET平臺(tái)下開(kāi)發(fā)應(yīng)用軟件的***語(yǔ)言。本文將討論在.NET環(huán)境下如何使用C#語(yǔ)言開(kāi)發(fā)Windows Shell擴(kuò)展問(wèn)題。如今Windows家族已發(fā)展到XP世代了,想必每個(gè)程序員都對(duì)Shell Extension不會(huì)感到陌生吧,在這里我不想花太多的時(shí)間介紹Shell Extension的原理知識(shí),本文中將通過(guò)一個(gè)實(shí)例介紹用C#創(chuàng)建一個(gè)Shell Extension,在此過(guò)程中也會(huì)簡(jiǎn)單介紹一些Shell Extension的原理知識(shí)。
本實(shí)例實(shí)現(xiàn)一個(gè)ShellExecuteEx Win32調(diào)用的鉤子操作,Windows Explorer常常會(huì)用到這個(gè)調(diào)用,如打開(kāi)、編輯、打印等等Shell操作都要用到這個(gè)調(diào)用。在Windows注冊(cè)表HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks項(xiàng)下安裝了所有實(shí)現(xiàn)Shell擴(kuò)展的組件信息。當(dāng)Windows Explorer執(zhí)行Shell操作前,先在注冊(cè)中查找到已注冊(cè)的Shell擴(kuò)展組件,并將其實(shí)例化,每個(gè)Shell擴(kuò)展組件必須至少實(shí)現(xiàn)了IShellExecuteHook接口,此接口提供了一個(gè)Execute()函數(shù),Explorer將通過(guò)組件實(shí)例對(duì)象調(diào)用Execute()函數(shù),如此函數(shù)返回為S_FALSE繼續(xù)后面的操作,如返回S_OK則停止后面的所有操作。根據(jù)以上原理,本實(shí)例要實(shí)現(xiàn)使用C#語(yǔ)言開(kāi)發(fā)Windows Shell擴(kuò)展。
結(jié)構(gòu)聲明
在Execute()方法中有一個(gè)SHELLEXECUTEINFO結(jié)構(gòu)體參數(shù)sei,接下來(lái)要聲明結(jié)構(gòu)體:
- [StructLayout(LayoutKind.Sequential)]
- public class SHELLEXECUTEINFO {
- public int cbSize;
- public int fMask;
- public int hwnd;
- [MarshalAs(UnmanagedType.LPWStr)]
- public string lpVerb; /* 動(dòng)作,如edit,open,print... */
- [MarshalAs(UnmanagedType.LPWStr)]
- public string lpFile; /* 根據(jù)lpVerb的值而定,常為文件名 */
- [MarshalAs(UnmanagedType.LPWStr)]
- public string lpParameters; /* 參數(shù)字符串 */
- [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;
- }
【編輯推薦】