windows 触发桌面图标布局保存
问题:
项目原有的一套结构由于引进了一个磁盘套件,类似于关闭系统的explorer.exe进程,进入到他所维护的explorer.exe中。于是出现了当退出磁盘的时候没有保存好桌面布局信息导致下次进入的时候磁盘中的桌面信息又变成初始化的状态了。
这里分析后问题所在就是没有提供自动保存桌面信息的机制,所以磁盘退出的时候没有将说面事实状态信息保存到注册表。
解决过程:
查阅资料知道,Windows将桌面布局信息都在注册表\HKEY_CURRENT_USER\SoftWare\Microsoft\Windows\Shell\Bags\1\Desktop下,每次explorer.exe启动的时候会去读这个注册表以初始化桌面布局信息。在explorer.exe运行过程中有若干中方式去触发保存桌面布局信息到这个注册表下。最简单的一种方式就是按F5刷新(当然右键菜单刷新也一样)。
因此可以考虑模拟向explorer.exe发送F5消息来刷新桌面,确保注册表中保存了磁盘退出时桌面的事实状态就可以了。
不过要注意的时,程序中实现桌面刷新要避免桌面闪烁,我这里是通过发送F5前先禁止桌面重绘,发完后再恢复的方式,但是由于WM_KEYDOWN消息只有通过post发送才有效,用send方式发送无效,所以如果立刻启用重绘仍然会刷新,于是尝试在这之前Sleep一小段时间,发现能达到桌面不闪烁的效果了。基本就满足需求了。
代码片段如下:
// 桌面窗口名
HWND lhWndProgman = ::FindWindow(L"Progman", NULL);
if(NULL == lhWndProgman)
break;
::PostMessage(lhWndProgman, WM_SETREDRAW, 0, 0);
HWND lhWndListView = ::FindWindowEx(FindWindowEx(lhWndProgman, NULL, L"SHELLDLL_DefView", NULL), NULL, L"SysListView32", NULL);
::PostMessage(lhWndListView, WM_KEYDOWN, VK_F5, 0);
Sleep(100);
::PostMessage(lhWndProgman, WM_SETREDRAW, 1, 0);
windows 触发桌面图标布局保存的更多相关文章
- Win10桌面图标显示不正常变成了白色
开机不知道什么原因,windows 10 桌面图标全部变成了白色,软件是可以点击正常打开使用,但是看着特别不爽.今天就告诉大家一种办法,解决这种问题. 解决步骤 1.在桌面右键新建 "文本文 ...
- Windows 10设置桌面图标间距、窗口的背景颜色、选中文字的背景颜色
Windows 10取消了“高级外观设置”(或者叫“窗口颜色和外观”设置),想调整一些参数只能进注册表了. 修改后可能需要注销或重启才能生效. 按Win+R,然后输入regedit进入注册表编辑器. ...
- Windows XP解决显示桌面图标消失的问题
1.依次单击“开始”,“运行”,在运行对话框中输入regsvr32 /n /i:u shell32.dll,按回车键 2.弹出“shell32.dll中的DllInstall成功”的窗口,表明已将数据 ...
- Windows ->> Windows Server 2012打开管理添加“我的电脑”桌面图标途径
Windows Server 2012打开管理添加“我的电脑”桌面图标途径 rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
- Windows Server 2012 修改桌面图标
在virtualbox 4.2.18中装了个Windows Server 2012 来体验下,结果发现桌面图标都不知道在哪改.在百度文库上找到了解决方法:http://wenku.baidu.com/ ...
- Windows 7桌面显示图标窗口句柄的获取
在windows XP时代,我们获取桌面图标窗口的句柄往往用一下语句: HWND hwndParent = ::FindWindow( "Progman", "Progr ...
- 【转载】如何删除Windows远程桌面保存的账号密码数据
在Windows系统中,无论是win7.win8还是win10系统,都可使用Windows系统自带的远程桌面连接工具来远程服务器,很多时候Windows远程桌面在连接一次后会自动保存连接的账号密码等信 ...
- 如何在Windows Server 2008 R2中更改桌面图标
如何在Windows Server 2008 R2中更改桌面图标 Windows Server 2008 R2 已经在 MSDN 和 TechNet Plus 订阅上公布,gOxiA 在第一时间下载并 ...
- Windows桌面图标不见了,可能是结束了explorer.exe进程导致
Windows桌面图标不见了,怎么办?那么可能是你关掉了explorer.exe的进程. 解决办法: ① Ctrl+shift+delete打开任务管理器,查看进程是否有explorer.exe ② ...
随机推荐
- 理解 B*tree index内部结构
转载请注明出处:http://write.blog.csdn.net/postedit/40589651 Oracle数据库里的B树索引就好象一棵倒长的树.它包括两种类型的数据块:一种是索引分支块,还 ...
- ubuntu 下操作文件夹,出现Permission denied的解决的方法
今天遇到个诡异问题,向一个文件夹(myResources)粘贴文件的时候,出现这样一个提示 Permission denied 是权限没设好,仅仅是拷贝粘贴一个文件,怎么会这样? 解决的办法: $ s ...
- SQLServer 工具技巧
SQLServerProfiler 的使用 http://www.jikexueyuan.com/course/1712.html
- 批量升级BMC固件asu64、ipmitool
需求:通过服务器远程管理IP批量升级IMM.UEFI固件 工具:asu64.ipmitool.iflash64.cdc_interface.sh 下载:http://pan.baidu.com/s/1 ...
- spring-data-solr官方学习文档介绍
spring-data-solr文档介绍如下: 通过http://www.springframework.org/schema/data/solr/spring-solr-1.0.xsd(spring ...
- C#获取当前系统磁盘符、系统目录、桌面等
1.获取方式如下 Environment.SpecialFolder中定义了许多常用的目录 //获取当前系统磁盘符方法1,返回:C: string path = Environment.GetEnvi ...
- Jquery.Sorttable 桌面拖拽自定义
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- javascript 广告移动特效
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- JavaWeb学习笔记之JSP(二)
1.1. JSP的指令: 1. 什么是JSP 指令? JSP 指令: JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的 ...
- 请写一个C函数,判断处理器是大端存储还是小端存储,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
[解答] int checkCPU() { { union w { int a; char b; }c; c.a=1; return (c.b==1); } } [剖析] 嵌入式系统开发者应该对Lit ...