写了两个函数,可以直接添加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[0]) 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
|