26、Windows API Shell編程(2)

來源:互聯網
上載者:User

二、檔案協助(File Associations)

    File Associations可以指定Shell在顯示、處理特定檔案類型的檔案時的方式,包括如下幾個方面:

◇雙擊檔案時,哪個應用程式應該被用來開啟這個檔案;

◇檔案的表徵圖;

◇在Explorer中瀏覽時顯示的檔案類型等;

◇檔案的右鍵菜單中顯示的指令(功能表項目);

◇一些使用者介面細節,比如當滑鼠指標停留在表徵圖上時所彈出的提示信(Infotip)。

與File Associations相關的一個重要概念是“檔案類型”,每一種檔案類型對應特定的副檔名。為了使Shell (Explorer.exe)能夠正確識別檔案類型,需要在註冊表中進行相關的註冊。只有在註冊表中正確註冊了的檔案類型Shell才知道如何選擇檔案的表徵圖、如何指定雙擊檔案時開啟檔案所需的應用程式。

1、檔案類型相關註冊表索引值

1)檔案類型

具有同一種副檔名的檔案屬於同一個檔案類型。如果需要Shell識別這種檔案類型,需要在註冊表中註冊。註冊一個檔案類型包括兩個方面,一是在HKEY_CLASSES_ROOT設定副檔名子鍵,並將預設值設定為副檔名對應的ProgID (Programmatic Identifiers,可程式化標識符);二是在HKEY_CLASSES_ROOT索引值下建立ProgID子鍵,並設定相關屬性。

2)副檔名鍵

HKEY_CLASSES_ROOT的副檔名子鍵除了預設索引值應為ProgID,還可以設定其他索引值或子鍵。包括PerceivedType和Content Type索引值和penWithProgids和OpenWithList子鍵等。

OpenWithList和OpenWithProgids子鍵分別設定了“開啟檔案”列表和“開啟檔案”-“選擇程式”對話方塊中可選的項。

3)可程式化標識符

ProgID有多種子鍵:DefaultIcon、CurVer、shell、shellex等,還具有多種索引值InfoTip、FriendlyTypeName等。

ProgID的預設索引值指定了檔案類型的描述;InfoTip索引值指定了使用者將滑鼠指標移動到該種類型的檔案時,所彈出的提示資訊。

DefaultIcon子鍵指定了該種檔案類型的預設表徵圖。CurVer指明了目前的版本。

shell子鍵包括若干的命令處理常式(Handler),有一些預設Handler(open、play等)也可以註冊自訂的Handler。

shellex中包括若干Shell擴充的Handler,用於新加右鍵功能表項目、檔案拖曳菜單、表徵圖、屬性對話方塊、提示對話方塊等,包括Context Menu handler、Data handler、Drop handler、Icon handler、Property sheet handler、Infotip handler、Copy hook handler等類型。

2、為檔案指定預設開啟程式

通過註冊表可以為特定檔案類型的檔案指定預設開啟的程式。指定預設開啟程式後,在exploerer.exe中雙擊或選擇“右鍵一開啟”就可以開啟檔案。

如下reg範例程式碼:

.reg

REGEDIT4

[HKEY_CLASSES_ROOT\.win]
@="WINFile"
[HKEY_CLASSES_ROOT\WINFile]
@="File Type Example"

[HKEY_CLASSES_ROOT\WINFile\DefaultIcon]
@="shell32.dll,-152"
[HKEY_CLASSES_ROOT\WINFile\shell\open\command]
@ = "NOTEPAD.EXE %1"

    通過以上方法。可以向Shell註冊一個新的檔案類型。但是直接修改註冊表索引值後,explorer.exe並不會立即關聯到新的設定。所以需要登出重新登入,以重啟explorer.exe。

SHChangeNotify函數可以使explorer.exe重新載入註冊表設定,使用者不用重新登入,新註冊的檔案類型就可以生效。使用如下參數調用SHChangeNotify:

SHChangeNotify

#include <Windows.h>
#include <shlobj.h>

int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
WinExec("regedit win.reg", nCmdShow);
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);
}

參考

[1] 精通Windows API 函數、介面、編程執行個體

[2] http://msdn.microsoft.com/en-us/library/bb773177%28VS.85%29.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.