/*
app_name:默认程序值存放在HKLMSoftwareRegisteredApplications在"开始菜单"->"默认程序"->"设置默认程序"里看到系统的默认值
type:是AssociationType的映射
file = AT_FILEEXTENSION
protocol = AT_URLPROTOCOL
startMenu = AT_STARTMENUCLIENT
mime = AT_MIMETYPE
level:是AssociationLevel的映射
machine = AL_MACHINE
effective = AL_EFFECTIVE
user = AL_USER
相关MSDN查看:http://technet.microsoft.com/library/aa480152
ProgId
应用程序需要提供特定于应用程序的 ProgId。ProgId 应含有通常写入到默认注册表项中的所有信息。应用程序可在 progid 与协议/扩展名之间建立一对一或一对多的映射关系。这完全是随机的,并且两种方法的效果相同。在上述示例中,ContosoHTML 指向一个含有 htm、html、shtml、xht 及 xhtml 的 shellexecute 信息的单个 progid。对于协议,会为每个协议都定义一个特定 progid。这就使每个协议的执行字符串也不同。
在为 MIME 定义 ProgID 时,progid 必须含有附带相应应用程序的类 id 的 CLSID 子项。这用于对照该类 id 在存储于 HKLM 中的 MIME 数据库中进行查找。
值的定义
Capabilities - 存储特定应用程序的所有默认程序信息的注册表子项。Capabilities 子项始终在应用程序注册表项级别下。
Description - 默认程序旨在帮助用户做出明智的选择。我们允许每个应用程序都注册一个描述字符串,以便每个应用程序可以向用户通告其功能。该值是 capabilities 下的一个属性。
注意 这是必填字段。应用程序必须在此处提供一个要在 UI 中显示的条目。务必要将您的字符串本地化。
ApplicationName - 指定将在默认程序 UI 中显示的名称。如果此字段未填写,则默认程序将使用与最先注册的 progid 相关联的 .exe 的名称作为应用程序名称。应用程序名称应始终与 RegisteredApplications 名称相符。
FileAssocations - 该文件关联子项用于存储应用程序要索求的所有特定文件关联。每个文件关联都存储为 FileAssocations 子项的一个属性。每个扩展名都应指向一个特定于应用程序的 progid,而不是通用 progid。
UrlAssocaitions - URL 关联子项用于存储应用程序要索求的所有特定 URL 关联。每个 URL 关联都存储为 UrlAssocations 子项的一个属性。每个协议都应指向一个特定于应用程序的 progid,而不是通用 progid。
MIMEAssocaitions - MIME 关联子项用于存储应用程序要索求的所有特定 MIME 关联。每个 mime 关联都存储为 MIMEAssocations 子项的一个属性。该名称应是存储在 MIME 数据库中的 MIME 名称的原样,值应是含有相应 CLSID 的特定于应用程序的 progid。
Startmenu - Startmenu 子项用于开始菜单上的 Internet 和电子邮件插槽。同时还注册为这些插槽的争用者的应用程序可将该功能链接到其默认程序条目中。提供指向开始菜单注册信息的链接使应用程序可以表明,当它在默认程序中显示时还需要相应的电子邮件或 Internet 链接。如果提供了此信息,并且用户将默认设置恢复为此程序,则此信息还将接替 startmenu 位置。该注册信息正好就是 HKLMsoftwareclientsStartMenuInternet 或 HKLMsoftwareclientsMail 下的已注册项的名称。如果是邮件客户端,它还会设置默认的 MAPI 客户端。
AssociationLevel
AL_MACHINE - 返回适用于某扩展名的计算机默认设置。
AL_EFFECTIVE - 返回当前用户的有效默认设置。注意 这是多数应用程序都会使用的函数。
AL_USER - 返回每用户默认设置。如果不存在每用户默认设置,它会返回故障代码 0x80070483。
AssociationType
AT_FILEEXTENSION - 用于查询 .htm 或 .mp3 之类的文件扩展名
AT_URLPROTOCOL - 用于查询 http:// 或 mailto: 之类的协议
AT_STARTMENUCLIENT - 用于查询邮件或 Internet 链接的 startmenu 客户端的所有者。
AT_MIMETYPE - 用于查询 MIME 类型,例如 audio/mp3。
QueryCurrentDefault
传入扩展名(.mp3、HTTP 等等)的字符串、所属扩展名的类型、关联级别,并且它将返回当前默认设置的 ProgID。通常,应用程序将使用 AL_EFFECTIVE 关联级别,因为这将确定用户的有效默认设置。调用者必须 CoTaskMemFree 所返回的 progid 字符串。
QueryAppIsDefault
传入扩展名(.mp3、HTTP 等等)的字符串、所属扩展名的类型、关联级别以及已注册应用程序名称,并且它将根据应用程序是否拥有该默认设置而返回 BOOL 值。通常,应用程序将使用 AL_EFFECTIVE 关联级别,因为这将确定用户的有效默认设置。
QueryAppIsDefaultAll
传入关联级别、已注册应用程序名称,并且它将根据应用程序是否拥有其所有已注册的默认设置而返回 BOOL 值。通常,应用程序将使用 AL_EFFECTIVE 关联级别,因为这将确定用户的有效默认设置。
SetAppAsDefault
传入已注册应用程序名称、扩展名(.mp3、HTTP 等等)及所属扩展名的类型。默认设置将设置为已注册的应用程序。
SetAppAsDefaultAll
传入已注册应用程序名称,并且它将设置注册到该应用程序的所有默认设置。
ClearUserAssociations
删除当前用户的所有每用户关联,将该用户返回到每计算机默认设置所在的注册表项下。当前不存在要求有人来调用此函数的已定义的合作伙伴或第三方场景。但如果他们想调用,也可以进行调用。
LaunchAdvancedAssociationUI
指定的应用程序注册名必须与 HKLMSoftwareRegisteredApplications 下注册的某个值匹配。以便为指定的应用程序启动“设置程序关联”页面。旨在用于提供到其高级关联配置的 UX 直接链接的应用程序。
注意 此 API 集仅可用于 Windows Vista 及其以后版本。支持下级 OS(XP、Win2K 和 Win98)的应用程序应通过使用 sku 检查来使用下级 OS 上的预先存在的默认代码,以便区分 Windows Vista 之前和 Windows Vista 之后的 OS。
*/
OutFile "AppAssocReg.exe"
!addplugindir ../../Plugins/
ShowInstDetails show
Section ""
#查询.html扩展名系统默认的关联类型ProgId
StrCpy $1 ".html" #扩展名
StrCpy $2 "file" #用于查询 .html文件扩展名AT_FILEEXTENSION
StrCpy $3 "machine" #返回适用于某扩展名的计算机默认设置AL_MACHINE
AppAssocReg::QueryCurrentDefault "$1" "$2" "$3"
Pop $R9 #ProgId
DetailPrint "$1 $3 = $R9"
#查询.html扩展名当前用户设置的关联类型ProgId
StrCpy $1 ".html" #扩展名
StrCpy $2 "file" #用于查询 .html文件扩展名AT_FILEEXTENSION
StrCpy $3 "effective" #返回当前用户的有效默认设置。注意 这是多数应用程序都会使用的函数。AL_EFFECTIVE
AppAssocReg::QueryCurrentDefault "$1" "$2" "$3"
Pop $R9 #ProgId
DetailPrint "$1 $3 = $R9"
#查询http协议系统默认的关联类型ProgId
StrCpy $1 "http" #协议名
StrCpy $2 "protocol" #用于查询 http:// 或 mailto: 之类的协议AT_URLPROTOCOL
StrCpy $3 "machine" #返回适用于某扩展名的计算机默认设置AL_MACHINE
AppAssocReg::QueryCurrentDefault "$1" "$2" "$3"
Pop $R9
DetailPrint "$1 $3 = $R9"
#查询http协议当前用户设置的关联类型ProgId
StrCpy $1 "http" #协议名
StrCpy $2 "protocol" #用于查询 http:// 或 mailto: 之类的协议AT_URLPROTOCOL
StrCpy $3 "effective" #返回当前用户的有效默认设置。注意 这是多数应用程序都会使用的函数。AL_EFFECTIVE
AppAssocReg::QueryCurrentDefault "$1" "$2" "$3"
Pop $R9
DetailPrint "$1 $3 = $R9"
#是否一个程序自身所有的默认关联都被注册成计算机的默认设置
StrCpy $0 "Internet Explorer" #Paint,Windows Media Center,WinRAR
StrCpy $3 "effective"
AppAssocReg::QueryAppIsDefaultAll "$0" "$3"
Pop $R9
DetailPrint "$0 = $R9"
#是否一个程序自身下的某一个协议或关联的默认关联被注册成计算机的默认设置
StrCpy $0 "Internet Explorer"
StrCpy $1 "http"
StrCpy $2 "protocol"
StrCpy $3 "effective"
AppAssocReg::QueryAppIsDefault "$0" "$1" "$2" "$3"
Pop $R9
DetailPrint "QueryAppIsDefault $0 $1 $3 = $R9"
#将Internet Explorer所有默认关联都注册成计算机的默认设置
StrCpy $0 "Google Chrome.A7QNP4STL7YLQ6VYDPR3WQ6XAM"
#StrCpy $0 "Internet Explorer"
AppAssocReg::SetAppAsDefaultAll "$0"
Pop $R9
DetailPrint "SetAppAsDefaultAll $0 = $R9"
#将Internet Explorer下的http协议注册成计算机的默认设置
StrCpy $0 "Google Chrome.A7QNP4STL7YLQ6VYDPR3WQ6XAM"
#StrCpy $0 "Internet Explorer"
StrCpy $1 "http"
StrCpy $2 "protocol"
AppAssocReg::SetAppAsDefault "$0" "$1" "$2"
Pop $R9
DetailPrint "SetAppAsDefault $0 $1 = $R9"
#移除所有个人用户关联的当前设置.将值还原成系统默认值.
AppAssocReg::ClearUserAssociations
Pop $R9
DetailPrint "ClearUserAssociations = $R9"
SectionEnd
THE END
暂无评论内容