如何先创建桌面图标然后再修改图标位置

使用下面代码修改桌面已有图标位置,运行正常. 

            //for (int i = 0; i < 17; i++)
            //{
            //    string ShortcutPath = @"C:\Users\Administrator\Desktop\" + i + ".lnk";
            //    WshShell shell = new WshShell();
            //    IWshShortcut Shortcut = (IWshShortcut)shell.CreateShortcut(ShortcutPath);
            //    Shortcut.Description = i.ToString();
            //    Shortcut.TargetPath = @"D:\vmware.exe";
            //    Shortcut.Save();
            //}

           LnkCount = 17;
           for (int i = 0; i < LnkCount; i++)
            {
                //System.Threading.Thread.Sleep(100);
                int x = (int)(460 + 250 * Math.Cos(i * (360 / LnkCount) * 3.1415926 / 180));
                int y = (int)(540 + 250 * Math.Sin(i * (360 / LnkCount) * 3.1415926 / 180));
                SendMessage(hwndDesktop, LVM_SETITEMPOSITION, i, (int)MAKELONG((ushort)y, (ushort)x));
            }
            SendMessage(hwndDesktop, LVM_REDRAWITEMS, 0, LnkCount - 1);
            UpdateWindow(hwndDesktop);
但是我把注释的内容取消,先创建图标,之后再排位置,图标创建成功,但修改位置完全无效;
在修改位置前休眠1秒的话,只有第一个图标修改位置不正常,其他都正常修改;
如果休眠0.1S,则只有一半左右图标会修改位置,其他无效.

的确是时间问题,我修改位置前休眠3秒,就一切正常.
应该有些函数,可以手动发出桌面更新通知吧,用SLEEP感觉不靠谱,休眠少了不生效,休眠多了中间会停顿.

肯定有方法可以不用休眠的.

SHChangeNotify function
Notifies the system of an event that an application has performed. An application should use this function if it performs an action that may affect the Shell.

如果桌面自动排列图标,你可能无法这样调整排序

不知道排列桌面图标的目的是虾米,说一个思路,在创建新图标前,把位置腾出来.

现在的问题是创建快捷方式图标后,需要几秒才真正完成,之后才能排列图标.
我不知道什么时候算真正创建完成.

得先创建了图标,图标自动找到一个位置,之后才能排列图标啊.没办法直接创建图标到某个位置.

用SHChangeNotify通知系统SHELL有更改

SHChangeNotify(HCNE_ALLEVENTS, HChangeNotifyFlags.SHCNF_FLUSHNOWAIT, IntPtr.Zero, IntPtr.Zero);
SHChangeNotify(SHCNE_ASSOCCHANGED, HChangeNotifyFlags.SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero);

 

呃,好像有点误解你的意思了。你说的延迟一秒正常,是说那个循环里的ThreadSleep吧,把它拿到循环小蜜蜂论坛发帖机前可以吗?
试试开关一下自动排列图标?也许会重建图标index。你的方法好像不可靠,新图标的index不一定是1-17吧。

或可试用异步执行

拿到循环前也可以,创建图标后,桌面已经显示了图标. 这个时候立刻排序是没用的,我试过立刻查询桌面图标数目,显示图标数目是0,创建之前桌面图标都删 除了.我现在是建立了一个循环,反复查询桌面图标数目,不是零再排序就可以.但这种解决方法不太好.不知道有没有更好的方式.

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值