无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 12340|回复: 34
打印 上一主题 下一主题

[发布] 解决WIN10PE中WIN+D显示桌面问题

  [复制链接]
跳转到指定楼层
1#
发表于 2017-8-7 00:20:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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
复制代码

评分

参与人数 3无忧币 +15 收起 理由
cfenjin + 5 赞一个!
立帮电子 + 5 感谢分享!
zmac2007 + 5

查看全部评分

2#
发表于 2017-8-7 07:16:50 | 只看该作者
本帖最后由 tools241 于 2017-8-7 17:52 编辑

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

点评

用AU3进行编译成exe,进入PE后运行。  详情 回复 发表于 2017-8-7 08:27
回复

使用道具 举报

3#
 楼主| 发表于 2017-8-7 08:27:32 | 只看该作者
tools241 发表于 2017-8-7 07:16
请问要如何执行? 在何处执行?

用AU3进行编译成exe,进入PE后运行。
回复

使用道具 举报

4#
发表于 2017-8-7 09:05:58 | 只看该作者
大师 能不能提供一个编译好的成品   下载了autoit3 实在不知道怎么用

点评

7楼自己下  详情 回复 发表于 2017-8-7 14:37
回复

使用道具 举报

5#
发表于 2017-8-7 10:12:09 | 只看该作者
看见有人要编译好的,顺手编译给需要的人!

解决Win10PE 任务栏右键及屏幕右下角显示桌面无效.7z (401.5 KB, 下载次数: 131)

点评

感谢!  发表于 2017-8-7 11:57
这个可用于32位和64位的PE?  详情 回复 发表于 2017-8-7 11:24
回复

使用道具 举报

6#
发表于 2017-8-7 11:24:29 | 只看该作者
xzf680 发表于 2017-8-7 10:12
看见有人要编译好的,顺手编译给需要的人!

这个可用于32位和64位的PE?

点评

7楼  详情 回复 发表于 2017-8-7 14:37
回复

使用道具 举报

7#
 楼主| 发表于 2017-8-7 14:36:56 | 只看该作者
解决Win10PE 任务栏右键及屏幕右下角显示桌面无效.7z (717.95 KB, 下载次数: 120)
里面有32位和64位,其实32位就可以通用了。
回复

使用道具 举报

8#
 楼主| 发表于 2017-8-7 14:37:14 | 只看该作者
whyme22 发表于 2017-8-7 09:05
大师 能不能提供一个编译好的成品   下载了autoit3 实在不知道怎么用

7楼自己下

点评

谢谢  详情 回复 发表于 2017-8-7 14:42
回复

使用道具 举报

9#
 楼主| 发表于 2017-8-7 14:37:39 | 只看该作者
xmzhqw 发表于 2017-8-7 11:24
这个可用于32位和64位的PE?

7楼
回复

使用道具 举报

10#
发表于 2017-8-7 14:42:15 | 只看该作者
回复

使用道具 举报

11#
发表于 2017-8-7 17:54:51 | 只看该作者
测试结果:
1.showdesktop*.exe 只能在 *.ini 最后执行, 否则会卡住.
2.showdesktop*.exe 常驻吃CPU, 但执行后可 kill showdesktop*

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


点评

点评到位,可以去掉while循环,然后每次刷新explorer之后,执行一次sendmessage即可。  详情 回复 发表于 2017-8-7 23:43
回复

使用道具 举报

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

点评到位,可以去掉while循环,然后每次刷新explorer之后,执行一次sendmessage即可。

点评

大大是否会重新上传新档? 3Q!  详情 回复 发表于 2017-8-8 08:57
回复

使用道具 举报

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

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


点评

现在一直运行应该不吃CPU了  详情 回复 发表于 2017-8-8 09:49
回复

使用道具 举报

14#
 楼主| 发表于 2017-8-8 09:49:02 | 只看该作者
tools241 发表于 2017-8-8 08:57
大大是否会重新上传新档?
3Q!

解决WIN10PE中WIN D—V1.1.7z (730.62 KB, 下载次数: 72)
现在一直运行应该不吃CPU了

点评

收下了, 3Q!  详情 回复 发表于 2017-8-8 11:10
回复

使用道具 举报

15#
发表于 2017-8-8 11:10:55 | 只看该作者
本帖最后由 tools241 于 2017-8-11 20:21 编辑
haijie1223 发表于 2017-8-8 09:49
现在一直运行应该不吃CPU了

