Как получить / установить положение и размер значков на рабочем столе в Delphi? - PullRequest
1 голос
/ 25 декабря 2009

Мне нравится использовать большие значки на моем рабочем столе, но очень часто они возвращаются к нормальному размеру, до сих пор не могу понять почему :). Как программист, я решил написать свою собственную утилиту для сохранения и восстановления позиций значков. Погуглить вокруг не дает много информации. Кто-нибудь может дать мне подсказку или указать ссылку, с которой я мог бы начать?

Ответы [ 4 ]

2 голосов
/ 29 декабря 2009

Вы не можете надежно. Раймонд Чен объясняет, почему в этом посте.

По сути, это потому, что нет возможности заставить значок находиться в определенном месте на рабочем столе, то есть нет способа указать, где будет размещаться отдельный значок.

2 голосов
/ 26 декабря 2009

В какой-то момент, например, Win2k / WinXP, рабочий стол на самом деле был типом ListView. Я не уверен, что это все еще так в новых ОС. Зная, что было легко получить дескриптор рабочего стола, и с помощью API-функций LV манипулируют им, чтобы выполнять такие вещи, как отображение в стиле отчета.

Вот две функции, которые показывают, как начать манипулировать рабочим столом.

Примечание: я знаю, что это работает до WinXP, и я предполагаю, что это будет работать для Vista и Win7, но я не проверял это. Используя эти примеры, вам не понадобится много времени, чтобы написать набор функций для получения / установки положения значков всего на рабочем столе.

procedure ReportStyleDesktop;
var
  wHandle : THandle;
  wStyle : Longint;
begin
  wHandle := GetDesktopWindow;

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'Progman', 'Program Manager');

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'SHELLDLL_DefView', 0);

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'SysListView32', 0);

  if wHandle <> 0 then
  begin
    wStyle := GetWindowLong(wHandle, GWL_STYLE);
    wStyle := wStyle and (not LVS_TYPEMASK);
    wStyle := wStyle or LVS_REPORT or LVS_ICON;
    SetWindowLong(wHandle, GWL_STYLE, wStyle);
  end;
end;

procedure NormalStyleDesktop;
var
  wHandle : THandle;
  wStyle : Longint;
begin
  wHandle := GetDesktopWindow;

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'Progman', 'Program Manager');

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'SHELLDLL_DefView', 0);

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'SysListView32', 0);

  if wHandle <> 0 then
  begin
    wStyle := GetWindowLong(wHandle, GWL_STYLE);
    wStyle := wStyle and (not LVS_TYPEMASK);
    wStyle := wStyle or LVS_ICON;
    SetWindowLong(wHandle, GWL_STYLE, wStyle);
  end;
end;
1 голос
/ 25 декабря 2009

бесплатная утилита: http://winfuture.de/news,21608.html

0 голосов
/ 26 декабря 2009

прочитайте этот пост, возможно это поможет :) сохранить-и-восстановление-настольный значок-позиция

...