无忧启动论坛

标题: 解决WIN10PE中WIN+D显示桌面问题 [打印本页]

作者: haijie1223    时间: 2017-8-7 00:20
标题: 解决WIN10PE中WIN+D显示桌面问题
本帖最后由 haijie1223 于 2017-8-9 08:01 编辑

看到这个源码:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=387383
不懂易语言,还是用其它的办法实现吧。
1、PECMD命令:
每次刷新explorer之后,运行下面这个命令,当然开机第一次进入桌面也要运行。
  1. CALL $--ret:hHwnd user32.dll,FindWindowW,Shell_TrayWnd,
  2. CALL $user32.dll,SendMessageW,#%hHwnd%,#1466,#0,#0
复制代码

2、AU3写法:
  1. #NoTrayIcon
  2. Local $Msg=_RegisterWindowMessage('TaskbarCreated')
  3. GUICreate('')
  4. GUISetState(@SW_HIDE)
  5. GUIRegisterMsg($Msg,'_ShowDeskTopMsg')
  6. _ShowDeskTopMsg()
  7. While 1
  8.         Sleep(10)
  9. WEnd
  10. Func _ShowDeskTopMsg()
  11.         _SendMessage(WinGetHandle('[Class:Shell_TrayWnd]'), 1466, 0, 0)
  12. EndFunc
  13. Func _SendMessage($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lresult")
  14.         Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessageW", "hwnd", $hWnd, "uint", $iMsg, $wParamType, $wParam, $lParamType, $lParam)
  15.         If @error Then Return SetError(@error, @extended, "")
  16.         If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn]
  17.         Return $aResult
  18. EndFunc   ;==>_SendMessage
  19. Func _RegisterWindowMessage($sMessage)
  20.         Local $aResult = DllCall("user32.dll", "uint", "RegisterWindowMessageW", "wstr", $sMessage)
  21.         If @error Then Return SetError(@error, @extended, 0)
  22.         Return $aResult[0]
  23. EndFunc   ;==>_WinAPI_RegisterWindowMessage
复制代码

作者: tools241    时间: 2017-8-7 07:16
本帖最后由 tools241 于 2017-8-7 17:52 编辑

请问要如何执行? 在何处执行?


作者: haijie1223    时间: 2017-8-7 08:27
tools241 发表于 2017-8-7 07:16
请问要如何执行? 在何处执行?

用AU3进行编译成exe,进入PE后运行。
作者: whyme22    时间: 2017-8-7 09:05
大师 能不能提供一个编译好的成品   下载了autoit3 实在不知道怎么用
作者: xzf680    时间: 2017-8-7 10:12
看见有人要编译好的,顺手编译给需要的人!

解决Win10PE 任务栏右键及屏幕右下角显示桌面无效.7z (401.5 KB, 下载次数: 139)
作者: xmzhqw    时间: 2017-8-7 11:24
xzf680 发表于 2017-8-7 10:12
看见有人要编译好的,顺手编译给需要的人!

这个可用于32位和64位的PE?
作者: haijie1223    时间: 2017-8-7 14:36
解决Win10PE 任务栏右键及屏幕右下角显示桌面无效.7z (717.95 KB, 下载次数: 122)
里面有32位和64位,其实32位就可以通用了。
作者: haijie1223    时间: 2017-8-7 14:37
whyme22 发表于 2017-8-7 09:05
大师 能不能提供一个编译好的成品   下载了autoit3 实在不知道怎么用

7楼自己下
作者: haijie1223    时间: 2017-8-7 14:37
xmzhqw 发表于 2017-8-7 11:24
这个可用于32位和64位的PE?

7楼
作者: whyme22    时间: 2017-8-7 14:42
haijie1223 发表于 2017-8-7 14:37
7楼自己下

谢谢
作者: tools241    时间: 2017-8-7 17:54
测试结果:
1.showdesktop*.exe 只能在 *.ini 最后执行, 否则会卡住.
2.showdesktop*.exe 常驻吃CPU, 但执行后可 kill showdesktop*

建议: 执行 showdesktop*.exe 不要常驻记忆体, 執行後能自行结束.



作者: haijie1223    时间: 2017-8-7 23:43
tools241 发表于 2017-8-7 17:54
测试结果:
1.showdesktop*.exe 只能在 *.ini 最后执行, 否则会卡住.
2.showdesktop*.exe 常驻吃CPU, 但执 ...

