时间:2010-07-24 17:20:26

标签: delphi winapi shell

5 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

由于我不知道为什么SHGetSetSettings不起作用,因此不是一个答案。但是你可以做shell隐藏图标的工作;隐藏列表视图控件。

这是桌面的窗口层次结构;

'Program Manager' - Progman
  '' - SHELLDLL_DefView
    'FolderView' - SysListView32

'SysListView32'是显示图标的那个。


您可以测试并查看shell是否确实隐藏了列表视图;使用视图菜单中的“显示桌面图标”项隐藏图标,然后运行下面的

function GetDesktopListView: HWnd;
begin
  Result := GetWindow(GetWindow(FindWindow('Progman', nil), GW_CHILD), GW_CHILD);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowWindow(GetDesktopListView, SW_SHOW);
end;

,图标将再次显示。

由于您可以使用“SHGetSetSettings”检查/取消选中菜单项,因此图标的可见性将是 - 看似 - 符合。此外,您无需刷新桌面,因为可见性更改将立即生效。

答案 2 :(得分:0)

嗯,难道你不认为SHCNE_ASSOCCHANGED是错误的选择吗?

SHCNE_ASSOCCHANGED说“文件关联已更改”。您没有更改任何文件关联。您已更改 Shell设置。看到区别?

尝试使用SHCNE_ALLEVENTS(我也会尝试使用桌面SHCNE_UPDATEDIR和SHCNE_UPDATEITEM。)

答案 3 :(得分:0)

您是否尝试过广播WM_SETTINGCHANGE message

答案 4 :(得分:-1)