Как сделать так, чтобы настройка «показать / скрыть значки рабочего стола» вступила в силу? - PullRequest
2 голосов
/ 24 июля 2010

Код ниже вызывает функцию SHGetSetSettings, чтобы скрыть значки на рабочем столе. но он просто снял флажок «Показать значки рабочего стола» в меню просмотра.

Я позвонил SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSHNOWAIT, nil, nil); обновить рабочий стол, но это не работает?

var
lpss: SHELLSTATE;
begin
  lpss.Data := High(cardinal);
  lpss.Data2 := Low(cardinal);
  SHGetSetSettings(lpss,SSF_HIDEICONS,true);
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSHNOWAIT, nil, nil);
end;

Ответы [ 5 ]

1 голос
/ 24 июля 2010

isa, для обновления рабочего стола вы можете отправить клавишу F5 в окно progman (Диспетчер программ)

PostMessage(FindWindow('Progman', nil), WM_KEYDOWN, VK_F5, 3);

другая альтернатива для скрытия значков на рабочем столе -

ShowWindow(FindWindow('Progman', nil),SW_HIDE); //hide the icons desktop and refresh the screen

чтобы показать снова

ShowWindow(FindWindow('Progman', nil),SW_SHOW); //show the icons of the desktop and refresh
0 голосов
/ 21 августа 2010

Вы пытались передать WM_SETTINGCHANGE сообщение ?

0 голосов
/ 14 августа 2010

Хмм, вы не думаете, что SHCNE_ASSOCCHANGED - неправильный выбор?

SHCNE_ASSOCCHANGED говорит "ассоциация файлов была изменена". Вы не изменили файловую ассоциацию . Вы изменили Настройки оболочки . Видишь разницу?

Вместо этого попробуйте SHCNE_ALLEVENTS (я бы также попробовал SHCNE_UPDATEDIR и SHCNE_UPDATEITEM с рабочим столом).

0 голосов
/ 04 августа 2010

Не совсем ответ, так как я не знаю, почему SHGetSetSettings не работает.Однако вы можете сделать то, что делает оболочка, чтобы скрыть значки;скрыть элемент управления List-View .

Это окно иерархии рабочего стола;

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

SysListView32 - это изображение, отображающее значки.оболочка действительно скрывает представление списка;скройте значки с элементом «показать значки на рабочем столе» в меню просмотра, затем запустите ниже,

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», видимость значков будет - на первый взгляд - в соответствии.Кроме того, вам не нужно обновлять рабочий стол, поскольку изменение видимости вступит в силу немедленно.

0 голосов
/ 25 июля 2010

Чтобы скрыть или показать значки на рабочем столе:

Procedure DesktopIcons(Const Show : Boolean);
 Var
   h : HWND;
 begin
   h := GetWindow(FindWindow('Progman', 'Program Manager'), GW_CHILD);
   If Show then ShowWindow(h, SW_SHOW)
    else ShowWindow(h, SW_HIDE);
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...