Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | | | |
"когда в системе не не одного пользователя " 24.03.06 12:31 Число просмотров: 2733
Автор: Killer{R} <Dmitry> Статус: Elderman
|
Это значит что активен десктоп винлогон. А апликухи находятся на десктопе дефолт. Скрниншот неактивного десктопа НЕЛЬЗЯ снять обычным способом (те если внутри неактивного десктопа будет апликуха дергающая скриншоты она ниче оттуда не дернет).
|
<programming>
|
[C++] screenshort capture ? 24.03.06 00:48
Автор: Tamas Статус: Member Отредактировано 24.03.06 00:49 Количество правок: 1
|
есть тут такой интересный вопросик КАК СДЕЛАТЬ СКРИНШОРТ ЭКРАНА когда в системе не не одного пользователя ??? прога которя его должна делать работает как сервис
я использую вот такой код
bool CaptureScreenShort(void **HBitmap)
{
void *HDCScreen;
void *HDCCompatible;
int Width;
int Height;
if((HDCScreen=GetDC(GetDesktopWindow()))==NULL)return false;
Width=GetDeviceCaps(HDCScreen,HORZRES);
Height=GetDeviceCaps(HDCScreen,VERTRES);
if((HDCCompatible=CreateCompatibleDC(HDCScreen))==NULL)
{
DeleteDC(HDCScreen);
return false;
}
if((*HBitmap=CreateCompatibleBitmap(HDCScreen,Width,Height))==NULL)
{
DeleteDC(HDCScreen);
DeleteDC(HDCCompatible);
return false;
}
if(!SelectObject(HDCCompatible,*HBitmap))
{
DeleteDC(HDCScreen);
DeleteDC(HDCCompatible);
DeleteObject(*HBitmap);
return false;
}
if(!BitBlt(HDCCompatible,0,0,Width,Height,HDCScreen,0,0,SRCCOPY))
{
DeleteDC(HDCScreen);
DeleteDC(HDCCompatible);
DeleteObject(*HBitmap);
return false;
}
DeleteDC(HDCScreen);
DeleteDC(HDCCompatible);
return true;
}
если в системе некого нет GetDesktopWindow() возвращяет NULL :-(
|
|
Так не снимешь 24.03.06 01:11
Автор: Killer{R} <Dmitry> Статус: Elderman
|
думаю проще всего будет воспользоваться функцией PrintWindow (Win'XP+) либо внедрятся в каждый процесс и слеть окнам WM_PRINT
|
| |
но ведь по идеи на эртане всё равно есть окно.... как... 24.03.06 01:29
Автор: Tamas Статус: Member
|
> думаю проще всего будет воспользоваться функцией > PrintWindow (Win'XP+) либо внедрятся в каждый процесс и > слеть окнам WM_PRINT
но ведь по идеи на эртане всё равно есть окно.... как получить его хендел ???
а точьнее как опредилить что это главное окно ?
|
| | |
Нужно работать с оконными станциями... Я уже давно не лазил в эти виндовозные дебри, но идея примерно такая: 24.03.06 07:47
Автор: HandleX <Александр М.> Статус: The Elderman
|
Для того, чтобы снять снимок с декстопа, в котором болтается виндовозная GINA (окно входа в систему), тебе экспериментальным путём нужно перечислить используя EnumWindowSations() рабочие станции в системе, запустить отдельный процесс в этой WindowStation, подключиться к текущему в этой рабочей станции Desktop, и снять там снимок экрана. Почитай Window Station and Desktop Reference в MSDN.
|
| | | |
Не получится 24.03.06 11:11
Автор: Killer{R} <Dmitry> Статус: Elderman
|
У невидимых окон (у тех что на неинтерактивном десктопе) пустые DC. Имеющие clipping region (0,0). Соответственно такие окна ничего никуда не рисуют как их не проси. Надо предоставить им нормальный DC куда рисовать.
|
| | | | |
Товаристч-автор корневого поста не говорит о том, что окна невидимые, он говорит о том, что на экране GINA. Видимая :) 24.03.06 12:19
Автор: HandleX <Александр М.> Статус: The Elderman
|
|
| | | | | |
"когда в системе не не одного пользователя " 24.03.06 12:31
Автор: Killer{R} <Dmitry> Статус: Elderman
|
Это значит что активен десктоп винлогон. А апликухи находятся на десктопе дефолт. Скрниншот неактивного десктопа НЕЛЬЗЯ снять обычным способом (те если внутри неактивного десктопа будет апликуха дергающая скриншоты она ниче оттуда не дернет).
|
|
|