13gu 发表于 2022-8-18 16:18:22

【已解决】AU3如何才能做到把软件快捷方式附加到任务栏?

本帖最后由 13gu 于 2022-8-20 14:38 编辑

包括WIN7/810/11

我只知道解除的,XP WIN7/810/11都可以

If FileExists("C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\QQ音乐.lnk") Then
      $boolResult2 = ShellExecute("C:\Users\Public\Desktop\QQ音乐.lnk", "", "C:\Users\Public\Desktop", "taskbarunpin") ;Win7任务栏图标解锁
      Sleep(100)
EndIf

afan 发表于 2022-8-18 19:40:37

13gu 发表于 2022-8-18 18:24
好的,谢谢老大,方法是可以,只是不太完美。再看看还有没有其他方法

按老大的方法,前提是这个路径要 ...

那是因为你的TaskBar文件夹本来就有该快捷方式,或者说你指定的快捷方式在该文件夹中。创建时会重名而自动添加 (n) 序号。
你应该指定(或创建)一个其它路径的快捷方式,比如 d:\qq.lnk
ShellExecute('d:\qq.lnk', '', '', 'taskbarpin') 完成之后如不需要该快捷方式再删除之

afan 发表于 2022-8-18 16:31:10

去掉 un 试试,taskbarpin

13gu 发表于 2022-8-18 18:24:17

afan 发表于 2022-8-18 16:31
去掉 un 试试,taskbarpin

好的,谢谢老大,方法是可以,只是不太完美。再看看还有没有其他方法

按老大的方法,前提是这个路径要有QQ音乐.lnk,运行后这个路径
C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\
会多一个QQ音乐(1).lnk
快捷方式也会显示QQ音乐(1).lnk

13gu 发表于 2022-8-18 23:53:38

afan 发表于 2022-8-18 19:40
那是因为你的TaskBar文件夹本来就有该快捷方式,或者说你指定的快捷方式在该文件夹中。创建时会重名而自 ...

谢谢老大回复
If FileExists("C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\QQ音乐.lnk") Then
      $boolResult2 = ShellExecute("C:\Users\Public\Desktop\QQ音乐.lnk", "", "C:\Users\Public\Desktop", "taskbarpin") ;Win7任务栏图标解锁
      Sleep(100)
EndIf

如上图的代码,如果不存在这个快捷方式,C:\Users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\QQ音乐.lnk
任务栏就创建不了图标
有没有根据主程序exe来创建务栏图标的方法呢?

afan 发表于 2022-8-19 11:03:44