点评到位,可以去掉while循环,然后每次刷新explorer之后,执行一次sendmessage即可。
作者: tools241    时间: 2017-8-8 08:57
本帖最后由 tools241 于 2017-8-8 11:18 编辑
haijie1223 发表于 2017-8-7 23:43
点评到位,可以去掉while循环,然后每次刷新explorer之后,执行一次sendmessage即可。

大大是否会重新上传新档?
3Q!



作者: haijie1223    时间: 2017-8-8 09:49
tools241 发表于 2017-8-8 08:57
大大是否会重新上传新档?
3Q!

解决WIN10PE中WIN D—V1.1.7z (730.62 KB, 下载次数: 73)
现在一直运行应该不吃CPU了
作者: tools241    时间: 2017-8-8 11:10
本帖最后由 tools241 于 2017-8-11 20:21 编辑
haijie1223 发表于 2017-8-8 09:49
现在一直运行应该不吃CPU了

收下了, 3Q!



作者: haijie1223    时间: 2017-8-8 12:03
tools241 发表于 2017-8-8 11:10
收下了, 3Q!

2017/08/08 11:25 本人已添加[Win+D]的热键到所发的10PE (只须更新Seltool_T.7z ; *.iso ...

这是修改后的源码
  1. #NoTrayIcon
  2. Local $Msg=_RegisterWindowMessage('TaskbarCreated')
  3. GUICreate('')
  4. GUISetState(@SW_HIDE)
  5. GUIRegisterMsg($Msg,'_ShowDeskTopMsg')
  6. While 1
  7.         Sleep(10)
  8. WEnd
  9. Func _ShowDeskTopMsg()
  10.         _SendMessage(WinGetHandle('[Class:Shell_TrayWnd]'), 1466, 0, 0)
  11. EndFunc
  12. Func _SendMessage($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lresult")
  13.         Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessageW", "hwnd", $hWnd, "uint", $iMsg, $wParamType, $wParam, $lParamType, $lParam)
  14.         If @error Then Return SetError(@error, @extended, "")
  15.         If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn]
  16.         Return $aResult
  17. EndFunc   ;==>_SendMessage
  18. Func _RegisterWindowMessage($sMessage)
  19.         Local $aResult = DllCall("user32.dll", "uint", "RegisterWindowMessageW", "wstr", $sMessage)
  20.         If @error Then Return SetError(@error, @extended, 0)
  21.         Return $aResult[0]
  22. EndFunc   ;==>_WinAPI_RegisterWindowMessage
复制代码

作者: tools241    时间: 2017-8-8 21:49
本帖最后由 tools241 于 2017-8-8 22:12 编辑
haijie1223 发表于 2017-8-8 12:03
这是修改后的源码

1.*.exe 只能在 *.ini 最后执行, 否则会卡住 -- 此点是否无解? 不执行 while 不行?
2.*.exe 执行后须  kill explorer -- 否则按[Win+D]可能无效


如果只保留下列三行, 会有什么影响? 如果由使用者自行多执行 *.EXE 几次是否行?


作者: haijie1223    时间: 2017-8-9 00:09
tools241 发表于 2017-8-8 21:49
1.*.exe 只能在 *.ini 最后执行, 否则会卡住 -- 此点是否无解? 不执行 while 不行?
2.*.exe 执行后须  k ...

1、按说是不会卡住的,你写pecmd命令的时候,不要等待程序运行完毕。把exec的“=”参数去掉。
2、必须先kill explorer是因为代码中漏掉了一行。抱歉,我没有实际测试,所以会有纰漏。
解决WIN10PE中WIN D显示桌面问题.7z (727.55 KB, 下载次数: 52)
  1. #NoTrayIcon
  2. Local $Msg=_RegisterWindowMessage('TaskbarCreated')
  3. GUICreate('')
  4. GUISetState(@SW_HIDE)
  5. GUIRegisterMsg($Msg,'_ShowDeskTopMsg')
  6. _ShowDeskTopMsg()
  7. While 1
  8.         Sleep(10)
  9. WEnd
  10. Func _ShowDeskTopMsg()
  11.         _SendMessage(WinGetHandle('[Class:Shell_TrayWnd]'), 1466, 0, 0)
  12. EndFunc
  13. Func _SendMessage($hWnd, $iMsg, $wParam = 0, $lParam = 0, $iReturn = 0, $wParamType = "wparam", $lParamType = "lparam", $sReturnType = "lresult")
  14.         Local $aResult = DllCall("user32.dll", $sReturnType, "SendMessageW", "hwnd", $hWnd, "uint", $iMsg, $wParamType, $wParam, $lParamType, $lParam)
  15.         If @error Then Return SetError(@error, @extended, "")
  16.         If $iReturn >= 0 And $iReturn <= 4 Then Return $aResult[$iReturn]
  17.         Return $aResult
  18. EndFunc   ;==>_SendMessage
  19. Func _RegisterWindowMessage($sMessage)
  20.         Local $aResult = DllCall("user32.dll", "uint", "RegisterWindowMessageW", "wstr", $sMessage)
  21.         If @error Then Return SetError(@error, @extended, 0)
  22.         Return $aResult[0]
  23. EndFunc   ;==>_WinAPI_RegisterWindowMessage
复制代码

3、如果你只需要每次刷新explorer之后运行一次的话,可以只保留两行代码:
  1. #NoTrayIcon
  2. _SendMessage(WinGetHandle('[Class:Shell_TrayWnd]'), 1466, 0, 0)
复制代码

作者: tools241    时间: 2017-8-9 06:26
本帖最后由 tools241 于 2017-8-11 20:21 编辑
haijie1223 发表于 2017-8-9 00:09
1、按说是不会卡住的,你写pecmd命令的时候,不要等待程序运行完毕。把exec的“=”参数去掉。
2、必须先 ...

问题都完美解决了, 3Q!

2017/08/09 07:20 本人已添加[Win+D]的热键到所发的10PE (只须更新Seltool_T.7z ; *.iso不用更新), 并注明出处 :
8/9更新 效率极致!  简体/繁体 10PE16199x64 10PE16193x86 10PE15063x64  影音上网版 ==>
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=385866



作者: haijie1223    时间: 2017-8-9 08:01
tools241 发表于 2017-8-9 06:26
问题都完美解决了, 3Q!

看1楼,我又添加了pecmd的方法。
作者: freesoft00    时间: 2017-8-11 17:50
haijie1223 发表于 2017-8-9 08:01
看1楼,我又添加了pecmd的方法。

一楼的代码是最新的吗
作者: haijie1223    时间: 2017-8-11 21:27
freesoft00 发表于 2017-8-11 17:50
一楼的代码是最新的吗

是的
作者: haijie1223    时间: 2017-8-11 21:27
freesoft00 发表于 2017-8-11 17:50
一楼的代码是最新的吗

是的
作者: 立帮电子    时间: 2017-8-11 21:59
感谢分享,试试楼主的代码。
作者: hhh333    时间: 2017-8-27 08:03
提示一下,最新826版的PECMD隐含解决了这个问题。如果以PECMD这个作为启动器的PE可以不考虑这个问题了。
作者: haijie1223    时间: 2017-8-27 20:20
hhh333 发表于 2017-8-27 08:03
提示一下,最新826版的PECMD隐含解决了这个问题。如果以PECMD这个作为启动器的PE可以不考虑这个问题了。

666
作者: 2011ChrisR    时间: 2017-9-4 22:11

ShowDesktop x86/x64 轻的 PureBasic (with source | 与来源)
ShowDesktop.exe
ShowDesktop.exe -p (permanent | 永久)
ShowDesktop.7z (6.11 KB, 下载次数: 43)

作者: dsanke    时间: 2018-8-21 01:27
厉害厉害!太实用了!
作者: foxfirefox    时间: 2018-8-30 19:59
本帖最后由 foxfirefox 于 2018-8-30 20:03 编辑

直接用1楼的第一中代码就很好,system用户,刷新explorer代码为
kill explorer
wait 1000
CALL $--ret:hHwnd user32.dll,FindWindowW,Shell_TrayWnd,
CALL $user32.dll,SendMessageW,#%hHwnd%,#1466,#0,#0
administrator用户将 1000改为 3000,双切用户就麻烦好多。
作者: 恋梦ok    时间: 2018-12-6 08:45
大神
作者: CYYspace    时间: 2023-8-14 20:32
xzf680 发表于 2017-8-7 10:12
看见有人要编译好的,顺手编译给需要的人!

感谢分享
作者: yyz2191958    时间: 2023-8-14 22:04
感谢分享




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3