Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2009, 10:13   #1
Son
Пользователь
 
Аватар для Son
 
Регистрация: 24.11.2008
Сообщений: 76
По умолчанию Получить HWND рабочего стола без иконок

Доброго времени суток. Проблема такого рода: можно ли получить HWND рабочего стола, но только той области, где размещаются обои? Чтоб нарисовать например рисунок на рабочем столе, но он бы был под ярлыками.
Такой код:
Код:
var  DescHWND: HWND;
...
DescHWND := FindWindow('ProgMan', nil);
возвращает (в Delphi) хендел на весь рабочий стол вместе с иконками.
Заранее благодарен
Лучше сдохнуть, чем жить с иглой в яйце (Кащей Бессмертный)
Son вне форума Ответить с цитированием
Старый 24.06.2009, 14:39   #2
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Не так просто как кажется. Вот метод с использованием оверлеев DirectX:

http://delphimaster.ru/articles/directx/index.html
BaronTreep вне форума Ответить с цитированием
Старый 24.06.2009, 15:01   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Не так просто как кажется
Не так сложно как ты думаешь )

Код:
   function GetDesktopListViewHandle: THandle;
var

S: String;
begin

Result := FindWindow('ProgMan', nil);
Result := GetWindow(Result, GW_CHILD);
Result := GetWindow(Result, GW_CHILD);
SetLength(S, 40);
GetClassName(Result, PChar(S), 39);
if PChar(S) <> 'SysListView32' then Result := 0;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.06.2009, 15:08   #4
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Stilet! Подскажи пожалуйста, почему это неработает (рисует поверх):

Код:
function GetDesktopListViewHandle: THandle;
var
  S: String;
begin
  Result := FindWindow('ProgMan', nil);
  Result := GetWindow(Result, GW_CHILD);
  Result := GetWindow(Result, GW_CHILD);
  SetLength(S, 40);
  GetClassName(Result, PChar(S), 39);
  if PChar(S) <> 'SysListView32' then Result := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  dc: HDC;
begin
  dc := GetDC (GetDesktopListViewHandle);
  Rectangle (dc, 10, 10, 110, 110);
  ReleaseDC (Handle, dc);
  DeleteDC (DC);
end;
BaronTreep вне форума Ответить с цитированием
Старый 24.06.2009, 15:57   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А оно так и не будет работать. Чтоб отрисовка происходила под иконками сначала нужно заставить SysListView32 рисовать твой рисунок а потом уж и иконки.
Т.е. думаю тут только подменой процедуры обработки сообщений окна можно получить тот результ который, как я думаю, ты хочешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обои рабочего стола YakovN Мультимедиа в Delphi 1 13.03.2009 19:43
Разрешение рабочего стола. SanekIrk Общие вопросы Delphi 2 10.07.2008 18:01
Узнать размер рабочего стола Dj_smart Общие вопросы Delphi 3 26.03.2008 18:39
Фон рабочего стола. Rahim1993 Общие вопросы Delphi 11 17.02.2008 21:40
скриншоты рабочего стола Alar Общие вопросы Delphi 0 29.10.2006 10:59