13gu 发表于 2022-8-18 23:53
谢谢老大回复
If FileExists("C:%users\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Qu ...

你上面的代码是卸载的,当然必须存在卸载的对象。
创建的话 taskbarpin 命令会复制指定lnk文件到 TaskBar 文件夹,上面已经说过了。
你随便复制一个快捷方式(目标必须是可固定到任务栏的)到 d:\qq.lnk,再执行以下这行代码,什么都不用改,看看结果怎样。
ShellExecute('d:\qq.lnk', '', '', 'taskbarpin')

13gu 发表于 2022-8-19 17:45:31

afan 发表于 2022-8-19 11:03
你上面的代码是卸载的,当然必须存在卸载的对象。
创建的话 taskbarpin 命令会复制指定lnk文件到 TaskBa ...

明白了,谢谢老大

afan 发表于 2022-8-19 18:36:18

13gu 发表于 2022-8-19 17:45
明白了,谢谢老大

写了两个函数,可以直接添加exe

;例子:添加计算器程序
_ShellExecute_TaskBarBtnAdd(@SystemDir & '\calc.exe', '我的计算器')
If @error Then
        Exit MsgBox(48, '', '添加错误 = ' & @error)
Else
        MsgBox(64, '', '已添加')
EndIf

;例子:删除计算器程序
_ShellExecute_TaskBarBtnDel('我的计算器')
If @error Then
        MsgBox(48, '', '删除错误 = ' & @error)
Else
        MsgBox(64, '', '已删除')
EndIf

Func _ShellExecute_TaskBarBtnAdd($sPath, $sName = '')        ;将快捷方式或程序锁定到任务栏
;~         ###(lnk快捷方式文件或程序文件, 程序文件可指定的显示名)
        Local $fLnkTmp = ''
        If Not StringRegExp($sPath, '(?i)\.lnk$') Then
                If Not FileExists($sPath) Then Return SetError(1, 0, 0)
                $sName = StringRegExpReplace($sName, '(?i)^\s+|\s+$|\.lnk\s*$', '')
                If $sName = '' Then
                        $fLnkTmp = @TempDir & '\' & StringRegExpReplace($sPath, '^.*\\|\.\w+$', '') & '.lnk'
                Else
                        If StringRegExp($sName, '[\\/:*?"<>|]') Then Return SetError(2, 0, 0)
                        $fLnkTmp = @TempDir & '\' & $sName & '.lnk'
                EndIf
                If Not FileCreateShortcut($sPath, $fLnkTmp) Then Return SetError(3, 0, 0)
                $sPath = $fLnkTmp
        Else
                Local $aTmp = FileGetShortcut($sPath)
                If @error Then Return SetError(4, 0, 0)
                If Not FileExists($aTmp) Then Return SetError(5, 0, 0)
        EndIf
        Local $TaskBarLnk = @AppDataDir & '\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\' & StringRegExpReplace($sPath, '^.*\\', '')
        If $TaskBarLnk = $sPath Then Return SetError(6, 0, 0)
        If FileExists($TaskBarLnk) Then ShellExecuteWait($TaskBarLnk, '', '', 'taskbarunpin')
        ShellExecuteWait($sPath, '', '', 'taskbarpin')
        If @error Then
                If $fLnkTmp <> '' Then FileDelete($fLnkTmp)
                Return SetError(7, 0, 0)
        EndIf
        If $fLnkTmp <> '' Then FileDelete($fLnkTmp)
EndFunc   ;==>_ShellExecute_TaskBarBtnAdd
Func _ShellExecute_TaskBarBtnDel($sLnkName)        ;删除任务栏上指定名称的锁定程序
;~         ###(lnk文件名即显示名)
        $sLnkName = StringRegExpReplace($sLnkName, '(?i)^.*\\|^\s+|\s+$|\.lnk\s*$', '')
        If $sLnkName = '' Then Return SetError(1, 0, 0)
        Local $TaskBarLnk = @AppDataDir & '\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\' & $sLnkName & '.lnk'
        If Not FileExists($TaskBarLnk) Then Return SetError(2, 0, 0)
        ShellExecuteWait($TaskBarLnk, '', '', 'taskbarunpin')
        If @error Then Return SetError(3, 0, 0)
EndFunc   ;==>_ShellExecute_TaskBarBtnDel

13gu 发表于 2022-8-19 20:55:52

afan 发表于 2022-8-19 18:36
写了两个函数,可以直接添加exe

ShellExecute('d:\qq.lnk', '', '', 'taskbarpin')
这个只适合WIN7.WIN10的变成打开这个快捷方式了

afan 发表于 2022-8-20 12:19:26

13gu 发表于 2022-8-19 20:55
ShellExecute('d:\qq.lnk', '', '', 'taskbarpin')
这个只适合WIN7.WIN10的变成打开这个快捷方式了

win10 开始不能使用API添加,可能只能(模拟)手动添加,比如发送按键等

13gu 发表于 2022-8-20 14:37:49

afan 发表于 2022-8-20 12:19
win10 开始不能使用API添加,可能只能(模拟)手动添加,比如发送按键等

好的,谢谢

yinbinly 发表于 2022-8-26 17:38:18

我想弄到win10开始菜单
页: [1]
查看完整版本: 【已解决】AU3如何才能做到把软件快捷方式附加到任务栏?