第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創(chuàng)建注冊表項以將文件擴展名與C ++中的應用程序相關聯

創(chuàng)建注冊表項以將文件擴展名與C ++中的應用程序相關聯

C++
湖上湖 2019-09-21 14:31:21
我想知道在C ++應用程序中注冊文件擴展名的最干凈的方法,這樣當雙擊與我的程序關聯的數據文件時,將打開該應用程序,并將文件名作為參數傳遞給該應用程序。當前,我是通過wix安裝程序執(zhí)行此操作的,但是在某些情況下,該應用程序將不會安裝在用戶的計算機上,因此,我還需要通過該應用程序創(chuàng)建注冊表項的選項。另外,這是否還意味著如果刪除了該應用程序,注冊表中未使用的條目將被留下來?
查看完整描述

3 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

您可以在此MSDN文章中找到有關該過程的基本概述。關鍵部分在列表的底部:


注冊ProgID

ProgID(本質上是文件類型注冊表項)是包含重要文件類型屬性的內容,例如圖標,描述和上下文菜單項,包括雙擊文件時使用的應用程序。許多擴展名可能具有相同的文件類型。該映射在下一步中完成:


注冊文件類型的文件擴展名

在這里,您可以為擴展名設置一個注冊表值,將該擴展名的文件類型設置為您在上一步中創(chuàng)建的ProgID。


要使用您的應用程序打開文件的最低工作量是設置/創(chuàng)建兩個注冊表項。在此示例.reg文件中,我創(chuàng)建了文件類型(blergcorp.blergapp.v1)并將文件擴展名(.blerg)與其關聯。


Windows Registry Editor Version 5.00


[HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command]

@="c:\path\to\app.exe \"%1\""

[HKEY_CURRENT_USER\Software\Classes\.blerg]

@="blergcorp.blergapp.v1"

現在,您可能希望以編程方式完成此任務。絕對來說,您可以檢查這些鍵是否存在,并相應地更改程序行為,尤其是在假設您控制某些通用文件擴展名的情況下。但是,可以通過使用SetValue函數設置這兩個鍵來實現該目標。


我對確切的C ++語法不滿意,但是在C#中,語法看起來像這樣:


Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\blergcorp.blergapp.v1\shell\open\command", null, @"c:\path\to\app.exe \"%1\"");

Registry.SetValue(@"HKEY_CURRENT_USER\Software\Classes\.blerg", null, "blergcorp.blergapp.v1");

當然,您可以手動打開每個子鍵,手動創(chuàng)建ProgID和擴展子鍵,然后設置鍵值,但是該SetValue功能的好處是,如果鍵或值不存在,則會自動創(chuàng)建它們。非常便利。


現在,簡短說明使用哪種配置單元。在線上的許多文件關聯示例(包括MSDN上的示例)都顯示了在中設置的這些密鑰HKEY_CLASSES_ROOT。我不建議這樣做。該配置單元是HKEY_LOCAL_MACHINE\Software\Classes(系統默認設置)和HKEY_CURRENT_USER\Software\Classes(按用戶設置)的合并虛擬視圖,并且對配置單元中的任何子項的寫入均被重定向到中的相同項HKEY_LOCAL_MACHINE\Software\Classes?,F在,這樣做沒有直接的問題,但是您可能會遇到此問題:如果您寫入HKCR(重定向到HKLM),并且用戶在HKCU中指定了相同的鍵且具有不同的值,則HKCU值將優(yōu)先。因此,您的寫入將成功,但是您將看不到任何更改,因為HKEY_CURRENT_USER設置優(yōu)先于HKEY_LOCAL_MACHINE設置。


因此,在設計應用程序時應考慮到這一點?,F在,另一方面,您可以只寫HKEY_CURRENT_USER,如我的示例所示。但是,該文件關聯設置將僅為當前用戶加載,并且如果已為所有用戶安裝了您的應用程序,則當該其他用戶在Windows中打開文件時,您的應用程序將不會啟動。


查看完整回答
反對 回復 2019-09-21
?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

我不知道為什么人們總是說HKEY_CURRENT_USER\Software\Classes\<.ext>默認值(它將把您重定向到另一個(軟件創(chuàng)建的)類)。


它確實有效,但是將被覆蓋


HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\<.ext>\UserChoice

我相信Microsoft建議第二種做法-因為這是內置的“打開方式”所做的。在這種情況下,Progid“鍵” 的值等于默認值HKEY_CURRENT_USER\Software\Classes\<.ext>。


查看完整回答
反對 回復 2019-09-21
  • 3 回答
  • 0 關注
  • 656 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號