在Windows2000中,當用戶在“我的電腦”或“資源管理器”中的某一文件上單擊鼠標右鍵時會出現一個快捷菜單。單擊的位置和對象不同,快捷菜單的內容也不盡相同。用戶可根據自己的需要定製快捷菜單中的一些內容。
假設用戶希望在txt文件類型的右鍵快捷菜單中關聯上自己的應用程序 (用戶的應用程序名爲mytxtapp.exe,在D盤根目錄下) ,步驟如下:
1、在註冊表中找到並打開HKEY_CLASSES_ROOT\.txt子鍵,查到其默認鍵值項數據爲“txtfile”。
2、在註冊表中找到並打開HKEY_CLASSES_ROOT\txtfile子鍵,在該子鍵的shell子鍵中添加一個“我的文本應用程序”子鍵,並將該子鍵的默認鍵值項數據設爲“用我的文本程序打開”,“用我的文本程序打開”將作爲新添加菜單項的名字出現在右鍵菜單中。雙引號內的文字用戶可隨意設置。
3、在HKEY_CLASSES_ROOT\txtfile\shell\我的文本應用程序子鍵中添加一個command子鍵,並將command子鍵的默認鍵值項數據設爲“d:\mytxtapp.exe %1”,此處設置的數據是在快捷菜單中選中相應的菜單項時執行的程序,%1表示應用程序啓動時自動將當前文件裝入。
[應用實例]
用VC++的應用程序嚮導AppWizard建立一基於對話框的程序,接受所有默認選項。
在主對話框中添加一個按鈕控件,雙擊該按鈕,接受默認名,在該按鈕的消息響應函數中添加如下代碼:
HKEY hresult;
CString str1,str2;
long value;
LPCTSTR dataset1="txtfile\\shell\\我的文本應用程序";
LPCTSTR dataset2="txtfile\\shell\\我的文本應用程序\\command";
str1="用我的文本程序打開";
str2="d:\\mytxtapp.exe %1";
DWORD dwPos;
//創建“我的文本應用程序”子鍵
value=RegCreateKeyEx(HKEY_CLASSES_ROOT,dataset1,0,NULL,REG_OPTION_NON_VOLATILE,KEY_CREATE_SUB_KEY|KEY_ALL_ACCESS,NULL,&hresult,&dwPos);
//將該子鍵的“默認”數據項的數據設置爲“用我的文本程序打開”
value=RegSetValueEx(hresult,NULL,0,REG_SZ,(const BYTE*)(LPCTSTR)str1,str1.GetLength());
//創建“command”子鍵
value=RegCreateKeyEx(HKEY_CLASSES_ROOT,dataset2,0,NULL,REG_OPTION_NON_VOLATILE,KEY_CREATE_SUB_KEY|KEY_ALL_ACCESS,NULL,&hresult,&dwPos);
//將該子鍵的“默認”數據項的數據設置爲用戶應用程序的路徑
value=RegSetValueEx(hresult,NULL,0,REG_SZ,(const BYTE*)(LPCTSTR)str2,str2.GetLength());
::RegCloseKey(hresult);
這段代碼用來關聯用戶的應用程序。
在主對話框中再添加一個按鈕控件,雙擊該按鈕,接受默認名,在該按鈕的消息響應函數中添加如下代碼:
HKEY hKey;
LPCTSTR dataset1="txtfile\\shell\\我的文本應用程序";
LPCTSTR dataset2="txtfile\\shell";
long ret1=::RegOpenKeyEx(HKEY_CLASSES_ROOT,dataset1,0,KEY_READ,&hKey);
//刪除“command”子鍵
::RegDeleteKey(hKey,LPCTSTR("command"));
::RegCloseKey(hKey);
ret1=::RegOpenKeyEx(HKEY_CLASSES_ROOT,dataset2,0,KEY_READ,&hKey);
//刪除“我的文本應用程序”子鍵
::RegDeleteKey(hKey,LPCTSTR("我的文本應用程序"));
::RegCloseKey(hKey);
這段代碼用來恢復註冊表中的默認數據。
至此,我們完成了在擴展名爲.txt文件的右鍵菜單中關聯上自己的應用程序,但不是.txt文件的右鍵菜單上不會出現該菜單項。如果用戶希望在所有文件類型的右鍵菜單中關聯上自己的應用程序,則應在HKEY_CLASSES_ROOT\*\shell子鍵下進行操作,操作步驟同上。對於關聯其他類型的文件依此類推。
以上程序在Windows2000和VC6中通過。