清除Run命令行?微软源代码
清除Run命令行?
如果
RegDeleteKey(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU"));
那么Run命令行中的东西仍然存在,这时需要注销,重起或者重起Explorer,
更可笑的是MSDN中说,执行开机/关机/然后再取消,也可以。我试了,确实可以
但是微软的在任务栏右键属性\"任务栏和开始菜单属性"\清除列表却可以清除,而不需要上面的那些操作,Run命令行中的东西就没有了.
查到微软源代码中清除列表对应下面的:
win2ksrc\private\shell\explorer\cfgstart.c
const TCHAR *c_szRegMruKeysToDelete[] =
{
TEXT("Software\\Microsoft\\Internet Explorer\\TypedURLs"),
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU"),
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Doc Find Spec MRU")
};
void ClearRecentDocumentsAndMRUStuff(BOOL fBroadcastChange)
{
int i;
SHAddToRecentDocs(0, NULL);
// Flush other MRUs in the registry for privacy
for (i = 0; i < ARRAYSIZE(c_szRegMruKeysToDelete); i++) {
RegDeleteKey(HKEY_CURRENT_USER, c_szRegMruKeysToDelete[i]);
if (fBroadcastChange)
SHSendMessageBroadcast(WM_SETTINGCHANGE, 0,
(LPARAM)c_szRegMruKeysToDelete[i]); //内部实现,调用SendMessageTimeOut函数
}
}
但是实际上我用程序实现获取WM_SETTINGCHANGE,获得了5个消息,另外两个是清除最近打开或保存文档位置的注册表。
搞不明白。我自己Broad Message也无法清除命令行中的东西