Для этого нужно найти окно "SysListView32" (которое является списком, который содержит иконки рабочего стола). Сперва будем искать главное родительское окно "Progman", которое содержит дочернее окно "SHELLDLL_DefView" , которое в свою очередь имеет дочернее окно "SysListView32". Для этого можно воспользоваться API функцией FindWindow to. Когда Мы получим дескриптор окна "SysListView32", то можно будет воспользоваться макросами ListView_SetTextBkColor и ListView_SetTextColor для установки желаемого цвета.

 

Ниже приведена процедура, которая делает всё вышеперечисленное. Если параметр Trans равен true, то будет установлен прозрачный фон, иначе цвет фона будет равен Background.

Code:

unit DeskIcons;

 

interface

uses Graphics; // Будет использоваться TColor

 

procedure SetDesktopIconColor(Forground, Background: TColor; Trans: Boolean);

procedure SetDefaultIconColors;

 

implementation

uses Windows, CommCtrl; // будут использоваться HWND и ListView_XXXXX

 

procedure SetDesktopIconColor(Forground, Background: TColor; Trans: Boolean);

 

var

Window: HWND;

begin

// Находим нужное окно в три этапа

Window := FindWindow('Progman', 'Program Manager');

// Используем FindWindowEx для нахождения дочернего окна

Window := FindWindowEx(Window, HWND(nil), 'SHELLDLL_DefView', '');

// SysListView32, это список с иконками на рабочем столе

Window := FindWindowEx(Window, HWND(nil), 'SysListView32', '');

// Используем макрос для очистки цвета фона

if Trans then

   ListView_SetTextBkColor(Window, $ffffffff) // фоновый цвет

else

   ListView_SetTextBkColor(Window, Background); // фоновый цвет

ListView_SetTextColor(Window, Forground); // передний цвет

// теперь перерисовываем иконки

ListView_RedrawItems(Window, 0, ListView_GetItemCount(Window) - 1);

UpdateWindow(Window);   // даём команду "немедленно перерисовать"

end;

 

procedure SetDefaultIconColors;

{ Эта процедура устанавливает цвета, которые заданы в

windows по умолчанию }

var

Kind: Integer;

Color: TColor;

begin

Kind := COLOR_DESKTOP;

Color := GetSysColor(COLOR_DESKTOP);

SetSysColors(1, Kind, Color);

end;

 

end.

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить