求手搓大佬帮忙查一下批处理和vbs脚本BUG

因为个人使用习惯问题,最近在网上边查边写,编写了一个在任务栏添加【显示桌面】图标的批处理脚本,但是使用中发现在部分win10系统中未能实现图标添加(win8.1及部分win10系统可以实现目标),求手搓大佬们给予指导,脚本的主体内容见下:
::生成一个用于固定目标的【显示桌面.exe】文件。

echo. >C:\Windows\显示桌面.exe
::将【显示桌面.exe】固定到任务栏。
::增加固定到任务栏的临时右键菜单。
mshta VBScript:Execute("Set ObjShell=CreateObject(""WScript.Shell""):ObjShell.RegWrite ""HKEY_CURRENT_USER\Software\Classes\*\shell\{:}\ExplorerCommandHandler"", ObjShell.RegRead(""HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.taskbarpin\ExplorerCommandHandler""), ""REG_SZ"":close")
::用增加临时右键菜单将【显示桌面.exe】固定到任务栏。
mshta VBScript:Execute("Set ObjApp=CreateObject(""Shell.Application""):Set ObjFolder=ObjApp.Namespace(""C:\Windows""):Set ObjFolderItem=ObjFolder.ParseName(""显示桌面.exe""):ObjFolderItem.InvokeVerb(""{:}""):close")
::删除增加的临时右键菜单。
mshta VBScript:Execute("Set ObjShell=CreateObject(""WScript.Shell""):ObjShell.RegDelete ""HKEY_CURRENT_USER\Software\Classes\*\shell\{:}\"":close")
::生成【显示桌面.scf】文件。
del /f /s /q "C:\Windows\显示桌面.exe" >nul
echo [Shell] >"C:\Windows\显示桌面.scf"
echo Command=2 >>"C:\Windows\显示桌面.scf"
echo IconFile=explorer.exe,3 >>"C:\Windows\显示桌面.scf"
echo. >>"C:\Windows\显示桌面.scf"
echo [Taskbar] >>"C:\Windows\显示桌面.scf"
echo Command=ToggleDesktop >>"C:\Windows\显示桌面.scf"
::修改之前生成的快捷方式到正确目标。
cd /d "F:\Administrator\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"
mshta VBScript:Execute("Set ObjShell=CreateObject(""WScript.Shell""):Set Link=ObjShell.CreateShortcut(""显示桌面.lnk""):Link.TargetPath=""C:\Windows\显示桌面.scf"":Link.WorkingDirectory=""C:\Windows"":Link.Save:close")

测试了多日,发现是ObjFolderItem.InvokeVerb(“”{:}“”)执行不成功,很奇怪呀不带参数ObjFolderItem.InvokeVerb()可以执行成功,带上参数就不行,是我系统的问题吗?还是Window10迭代更新后有了什么新的限制?

在解决问题之前, 我想先搞清几个问题:

Win+D 不香吗? 这得预防多少鼠标手!

系统自带的任务栏最右侧的显示桌面按钮不香吗? 鼠标放上还能预览.
image

这条竖线的右侧就是.

鼠标手势 不香吗?

为啥非要跟bug11较劲 :rofl:

5 个赞

百样米养百样人,请不要强求他人习惯。
若对求助的问题看不惯的请无视即可。

2 个赞

呵呵,说的好有道理,我竟无言以对。

1 个赞

(我不会手搓)仅讨论相关话题

发现一个Quicker动作

这个动作有个亮点,原文是:

一、我们通常都把常用的文件放在桌面,可能你会使用Win+D来快速显示桌面,然后来打开文件。
二、但是打开新的窗口后,再次Win+D不会恢复原来隐藏的窗口,用这个动作则可以实现。
三、并且新打开的窗口依旧会在最前面,增加了超时放弃功能,默认开启。

试用了一下,体验很不错:
之前使用win+D到桌面打开一个新窗口,再按win+D,老窗口无法恢复,尤其是副屏上的窗口也不恢复了,挺麻烦的

用这个动作显示桌面则没有这种问题


我有一些单手使用电脑的场景,这时候无法使用键盘Win + D

右下角那个按键需要移动鼠标的距离太长,我主屏下面还有个屏幕,容易移动过了…导致点不上

把这个动作悬浮后,单手使用电脑体验大幅增加


总结一下就是,每个人的电脑习惯确实不一样(「不香吗」是最近的网络热门用语吗)

这个帖子让我想起了我的一个小痛点,于是上网搜索了一下Quicker动作,无意中解决了

+10086(主要是 +1 字数不够

看帖子内容,楼主是想通过命令行方式在别的电脑(远程/定时?)的任务栏上添加快捷方式
这目标有点古怪啊

部分电脑执行不成功十有八九是权限问题

已经有人用 AHK 做出该功能了(显示或隐藏桌面图标)。可以去 github 上下载编译好的 exe。

代码也很短,经测试,正常使用。

SetTitleMatchMode 2
#SingleInstance ignore
#NoTrayIcon

; Win + Alt + D
!#D::

	;https://stackoverflow.com/questions/53109281/what-is-the-windows-workerw-windows-and-what-creates-them
	ControlGet, HWND, Hwnd,, SysListView321, ahk_class WorkerW

	; Toggle between displaying and hiding the desktop icons
	If DllCall("IsWindowVisible", UInt, HWND)
		WinHide, ahk_id %HWND%
	Else
		WinShow, ahk_id %HWND%

如果是实现显示桌面,那还用得着写代码吗?已经有快捷键 win+d, win+m 了。

我只是一个习惯了XP时代的【显示桌面】按钮的强迫癌晚期患者,为了减少重装系统后的手动设置操作(手动添加文件,固定到任务栏,再改名是可以的),想把增加按钮的过程做成批处理。

测试了多日,发现是ObjFolderItem.InvokeVerb(“”{:}“”)执行不成功,很奇怪呀不带参数ObjFolderItem.InvokeVerb()可以执行成功,带上参数就不行,是我系统的问题吗(20348.469)?在16299的win10系统上试过是成功的,是Window10迭代更新后有了什么新的限制?

各位大佬有没有脚本方式的解决方案供参考学习?其他exe或快捷键就算了,因为我不纯是解决桌面显示问题,而是想通过问题解决,学点脚本编程知识。 :smile:

1 个赞

你试试 powershell 脚本. 而不是vbs脚本.

之前也想试试看的,结果尴尬的发现,我装的这个系统没有powershell(第三方系统,大家明白的)。

可能精简了, 可以添加.

根据建议使用powershell脚本测试了,发现仍是相同情况:如果不带参数ObjFolderItem.InvokeVerb(),可以正常执行;如果带上参数ObjFolderItem.InvokeVerb(“{:}”),执行后无出错提示无执行后应有效果。
有没有哪位是最新正常版本的win10系统的大佬帮忙测试一下脚本,看是我系统问题还是win10系统本身功能调整问题。

如果脚本都用到 WScript, 可能是这个相关dll升级后的问题. 你可以试试低版本 vbs引擎.

另外, ps脚本写注册表, 不用这么写.