Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

Сделать скриншот чистого рабочего стола.   Найти похожие ветки 

 
pasha_golub ©   (2003-12-01 18:21) [0]

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

1. Свернуть окна.
2. Сделать скриншот стола.
3. Развернуть.

Хотелось бы 1 и 3 не делать, вообще думаю вопрос понятен.


 
VictorT ©   (2003-12-01 18:56) [1]

Может попробовать вместо сворачивания окон попробовать их скрывать (ShowWindow(SW_HIDE)), чтоб не происходило анимированное сворачивание, процесс быстрее пройдёт, менее заметно для пользователя.


 
Rouse_ ©   (2003-12-01 19:35) [2]

А можно создать битмап на него поместить сами обои, пройтись по иконкам, узнать их местоположение и отрисовать на битмапе.
Как это делается - есть у Рихтера...

Желаю успехов


 
Дремучий ©   (2003-12-01 21:59) [3]

может быть так?

1. получить доступ к канвасу десктопа
2. скопировать с канваса битмап в свой битмап
3. сохранить свой битмап


 
pasha_golub ©   (2003-12-02 10:45) [4]

2VictorT
Попробую

2Rouse_
Интересная идея, спасибо

2Дремучий

Делаю так

var Canvas: TCanvas;
begin
Canvas := TCanvas.Create;
try
Canvas.Handle := GetDC(0);
//тут копирую
finally
Canvas.free;
end;
end;

Такой код копирует вместе с изображением окон. Может имелось в виду по-другому?


 
SPeller ©   (2003-12-02 11:08) [5]


> Дремучий © (01.12.03 21:59) [3]
> может быть так?
>
> 1. получить доступ к канвасу десктопа
> 2. скопировать с канваса битмап в свой битмап
> 3. сохранить свой битмап

Все окна являются дочерними десктопа, поэтому и рисунок канвы десктопа будет с этими окнами. Можно попробовать перехватить сообщение WM_PAINT и подсунуть свой контекст для отрисовки.


 
pasha_golub ©   (2003-12-02 11:25) [6]

2SPeller
У чего перехватывать? У десктопа? Поподробней, если можно, пожалуйста.


 
DVM ©   (2003-12-02 12:21) [7]

PaintDesktop - но это без иконок.


 
pasha_golub ©   (2003-12-02 15:06) [8]

2DVM
Да, действительно отмалевывает. Спасибо, функция какая-то скрытная, в хелпе нету, пришлось в MSDN лезть.


 
pasha_golub ©   (2003-12-02 17:34) [9]

Ну тоды разрешите задать вопрос глобальней. Каким образом сделать скриншот, низлежащего окна, то есть перекрытого другими окнами, не меняя порядок расположения окон. То есть окно как было перекрыто другими, так и остается.

Общая задача такова. Надо сделать скриншоты всех окон на рабочем столе, но не причиняя неудобства пользователю, без перестановок, морганий и прочего.


 
han_malign ©   (2003-12-02 18:04) [10]

Может это:
The WM_PRINT message is sent to a window to request that it draw itself in the specified device context, most commonly in a printer device context.

WM_PRINT
hdc = (HDC) wParam;
uFlags = lParam;


Parameters

hdc

Identifies the device context to draw in.

uFlags

Specifies the drawing options. This parameter can be one or more of these flags:

Value Meaning
PRF_CHECKVISIBLE Draw the window only if it is visible.
PRF_CHILDREN Draw all visible children windows.
PRF_CLIENT Draw the client area of the window.
PRF_ERASEBKGND Erase the background before drawing the window.
PRF_NONCLIENT Draw the nonclient area of the window.
PRF_OWNED Draw all owned windows.


 
pasha_golub ©   (2003-12-03 09:58) [11]

2han_malign
Спасибки, может и оно. Ща проверю


 
pasha_golub ©   (2003-12-03 13:41) [12]


procedure TForm1.Button1Click(Sender: TObject);
var
lP: Cardinal;
begin
lP := PRF_CHILDREN or PRF_CLIENT or
PRF_NONCLIENT or PRF_OWNED;
SendMessage(Handle,WM_PAINT,Image1.Canvas.Handle,lP);
end;


Вот таким вот образом пробовал. Не вышло, однако. Есть подозрение, что сообщение это никто не обрабатывает. Рылся в VCL, искал обработчик - не нашел. Вот не пойму я чего-то.


 
REA ©   (2003-12-03 14:36) [13]

The PrintWindow function copies a visual window into the specified device context (DC), typically a printer DC
This function is similar to WM_PRINT. Before calling PrintWindow, first select a bitmap into hdcBlt.


 
REA ©   (2003-12-03 14:37) [14]

упс. W98 unsupported


 
pasha_golub ©   (2003-12-03 17:21) [15]

2REA
Все равно спасибо. Взгляну



Страницы: 1 вся ветка

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
7-86573
RustiK
2003-10-10 14:15
2003.12.26
Регистрация языка


1-86364
AlexNx
2003-12-15 17:35
2003.12.26
Modal or not Modal


1-86359
Talla2k
2003-12-12 12:50
2003.12.26
shellAPI(с блокнотом)


3-86286
Вурдалак
2003-12-02 21:50
2003.12.26
Locate


1-86442
dust
2003-12-13 09:23
2003.12.26
Как сделать кнопки на панели инструментов без надписей ???