Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Desktop, Получение рабочего стола без фона 
:(
    Опции темы
php
Дата 2.8.2007, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



Как получить раб. стол т.е его снимок без фонового рисунка только иконки ну и сами окна  примеру ??
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
Virtuals
Дата 2.8.2007, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



никак, рисунок загружен в окно рабочего стола DC=0;
ну если только отключить фоновой рисунок, скопировать изображение, включить рисунок smile 
PM MAIL ICQ   Вверх
php
Дата 2.8.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



Да ну ерунда, я ведь уверен, что способ есть  smile 
Взять тот же RAdmin, PCAnywhere там ведь получение идёт частичное без фона, чем и разгружает траффик, вопрос как это можно реализовать ???
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
Alexeis
Дата 2.8.2007, 12:23 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



  Может получает картинку рабочего стола и вычитает из нее рабочий стол, затем все что нечерное заливает белым, после чего делает операцию AND с исходной, тогда рабочий стол удалиться а все остальное останется на месте.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bems
Дата 2.8.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



попробуй поработать с ним, как с обычным ListView


--------------------
Обижено школьников: 8
PM MAIL   Вверх
php
Дата 3.8.2007, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



Alexeis, bems вот это уже интересно поподробнее, плиз !
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
Alexeis
Дата 3.8.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



  Путь к обоям можно найти тут 
1)  HKEY_CURRENT_USER\Control Panel\Desktop\Wallpaper
  Это всегда будет битмап с битностью цвета такой какая установлена в системе.

2) битовые операции над картинками осуществляет функция BitBlt, параметры операции устанавливаются последним параметром.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
php
Дата 6.8.2007, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



Так и что нам это даёт? т.е мы можем преобразовать битмап с меньшей битностью, но как сделать его монотонным ? или я что-то не так понял??
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
BaD_SeCt0R
Дата 6.8.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lazy Coder
**


Профиль
Группа: Участник
Сообщений: 432
Регистрация: 9.10.2006
Где: Анапа

Репутация: 3
Всего: 18



Если суть в экономии трафика, и если нужны только иконки и окна, то можно просто составить список иконок, их мест, а также по дескрипторам окон составить запись всех контролов этих окон. Это, конечно, будет работать в случае, если окон не много. А так Alexeis прежложил, помоему очень неплохой вариант. Юзай BitBlt/TransparentBlt smile 


--------------------
Кто владеет информацией - владеет миром. (С) Френсис Бэкон.
PM MAIL ICQ   Вверх
php
Дата 7.8.2007, 04:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



Согласен вариант очень неплохой только не могу реализовать, может поможете ??
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
Alexeis
Дата 7.8.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Код

type
  BGRALine = array[0..32000] of Cardinal;
  PBGRALine = ^BGRALine;

procedure TForm1.Button1Click(Sender: TObject);
var
 r      : TRegistry;
 w      : AnsiString;
 b1, b2,
 b3     : Tbitmap;
 dc     : hDC;
 p1, p2 : PBGRALine;
 i, j   : Integer;
 c      : Cardinal;
begin
  r := TRegistry.Create;
  r.RootKey := HKEY_CURRENT_USER;
  r.OpenKey('Control Panel\Desktop', false);
  w := r.ReadString('Wallpaper');

  if FileExists(w)
  then
    Begin
      b1 := Tbitmap.Create;
      b1.LoadFromFile(w);
      b2 := Tbitmap.Create;
      b2.Width  := Screen.Width;
      b2.Height := Screen.Height;
      DC        := GetDC(0);
      BitBlt(b2.Canvas.Handle, 0, 0, b2.Width, b2.Height,
             DC, 0, 0, SRCCOPY);
      ReleaseDC(0, DC);
      b2.SaveToFile('C:\1.bmp');
      b3        := Tbitmap.Create;
      b3.Assign(b2);

      b1.PixelFormat := pf32bit;
      b2.PixelFormat := pf32bit;
      for I := 0 to b2.Height - 1
      do
        Begin
          p1 := b1.ScanLine[i];
          p2 := b2.ScanLine[i];
          for j := 0 to b2.Width - 1
          do
            if p1[j] <> p2[j]
            then
              p2[j] := $00FFFFFF
            else
              p2[j] := $00000000;
        End;

      BitBlt(b3.Canvas.Handle, 0, 0, b3.Width, b3.Height,
             b2.Canvas.Handle, 0, 0, SRCAND);
      b3.SaveToFile('C:\1.bmp');
      b1.Free;
      b2.Free;
      b3.Free;
    End;
end;


Есть проблемы. Если исходная картинка для обоев была другого размера, то работать не будет, а сделать стретч так же как винда не получается, да и не получиться ведь в зависимости от версии метод сжатия/растяжения может меняться. Исходный формат не имеет значения, так как винда все равно конвертит его в BMP, а вот как бы найти ее кэшированую картинку... 
Ну впрочем можно проверять если картинка отличается от размеров рабочего стола, то не применять методику.

Вот, а вот результирующая pngшка сжалась до 32кб. см. Атач.

Это сообщение отредактировал(а) Alexeis - 7.8.2007, 11:52

Присоединённый файл ( Кол-во скачиваний: 28 )
Присоединённый файл  2.png 31,65 Kb


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Virtuals
Дата 7.8.2007, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



сам же себя и опровергаю // смотрим ЗЫ
о нашел нечто похожее, сам бился над проблемой получения окна скрытого другим,
решение
_+_+_+
function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; stdcall;

implementation

function PrintWindow; external user32 name 'PrintWindow';
+_+_+_+_

PrintWindow(findwindow('Progman',nil), PaintBox2.Canvas.Handle, 0);

\\но именно с progmanom какието глюки

ща расковыриваю функцию PrintWindow \\ ни разу не видел ее

и в 2000 исходниках не находил smile [QUOTE]

она заставляет приложение отрисоватся в другом месте, (и иногда приложение забывает где правильно рисовать smile )
ЗЫ короче рисунок находится на DC=0
а иконки на окне 'Progman' (прозрачном)

dash1 

Это сообщение отредактировал(а) Virtuals - 7.8.2007, 19:07
PM MAIL ICQ   Вверх
php
Дата 8.8.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



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

Щас тоже буду думать как оптимизировать это дело позже сообщу о результатах....
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
php
Дата 8.8.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.2.2003

Репутация: нет
Всего: 3



Да кстати тут ещё одну приколюху нашёл немного не затирается рисунок вокруг
надписей у иконок  smile , это от чего может быть такой эффект ?
--------------------
Джедаи не пройдут..
PM MAIL   Вверх
Alexeis
Дата 8.8.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



  Ну тут проблема с альфа-каналом думаю, с одной стороны цвет отличается от картинки, с другой содержит ее часть, так что как-то так...


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0973 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.