收下了, 3Q!


点评

这是修改后的源码  详情 回复 发表于 2017-8-8 12:03
回复

使用道具 举报

16#
 楼主| 发表于 2017-8-8 12:03:05 | 只看该作者
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
复制代码

点评

1.*.exe 只能在 *.ini 最后执行, 否则会卡住 -- 此點是否無解? 不執行 while 不行? 2.*.exe 執行後須 手動 kill explorer -- 否則按[Win+D]可能無效  详情 回复 发表于 2017-8-8 21:49
回复

使用道具 举报

17#
发表于 2017-8-8 21:49:51 | 只看该作者
本帖最后由 tools241 于 2017-8-8 22:12 编辑
haijie1223 发表于 2017-8-8 12:03
这是修改后的源码

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


如果只保留下列三行, 会有什么影响? 如果由使用者自行多执行 *.EXE 几次是否行?
  • #NoTrayIcon
  • #include <Winapi.au3
  •         _SendMessage(_WinAPI_FindWindow('Shell_TrayWnd', ''), 1466, 0, 0)

点评

1、按说是不会卡住的,你写pecmd命令的时候,不要等待程序运行完毕。把exec的“=”参数去掉。 2、必须先kill explorer是因为代码中漏掉了一行。抱歉,我没有实际测试,所以会有纰漏。 3、如果你只需要每次刷新  详情 回复 发表于 2017-8-9 00:09
回复

使用道具 举报

18#
 楼主| 发表于 2017-8-9 00:09:12 | 只看该作者
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, 下载次数: 51)
  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)
复制代码

点评

问题都完美解决了, 3Q!  详情 回复 发表于 2017-8-9 06:26
回复

使用道具 举报

19#
发表于 2017-8-9 06:26:35 | 只看该作者
本帖最后由 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


点评

看1楼,我又添加了pecmd的方法。  详情 回复 发表于 2017-8-9 08:01
回复

使用道具 举报

20#
 楼主| 发表于 2017-8-9 08:01:52 | 只看该作者
tools241 发表于 2017-8-9 06:26
问题都完美解决了, 3Q!

看1楼,我又添加了pecmd的方法。

点评

一楼的代码是最新的吗  详情 回复 发表于 2017-8-11 17:50
回复

使用道具 举报

21#
发表于 2017-8-11 17:50:08 | 只看该作者
haijie1223 发表于 2017-8-9 08:01
看1楼,我又添加了pecmd的方法。

一楼的代码是最新的吗

点评

是的  详情 回复 发表于 2017-8-11 21:27
是的  详情 回复 发表于 2017-8-11 21:27
回复

使用道具 举报

22#
 楼主| 发表于 2017-8-11 21:27:13 | 只看该作者
freesoft00 发表于 2017-8-11 17:50
一楼的代码是最新的吗

是的
回复

使用道具 举报

23#
 楼主| 发表于 2017-8-11 21:27:13 | 只看该作者
freesoft00 发表于 2017-8-11 17:50
一楼的代码是最新的吗

是的
回复

使用道具 举报

24#
发表于 2017-8-11 21:59:33 | 只看该作者
感谢分享,试试楼主的代码。
回复

使用道具 举报

25#
发表于 2017-8-27 08:03:28 | 只看该作者
提示一下,最新826版的PECMD隐含解决了这个问题。如果以PECMD这个作为启动器的PE可以不考虑这个问题了。

点评

666  详情 回复 发表于 2017-8-27 20:20
回复

使用道具 举报

26#
 楼主| 发表于 2017-8-27 20:20:47 | 只看该作者
hhh333 发表于 2017-8-27 08:03
提示一下,最新826版的PECMD隐含解决了这个问题。如果以PECMD这个作为启动器的PE可以不考虑这个问题了。

666
回复

使用道具 举报

27#
发表于 2017-9-4 22:11:22 | 只看该作者

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

评分

参与人数 1无忧币 +1 收起 理由
haijie1223 + 1 很给力!

查看全部评分

回复

使用道具 举报

28#
发表于 2018-8-21 01:27:21 | 只看该作者
厉害厉害!太实用了!
回复

使用道具 举报

29#
发表于 2018-8-30 19:59:18 来自手机 | 只看该作者
本帖最后由 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,双切用户就麻烦好多。
回复

使用道具 举报

30#
发表于 2018-12-6 08:45:00 | 只看该作者
大神
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-26 00:09

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表