设为首页 |收藏本站 |切换到宽版
 找回密码

NSIS中文论坛

查看: 2841|回复: 7
收起左侧

[求助] NSIS格式关联求教

[复制链接]

该用户从未签到

7

主题

66

帖子

337

积分

积分
337

荣誉管理

发表于 2015-5-10 14:29:21 | 显示全部楼层 |阅读模式
本人NSIS小白,求教NSIS在做格式关联相关的方法。
每个程序的格式关联方法可能不太一样,不知道做格式关联通常都怎么做的,求大神给个完整详细的分类示例及讲解。

在线等。
回复

使用道具 举报

该用户从未签到

2

主题

10

帖子

203

积分

积分
203

荣誉管理

发表于 2015-5-11 19:32:58 | 显示全部楼层
用法:


!include "FileAssociation.nsh"
...

${registerExtension} "c:\myplayer.exe" ".mkv" "MKV_File"

${unregisterExtension} ".mkv" "MKV File"


FileAssociation.nsh
!ifndef FileAssociation_INCLUDED
!define FileAssociation_INCLUDED

!include Util.nsh

!verbose push
!verbose 3
!ifndef _FileAssociation_VERBOSE
  
!define _FileAssociation_VERBOSE 3
!endif
!verbose
${_FileAssociation_VERBOSE}
!define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE`
!verbose pop

!macro FileAssociation_VERBOSE _VERBOSE
  !verbose
push
  
!verbose 3
  
!undef _FileAssociation_VERBOSE
  
!define _FileAssociation_VERBOSE ${_VERBOSE}
  
!verbose pop
!macroend



!macro
RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION
  
!verbose push
  
!verbose ${_FileAssociation_VERBOSE}
  
Push `${_DESCRIPTION}`
  Push `${_EXTENSION}`
  Push `${_EXECUTABLE}`
  ${CallArtificialFunction} RegisterExtension_
  
!verbose pop
!macroend

!macro
UnRegisterExtensionCall _EXTENSION _DESCRIPTION
  
!verbose push
  
!verbose ${_FileAssociation_VERBOSE}
  
Push `${_EXTENSION}`
  Push `${_DESCRIPTION}`
  ${CallArtificialFunction} UnRegisterExtension_
  
!verbose pop
!macroend



!define
RegisterExtension `!insertmacro RegisterExtensionCall`
!define un.RegisterExtension `!insertmacro RegisterExtensionCall`

!macro RegisterExtension
!macroend

!macro
un.RegisterExtension
!macroend

!macro
RegisterExtension_
  
!verbose push
  
!verbose ${_FileAssociation_VERBOSE}

  
Exch $R2
  
Exch
  Exch
$R1
  
Exch
  Exch
2
  
Exch $R0
  
Exch 2
  
Push $0
  
Push $1

  
ReadRegStr $1 HKCR $R1 ""  
  StrCmp "$1" "" NoBackup  
  
StrCmp "$1" "$R0" NoBackup
   
WriteRegStr HKCR $R1 "backup_val" "$1"
NoBackup:
  
WriteRegStr HKCR $R1 "" "$R0"

  ReadRegStr $0 HKCR $R0 ""
  StrCmp $0 "" 0 Skip
   
WriteRegStr HKCR "$R0" "" "$R0"
    WriteRegStr HKCR "$R0\shell" "" "open"
    WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0"
Skip:
  
WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"'
  WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0"
  WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"'

  Pop $1
  
Pop $0
  
Pop $R2
  
Pop $R1
  
Pop $R0

  
!verbose pop
!macroend



!define
UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
!define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall`

!macro UnRegisterExtension
!macroend

!macro
un.UnRegisterExtension
!macroend

!macro
UnRegisterExtension_
  
!verbose push
  
!verbose ${_FileAssociation_VERBOSE}

  
Exch $R1
  
Exch
  Exch
$R0
  
Exch
  Push
$0
  
Push $1

  
ReadRegStr $1 HKCR $R0 ""
  StrCmp $1 $R1 0 NoOwn
  
ReadRegStr $1 HKCR $R0 "backup_val"
  StrCmp $1 "" 0 Restore
  
DeleteRegKey HKCR $R0
  
Goto NoOwn

Restore:
  
WriteRegStr HKCR $R0 "" $1
  
DeleteRegValue HKCR $R0 "backup_val"
  DeleteRegKey HKCR $R1

NoOwn:

  
Pop $1
  
Pop $0
  
Pop $R1
  
Pop $R0

  
!verbose pop
!macroend

!endif



这是官方给出的解决方案,其实也可以自己分析下头文件的内容直接写注册表




回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

66

帖子

337

积分

积分
337

荣誉管理

 楼主| 发表于 2015-5-11 22:25:03 | 显示全部楼层

意思是我直接监控提取注册表,然后安装时导入注册表也可以直接关联是吧?
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

10

帖子

203

积分

积分
203

荣誉管理

发表于 2015-5-11 23:45:58 | 显示全部楼层
要关联文件,写注册表是必须的,关键看在哪儿写,怎么写,给你的那个头文件里面不就有写入的位置和格式么
回复 支持 反对

使用道具 举报

该用户从未签到

7

主题

66

帖子

337

积分

积分
337

荣誉管理

 楼主| 发表于 2015-5-12 09:59:37 | 显示全部楼层
水晶石 发表于 2015-5-11 23:45
要关联文件,写注册表是必须的,关键看在哪儿写,怎么写,给你的那个头文件里面不就有写入的位置和格式么 ...

其实我基本看不懂
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2019-11-3 14:42
  • 签到天数: 68 天

    [LV.6]常住居民II

    107

    主题

    466

    帖子

    5349

    积分

    积分
    5349
    发表于 2015-5-12 21:52:28 | 显示全部楼层
    如果不是强关联,其实就是类似下面的写注册表:
    1. ReadRegStr $R0 HKCR ".psd" ""
    2. StrCmp $R0 "Photoshop.Image" 0 +2
    3. DeleteRegKey HKCR "Photoshop.Image"

    4. WriteRegStr HKCR ".psd" "" "Photoshop.Image"
    5. WriteRegStr HKCR "Photoshop.Image" "" "Adobe Photoshop Image"
    6. WriteRegStr HKCR "Photoshop.Image\DefaultIcon" "" "$INSTDIR\Photoshop.exe,1"

    7. WriteRegStr HKCR "Photoshop.Image\shell\compile" "" "使用 Photoshop CS5 打开"
    8. WriteRegStr HKCR "Photoshop.Image\shell\compile\command" "" '"$INSTDIR\Photoshop.exe" "%1"'
    9. WriteRegStr HKCR "Photoshop.Image\shell\open\command" "" '"$INSTDIR\Photoshop.exe" "%1"'
    复制代码

    如果是强关联,建议使用Ansifa老大的文件关联头。

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    151

    帖子

    804

    积分

    积分
    804

    NSIS元老

    发表于 2015-5-15 00:49:01 | 显示全部楼层
    随着 Windows 版本的更新,文件关联的注册表也变得越来越复杂。现在甚至设置默认关联都要去控制面板,以前老的强制关联可能会失效,需要更新,否则无法顺应现在的 Windows 7 以及之后的操作系统。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2020-1-14 14:23
  • 签到天数: 2 天

    [LV.1]初来乍到

    0

    主题

    6

    帖子

    60

    积分

    积分
    60
    发表于 2020-4-24 10:41:50 | 显示全部楼层
    哎,看不懂呀
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|联系我们|鲁ICP备12005273号 |  

    © 2015-2020 nsisfans.com.   All Rights Reserved.

    快速回复 返回顶部 返回列表