Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Подскажите API для затемнения рабочего стола, как при выключении/выходе Win  (Прочитано 16048 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
dark_rain
Помогающий

ua
Offline Offline
Пол: Мужской

« : 09-03-2012 17:02 » new

Суть проблемы изложена в названии темы, нужна апишка, для того, что бы показать диалог, подобный UAC, с затемненным остальным монитором, и неактивным рабочим столом в это время. Благодарю.  Улыбаюсь
Записан
zubr
Гость
« Ответ #1 : 09-03-2012 17:03 » 

Не иначе локер...
Записан
dark_rain
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #2 : 09-03-2012 19:53 » 

нашел на rsdn такой пример, но как по мне он не очень удачен, во-первых ddraw.lib устарела и не входит в состав последнего SDK, а во-вторых:
Цитата
не запускайте при глубине цвета != 32 bpp!!!  Тут нет никаких проверок, по хорошему, нужно смотреть поле ddpfPixelFormat в DDSURFACEDESC2
  - цитата с форума.


Код: (C++)
#define INITGUID
#include <ddraw.h>
#include <windows.h>
#pragma comment(lib, "ddraw.lib")

void shade()
{
    IDirectDraw7          * direct_draw;
    IDirectDrawSurface7   * primary_surface;
    DDSURFACEDESC2          surface_descriptor = { sizeof(surface_descriptor) };

    DirectDrawCreateEx(0, (void**)&direct_draw, IID_IDirectDraw7, 0);

    direct_draw->SetCooperativeLevel(0, DDSCL_NORMAL);

    surface_descriptor.dwFlags = DDSD_CAPS;
    surface_descriptor.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;

    direct_draw->CreateSurface(&surface_descriptor, &primary_surface, NULL);

    primary_surface->Lock(0, &surface_descriptor, 0, 0);
    void * memory = surface_descriptor.lpSurface;

    for( int dy = surface_descriptor.dwHeight;
         dy;
         dy--, memory = (char *)memory + surface_descriptor.lPitch )
    {
        for( int dx = surface_descriptor.dwWidth; dx; --dx )
            if ( (dx ^ dy) & 1 )
                *((int *)memory + dx) = -1;  
    }
    primary_surface->Unlock(0);
}

P.S. Не копипастер, не плагиатчик, поэтому приведу ссылку на источник: http://www.rsdn.ru/forum/winapi/1389656.flat.aspx, если администрацией запрещено, удалите.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 09-03-2012 20:34 » 

dark_rain, а давай начнем традиционно: 1) зачем? 2) какие условия? 3) какие требования?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
dark_rain
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #4 : 09-03-2012 22:45 » 

Все по порядку: 1) есть анинсталлятор, когда его запускаем происходит действие аналогичное uac, все серенькое, красивое окошко с надписью "вы чо блин серьезно хотите это сделать?",  две кнопки (да/нет) 2) условия просты: стабильно работает, просто реализуется 3) требования : не фликерит, на vista/seven похоже на uac, на xp похоже на модальное окно завершить/перезагрузить/усыпить (когда рабочий стол медленно сереет на фоне).
P. s. Проект из отрасли белой магии, ничего вредоносного и запрещенного я не делаю Улыбаюсь
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 09-03-2012 22:55 » 

Ты описал не условия, а требования.

Т.е. хочешь чисто рюшечки, без какого-либо смысла?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zubr
Гость
« Ответ #6 : 09-03-2012 23:02 » 

1. Зачем для анинсталлятора такая лабуда?
2. Рабочий стол должен блокироваться?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 10-03-2012 06:42 » 

zubr, чтоб юзер впечатлился, испугался и не удалял Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
dark_rain
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #8 : 10-03-2012 07:47 » 

Dimka, +1, впечатительность имеет место быть.
zubr, Пожелание администрации , я обычный жуниор. Стол, даже не знаю, наверное да, иначе окошко не будет модальным. Поможете?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 10-03-2012 09:13 » 

dark_rain, дешёвые понты - не помогу.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
zubr
Гость
« Ответ #10 : 10-03-2012 09:35 » 

Для эффекта затемнения, имхо, лучше воспользоваться GDI+. Смотри в сторону ImageAttributes::SetColorMatrices
« Последнее редактирование: 10-03-2012 09:37 от zubr » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #11 : 10-03-2012 10:57 » 

А не легче ли, сделать полноэкранное полу-прозрачное окно и от него открыть уже модальное окно.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
zubr
Гость
« Ответ #12 : 10-03-2012 11:09 » 

Finch, согласен, так проще будет, правда от прозрачности эффект немного другой.
Записан
dark_rain
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #13 : 10-03-2012 11:12 » 

Как поведет себя прозрачность на win xp?
Dimka, пусть и понты, "я обычный парикмахер, лицемерие мне не чуждо" Улыбаюсь Мне сказали - я делаю, для меня это не более чем задание.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 10-03-2012 14:06 » 

Как поведет себя прозрачность на win xp?
она там есть, инфа 100%
Записан

Clyde
Интересующийся

ee
Offline Offline

« Ответ #15 : 18-03-2012 16:51 » 

SetLayeredWindowAttributes не?
Записан
dark_rain
Помогающий

ua
Offline Offline
Пол: Мужской

« Ответ #16 : 27-03-2012 09:48 » 

SetLayeredWindowAttributes не?
Таки да, так и сделано было. Вопрос давно решен.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines