標籤:
轉載:http://www.xue163.com/124/6/1243914.html
1. 目錄(Directory)與檔案夾(Folder)的區別
目錄是DOS時代的產物,DOS檔案系統是以分類樹的形式將檔案組織起來的,檔案全部包含在目錄裡。任何一個檔案的全名,由“目錄名+檔案名稱”兩部分組成,目錄名則是以“根目錄+子目錄+多級子目錄...”組成,其中根目錄是以任一26個英文字母加上冒號“:”表示的盤符,目錄之間用反斜線“\”作為路徑分隔字元分隔;檔案名稱由“檔案名稱+副檔名”,副檔名以英文句點符號“.”開頭,DOS時代的檔案名稱是8.3格式,即檔案名稱由8個有效ASCII字元組成,副檔名由以句點“.”開始,跟隨3個有效ASCII字元組成。因此,任何一個檔案的全路徑名稱,都是以根目錄開始的。
到了Windows時代,則有了檔案夾的概念。每個目錄都是一個檔案夾,而盤符被稱作卷,卷也是一個檔案夾。檔案名稱則分為長檔名和短檔案名稱(8.3格式)兩個,其標記法上也有區分,這是為了在相容8.3格式,並增強檔案名稱的表示方式。但是Windows目前版本的完整檔案名稱表示時最大長度限定為260個字元,路徑名表示時最大長度限制為248個字元(註:微軟試圖在新的作業系統上突破路徑260字元限制,一部分Windows SDK的擴充庫中提供了所謂的BigPath)。重要的是,檔案夾還讓操作者理解了“案頭”、“我的電腦”(NT 6.0 之後被叫作“電腦”)、“網路位置”(NT6.0 之後被叫作“網路”)、“控制台”、“印表機和傳真”等概念,沒錯,他們都是檔案夾。
需要瞭解更多針對Windows Shell以及檔案夾的編程手段,閱讀《Windows外殼名字空間的瀏覽 》 。
2.特殊檔案夾
正如前面所說的,“案頭”、“我的電腦”或者說“電腦”等都是檔案夾。像這樣的檔案夾我們可以想到很多,它們是Windows系統的特殊檔案夾(SpecialFolder)。把它們寫成Windows API的特殊檔案夾標識符列表“CSIDL(constant special item ID list) ”,有以下多個:
public enum CSIDL
{
ADMINTOOLS = 0x30,
ALTSTARTUP = 0x1d,
APPDATA = 0x1a,
BITBUCKET = 10,
CDBURN_AREA = 0x3b,
COMMON_ADMINTOOLS = 0x2f,
COMMON_ALTSTARTUP = 30,
COMMON_APPDATA = 0x23,
COMMON_DESKTOPDIRECTORY = 0x19,
COMMON_DOCUMENTS = 0x2e,
COMMON_FAVORITES = 0x1f,
COMMON_MUSIC = 0x35,
COMMON_PICTURES = 0x36,
COMMON_PROGRAMS = 0x17,
COMMON_STARTMENU = 0x16,
COMMON_STARTUP = 0x18,
COMMON_TEMPLATES = 0x2d,
COMMON_VIDEO = 0x37,
CONTROLS = 3,
COOKIES = 0x21,
DESKTOP = 0,
DESKTOPDIRECTORY = 0x10,
DRIVES = 0x11,
FAVORITES = 6,
FLAG_CREATE = 0x8000,
FONTS = 20,
HISTORY = 0x22,
INTERNET = 1,
INTERNET_CACHE = 0x20,
LOCAL_APPDATA = 0x1c,
MYDOCUMENTS = 12,
MYMUSIC = 13,
MYPICTURES = 0x27,
MYVIDEO = 14,
NETHOOD = 0x13,
NETWORK = 0x12,
PERSONAL = 5,
PRINTERS = 4,
PRINTHOOD = 0x1b,
PROFILE = 40,
PROFILES = 0x3e,
PROGRAM_FILES = 0x26,
PROGRAM_FILES_COMMON = 0x2b,
PROGRAMS = 2,
RECENT = 8,
SENDTO = 9,
STARTMENU = 11,
STARTUP = 7,
SYSTEM = 0x25,
TEMPLATES = 0x15,
WINDOWS = 0x24
}
在使用Windows API函數編寫Shell程式時,通過這樣的枚舉或者常量,可以得到這些檔案夾的詳細資料。當然,我不是來講解怎樣寫代碼的,下面是一些有趣的內容。
3.特殊檔案夾標識符
當你在閱讀《妙用Windows神秘的類別識別項,{20D04FE0-3AEA-1069-A2D8-08002B30309D}》 這篇文章之前,我願意列舉一個表現特殊檔案夾與其對應的標識符表格。
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->
檔案夾
類別識別項 CLSID
我的電腦(電腦)
{20D04FE0-3AEA-1069-A2D8-08002B30309D}
控制台
{21EC2020-3AEA-1069-A2DD-08002B30309D}
印表機和傳真
{2227A280-3AEA-1069-A2DE-08002B30309D}
字型
{D20EA4E1-3957-11d2-A40B-0C5020524152}
掃描器和網路攝影機
{E211B736-43FD-11D1-9EFB-0000F8757FCD}
網路連接
{7007ACC7-3202-11D1-AAD2-00805FC1270E}
管理工具
{D20EA4E1-3957-11d2-A40B-0C5020524153}
計劃任務
{D6277990-4C6A-11CF-8D87-00AA0060F5BF}
Web 資料夾
{BDEADF00-C265-11D0-BCED-00A0C90AB50F}
我的文件
{450D8FBA-AD25-11D0-98A8-0800361B1103}
資源回收筒
{645FF040-5081-101B-9F08-00AA002F954E}
網路(工作群組)
{208D2C60-3AEA-1069-A2D7-08002B30309D}
Internet 瀏覽 器
{871C5380-42A0-1069-A2EA-08002B30309D}
尋找電腦結果
{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}
尋找檔案結果
{E17D4FC0-5564-11D1-83F2-00A0C90DC849}
Win7
庫
{031E4825-7B94-4dc3-B131-E946B44C8DD5}
公用
{4336a54d-038b-4685-ab02-99bb52d3fb8b}
文檔
{450D8FBA-AD25-11D0-98A8-0800361B1103}
控制台首頁
{26EE0668-A00A-44D7-9371-BEB064C98683}
控制台起始頁
{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}
使用者
{59031a47-3f72-44a7-89c5-5595fe6b30ee}
資源回收筒
{645FF040-5081-101B-9F08-00AA002F954E}
搜尋
{9343812e-1c37-4a49-a12e-4b2d810d956b}
Windows Media
{B416D21B-3B22-B6D4-BBD3-BBD452DB3D5B}
其他使用者( 家庭組)
{B4FB3F98-C1EA-428d-A78A-D1F5659CBA93}
遊戲
{ED228FDF-9EA8-4870-83b1-96b02CFE0D52}
電腦和裝置
{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}
這是其中一部分,《系統程式檔案標識符(如:我的電腦、資源回收筒...)》 。如果你正在使用Windows XP作業系統,可以使用類似“Resource Hacker ”這類工具查看"%windir%\System32\shell32.dll"的“REGINST”資源得到那些標識符,如。
(點小圖查看大圖)
點擊圖片看大圖
另一種獲得標識符的方法是查看註冊表。一部分常用的標識符在這個位置可以找到:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace]
(點小圖查看大圖)
點擊圖片看大圖
4.特殊檔案夾的應用
或許你已經迫不及待地閱讀過《妙用Windows神秘的類別識別項,{20D04FE0-3AEA-1069-A2D8-08002B30309D}》 ,並且進行了其中實驗。簡單描述一下:如果一個檔案夾以前面列出的特殊檔案夾標識符作為副檔名,這個普通檔案夾就會擁有特殊檔案夾的功能。比如,在案頭建立一個檔案夾,修改共名稱為“電腦.{20D04FE0-3AEA-1069-A2D8-08002B30309D}”,你就會得到的一個能開啟到我的電腦或者電腦的特殊檔案夾,而不能訪問原先的檔案夾內容,查看它的屬性,會看到檔案夾的全名。
(點小圖查看大圖)
點擊圖片看大圖
我們需要將特殊標識去掉怎麼辦?可以利用命令提示字元(Win+R,輸入CMD),進入檔案夾,或者對它重新命名,如:
(點小圖查看大圖)
點擊圖片看大圖
可以利用此方法在“案頭”上建立IE瀏覽器的表徵圖(適合XP系統,參見:《案頭IE表徵圖不見了的5種解決方案》 )。
(註:由於微軟被告Windows作業系統捆綁IE瀏覽器,在更新作業系統後,案頭上的自訂表徵圖中已經去除的IE瀏覽器選項,如所示)
(點小圖查看大圖)
點擊圖片看大圖
5.在“運行”對話方塊和地址欄
如果我說這些特殊檔案夾標識符可以應用到“運行”對話方塊(Win+R)和資源管理員的地址欄上會不會感到驚訝?沒錯,這是真的。只要在標識符前面加上“::”,比如,開啟“資源回收筒”,在運行對話方塊或者地址欄中輸入“::{645FF040-5081-101B-9F08-00AA002F954E}”斷行符號確認即可。而運行對話方塊支援的更多。
(點小圖查看大圖)
點擊圖片看大圖
(點小圖查看大圖)
點擊圖片看大圖
6. 資源管理員(explorer.exe)
explorer.exe作為Windows的預設Shell程式,負責作業系統的介面顯示。資源管理員、我的電腦、案頭和工作列都是這個程式提供的,它位於Windows目錄(%windir%),你可以在運行對話方塊裡輸入“explorer /select,%windir%\explorer.exe”找到它。下面是結合explorer.exe和特殊檔案夾標識開啟檔案夾的功能表格,我們可以在運行對話方塊,或者編程時寫外面程式調用會用得上這些。
註:表格摘自:《How to display Windows Explorer objects in one command-line》 ,oyi319進行了翻譯。
瀏覽什嗎? 命令列
X是瀏覽的目標
Y是可選的子目標
常規文法 :
Explorer [/n][/e][,/root],X,[[/Select],Y]
注釋 :
用 /e 將以“資源管理員”介面顯示。即,左側會顯示資料夾窗格。
用 /n 將以“我的電腦”介面顯示。即,左側不會出來資料夾窗格。
若用 /root 參數,X會作為根路徑。也就是說,到達X路徑後,不允許向上操作。
若不使用 /root ,我們瀏覽的對象X是子物件,我們可以瀏覽它的上級或者對象
例子 :
僅瀏覽C:盤:
Explorer /E ,/Root,C:
Explorer /Root ,%SystemDrive%
僅瀏覽Windows目錄:
Explorer /E,/Root,%windir%
僅瀏覽登入伺服器 (可以使用UNC路徑):
Explorer /E,/Root,%LogonServer%
僅瀏覽目前使用者配置路徑:
Explorer /E,/Root,%HOMEDRIVE%%HOMEPATH%
瀏覽 System32 檔案夾,並選中 calc.exe 程式(calc.exe是計算機程式):
Explorer /N,%windir%\system32,/select,%windir%\system32\calc.exe
我的電腦
Explorer /E, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
解釋 : 我的電腦的CLSID: {20D04FE0-3AEA-1069-A2D8-08002B30309D}
控制台
Explorer /N, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}
解釋 : 控制台是我的電腦的子物件,它的CLSID是: {21EC2020-3AEA-1069-A2DD-08002B30309D}。
印表機和傳真
Explorer /N, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{2227A280-3AEA-1069-A2DE-08002B30309D}
字型
Explorer /N, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D20EA4E1-3957-11d2-A40B-0C5020524152}
掃描器和網路攝影機
Explorer /N, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{E211B736-43FD-11D1-9EFB-0000F8757FCD}
注 :Win7 無效
網路連接 Explorer /N, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}
管理工具 Explorer /N, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D20EA4E1-3957-11d2-A40B-0C5020524153}
計劃任務
Explorer /N, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}
注 :Win7 無效
Web檔案夾 Explorer /N, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{BDEADF00-C265-11D0-BCED-00A0C90AB50F}
注 :Win7 無效
我的文件 Explorer /N, ::{450D8FBA-AD25-11D0-98A8-0800361B1103}
資源回收筒 Explorer /N, ::{645FF040-5081-101B-9F08-00AA002F954E}
網路(網路收藏) Explorer /N,:: {208D2C60-3AEA-1069-A2D7-08002B30309D}
預設瀏覽器(IE)
Explorer /N, ::{871C5380-42A0-1069-A2EA-08002B30309D}
尋找檔案
Explorer /N, ::{1F4DE370-D627-11D1-BA4F-00A0C91EEDBA}
注 :Win7 無效
尋找電腦
Explorer /N, ::{E17D4FC0-5564-11D1-83F2-00A0C90DC849}
注 :Win7 無效
本篇文章來源於中國學網[http://www.xue163.com] 原文連結:http://www.xue163.com/124/6/1243914.html
Windows 特殊檔案夾