wangms 发表于 2014-9-9 19:33:00

注册表函数

本帖最后由 wangms 于 2014-9-10 09:12 编辑

这几天发现_WinAPI_AssocQueryString ( $sAssoc, $iType [, $iFlags = 0 [, $sExtra = '']] )函数很实用,根据文件扩展名如.au3,返回参数$iType 指定以下值之一的有关信息:
    $ASSOCSTR_COMMAND --- 与 Shell 动词相关联的命令字符串.
    $ASSOCSTR_EXECUTABLE --- Shell 动词命令的可执行文件字符串.
    $ASSOCSTR_FRIENDLYDOCNAME --- 文档类型名称.
    $ASSOCSTR_FRIENDLYAPPNAME --- 可执行文件名称.
    $ASSOCSTR_NOOPEN --- 忽略打开子键项相关的信息.
    $ASSOCSTR_SHELLNEWVALUE --- 新 Shell 的子键项.
    $ASSOCSTR_DDECOMMAND --- DDE 命令模板.
    $ASSOCSTR_DDEIFEXEC --- 用于创建进程的 DDE 命令.
    $ASSOCSTR_DDEAPPLICATION --- 传递 DDE 应用程序的名称.
    $ASSOCSTR_DDETOPIC --- 传递 DDE 的主题名称.
    $ASSOCSTR_INFOTIP --- 提示注册表值信息.
    $ASSOCSTR_QUICKTIP --- IE 6 或更高版本.快速提示注册表值.
    $ASSOCSTR_TILEINFO --- IE 6 或更高版本.并列显示注册表值.
    $ASSOCSTR_CONTENTTYPE --- IE 6 或更高版本. 描述 MIME 文件关联类型.
    $ASSOCSTR_DEFAULTICON --- IE 6 或更高版本. 返回图标资源路径.
    $ASSOCSTR_SHELLEXTENSION --- IE 6 或更高版本. Shell 对象关联的扩展.



如根据.au3扩展名可返回:

$ASSOCSTR_FRIENDLYDOCNAME--->   AutoIt v3 Script                                    文档类型名称
$ASSOCSTR_COMMAND                --->    "d:\AutoIt3\AutoIt3.exe" "%1" %*   与 Shell 动词相关联的命令字符串
$ASSOCSTR_EXECUTABLE         --->   d:\AutoIt3\AutoIt3.exe                         Shell 动词命令的可执行文件字符串.
$ASSOCSTR_DEFAULTICON          --->   d:\AutoIt3\Icons\au3script_v10.ico       图标资源路径

咋样,很实用吧!如是写代码读注册那是很麻烦的,得按:扩展名-->标识主键-->shell在注册表枚举去查找,很费事。
      
         但这个函数很奇怪,既然能直接返回shell下面的许多信息,为什么不多加一个返回Shell 动词名称的$iType 选项?
Shell 动词名称,是我暂定名字,就是注册表子键shell的默认值,如图圈圈里的玩意:
圈圈里的玩意就是决定双击AU3脚本,是运行、还是编辑的东东。
请高手老师们费神扩展一下这个函数,多加一个返回Shell 动词名称的$iType 选项。在此谢谢先!!

_WinAPI_AssocQueryString()函数如下:

Func _WinAPI_AssocQueryString($sAssoc, $iType, $iFlags = 0, $sExtra = '')
        Local $sTypeOfExtra = 'wstr'
        If Not StringStripWS($sExtra, $STR_STRIPLEADING + $STR_STRIPTRAILING) Then
                $sTypeOfExtra = 'ptr'
                $sExtra = 0
        EndIf

        Local $aRet = DllCall('shlwapi.dll', 'long', 'AssocQueryStringW', 'dword', $iFlags, 'dword', $iType, 'wstr', $sAssoc, _
                        $sTypeOfExtra, $sExtra, 'wstr', '', 'dword*', 4096)
        If @error Then Return SetError(@error, @extended, '')
        If $aRet Then Return SetError(10, $aRet, '')

        Return $aRet
EndFunc   ;==>_WinAPI_AssocQueryString

wangms 发表于 2014-9-9 19:41:03

自己先顶一顶...................................

邪恶海盗 发表于 2014-9-9 20:03:06

什么宝贝还要花钱买?

header 发表于 2014-9-9 20:08:37

好歹也介绍下啊 卖钱的东西

wangms 发表于 2014-9-9 21:00:30

回复 4# header


    不好意思,本是悬赏,搞成了付费,哈哈

wangms 发表于 2014-9-9 21:04:53

本帖最后由 wangms 于 2014-9-9 21:10 编辑

绿清风老师,不好意思,本是悬赏的,刚还笑话这个帖子http://www.autoitx.com/thread-45218-1-1.html,自己立马就犯同样的错误,更是可笑。刚还在您帖子里掏了许多的宝贝,您的无私分享精神实在令人钦佩!!

austere 发表于 2014-9-10 00:58:18

不懂…帮顶……

wangms 发表于 2014-9-10 23:26:30

快下沉啦自己顶一顶。。。。。。。。。。。。。。。。。。

wangms 发表于 2014-9-12 21:35:52

快下沉啦自己再顶一顶。。。。。。。。。。。。。。。。。。

austere 发表于 2014-9-12 23:37:23

函数实用但是读的图标是16*16的,我那个去~还是得我自己枚举~~

wangms 发表于 2014-9-16 22:12:26

没有哪位高手能出手吗?
页: [1]
查看完整版本: 注册表函数