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

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

            //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,创建之前桌面图标都删 除了.我现在是建立了一个循环,反复查询桌面图标数目,不是零再排序就可以.但这种解决方法不太好.不知道有没有更好的方式.

发布了27 篇原创文章 · 获赞 0 · 访问量 1080

猜你喜欢

转载自blog.csdn.net/netyou/article/details/104291400