我正在编写一段代码,删除用户开始菜单中的额外文件夹。我首先删除它包含的所有快捷方式,然后删除文件夹本身。
完成此操作后,我可以确认快捷方式已从开始菜单中删除,但其包含的文件夹仍保留在开始菜单中。所以,我检查了文件系统中的这样一个文件夹,但没有找到。怀疑这是某种刷新问题,我将用户退出并重新登录Vista,发现该文件夹现已从开始菜单列表中删除。
多么令人讨厌...有没有人知道如何以编程方式强制Vista开始菜单的'刷新',以便用户在注销之前不会看到这个空文件夹?
谢谢, -ben
答案 0 :(得分:2)
这篇文章似乎有你想要的答案:
http://social.msdn.microsoft.com/forums/en-US/winforms/thread/ce540c7d-a113-4f39-956e-0af6bc91abd3/
答案是:
class Program
{
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr SendMessageTimeout ( IntPtr hWnd, int Msg, IntPtr wParam, string lParam, uint fuFlags, uint uTimeout, IntPtr lpdwResult );
private static readonly IntPtr HWND_BROADCAST = new IntPtr(0xffff);
private const int WM_SETTINGCHANGE = 0x1a;
private const int SMTO_ABORTIFHUNG = 0x0002;
static void Main ( string[] args )
{
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, IntPtr.Zero, null, SMTO_ABORTIFHUNG, 100, IntPtr.Zero);
}
}
答案 1 :(得分:2)
我自己试图实现这个,但是使用SendMessageTimeout没有按预期工作。
相反,它在我使用时起作用了 SHGetSpecialFolderLocation(CSIDL_STARTMENU) SHChangeNotify(SHCNE_UPDATEDIR,SHCNF_IDLIST,pidl,NULL);
有关示例c ++代码,请参阅此文章: http://support.microsoft.com/kb/q193293/
在带有SP1的Windows Server 2008 Enterprise(x86)上进行测试。