Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
1-86429
Romeo
2003-12-14 00:36
2003.12.26
Винды не выключаются


1-86381
Tark1
2003-12-16 03:07
2003.12.26
WebBrower - как сохранить html страницу?


1-86423
V
2003-12-13 13:48
2003.12.26
как сделать заставку для программы?


3-86245
Philin
2003-12-04 08:30
2003.12.26
Как в DbGrid сделать ScrollBar типа Flat?


14-86538
blackman
2003-12-03 09:45
2003.12.26
Эволюция программиста..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский