如何從未關聯的檔案類型開啟對話方塊排除應用程式

當使用者嘗試開啟不是任何已註冊檔案類型成員的檔案時, (為未知的檔案類型) ,或當使用者從檔案的快捷方式功能表中選取 [ 開啟開啟 - 選擇預設程式] 時 > ,Shell 會顯示子功能表或對話方塊,讓使用者指定用來開啟檔案的程式。

根據預設,任何註冊為HKEY_CLASSES_ROOT\應用程式子機碼的應用程式會顯示在 [開啟方式] 對話方塊中。 不論應用程式是否已註冊來處理檔案類型,這些應用程式都會在 Open 中呈現。

若要防止應用程式在應用程式不應該或無法用來開啟特定檔案類型時出現在 [ 開啟] 對話方塊中,請使用本主題中所述的兩種技術之一。

指示

步驟 1:

將 NoOpenWith 專案新增至應用程式的子機碼。 當應用程式使用檔案類型時,Windows 會記錄該資訊來建置 建議的程式 清單。 此清單會顯示在 [以 子功能表開啟] 中,如下列螢幕擷取畫面所示。

快顯功能表的螢幕擷取畫面,其中顯示具有子功能表的開啟

這些建議的應用程式也會顯示在 [開啟對話方塊的建議程式] 部分,如下列螢幕擷取畫面所示。

使用建議程式開啟對話方塊的螢幕擷取畫面

注意

如果應用程式已在 檔案類型的 OpenWithList 或 OpenWithProgID 中註冊本身,即使已設定 NoOpenWith 專案,它也會出現在 [建議的程式 ] 清單中。 此外,請記住,無論應用程式是否在建議的程式清單中提供,使用者都可以手動流覽至任何可執行檔。

 

應用程式可以藉由在應用程式的子機碼下指定 NoOpenWith 值來停用此追蹤。

NoOpenWith 專案是空 的REG_SZ 值,如下列範例所示。

HKEY_CLASSES_ROOT
   Applications
      MyProgram.exe
         NoOpenWith

設定 NoOpenWith 專案也有下列效果:

  • 除非特別註冊應用程式來處理該檔案類型,否則防止將檔案釘選到應用程式的跳躍清單。
  • 除非特別註冊應用程式來處理該檔案類型,否則防止對 SHAddToRecentDocs 函式的任何呼叫,將任何檔案新增至應用程式的 Jump List。

步驟 2:

防止應用程式出現在 [ 開啟對話方塊 ] 中的第二種方式是使用 SupportedTypes 子機碼,明確列出應用程式可以開啟的檔案類型副檔名。 這可防止應用程式在 [ 開啟時開啟 ] 對話方塊中顯示無法開啟的檔案類型。 它也會讓應用程式如先前所述,出現在 建議的程式 清單中。

如果應用程式可以將檔案儲存為特定檔案類型,但無法開啟該檔案類型,這個方法特別有用。 應用程式也應該在呼叫 [儲存] 對話方塊時,透過IFileDialog::SetOptions設定FOS_DONTADDTORECENT旗標。 這樣會讓專案無法加入跳躍清單的 [最近 ] 或 [ 頻繁 ] 部分。 它也會封鎖應用程式在 OpenWithList底下追蹤。

每個支援的擴充功能都會新增為 SupportedTypes 子機碼下的專案,如下列範例所示。 專案的類型為 REG_SZREG_Null,沒有相關聯的值。

HKEY_CLASSES_ROOT
   Applications
      ApplicationName
         SupportedTypes
            .ext1
            .ext2
            .ext3

如果提供 SupportedTypes 子機碼,則只有具有這些副檔名的檔案有資格釘選到應用程式的 [跳躍清單] 或 [ 最近 ] 或 [ 常用 ] 目的地清單中追蹤。

NoOpenWith 專案會覆寫 SupportedTypes 子機碼,並將應用程式隱藏在 [ 開啟方式 ] 對話方塊中。