С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 5

Получение WinAPI сообщения для экрана блокировки системы и диспетчера задач в Win 8

10.04.2015, 20:14. Показов 1675. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток всем. Поискал по форуму подобный вопрос, и похоже что нужного ответа не нашел.
Перехват блокировки windows, Win+L тыкался вот сюда для начала.

Суть вопроса. Я пишу игру с использованием FMOD. Мне надо сообщать ему(движку звука), что приложение не активно. И все хорошо, пока я не понял что при нажатии ctrl+alt+del в Win 8 приложение не узнает о том, что оно скрыто. И продолжает делать свой апдейт. Не подскажите ли, какой месседж от системы я могу получить от системы чтобы понять что поверх игры открыто это окно? Еще это возникает при нажатии win+l, соотвественно происходит блокировка компьютера.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2015, 20:14
Ответы с готовыми решениями:

Как скрыть программу с экрана и вкладки "Приложения" диспетчера задач
собственно пишу простую софтину. интерфейса нет почти никакого. notifyIcon разве что.. хочу сделать так, чтобы при запуске программы,...

Медленная загрузка системы, нагрузка на систему после запуска, спад нагрузки при открытии диспетчера задач
Доброго времени суток. Столкнулся со следующей проблемой: система начала долго загружаться, в автозапуске почти всё отключено. После...

Получение информации из столбца "Командная строка" диспетчера задач
Получаю запущенных список процессов Process procList = Process.GetProcesses(); В диспетчере задач есть столбец...

8
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
10.04.2015, 22:34
Лучший ответ Сообщение было отмечено Убежденный как решение

Решение

Вероятно нужно функцией WTSRegisterSessionNotification подписать свое окно на получение сообщения WM_WTSSESSION_CHANGE и обрабатывать его проверяя по wParam == WTS_SESSION_LOCK
2
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 5
11.04.2015, 03:02  [ТС]
Спасибо. Это думаю сможет решить часть проблемы. Возможно есть идеи на счет окна ctrl+alt+del? Или же это сообщение прийдет в обоих случаях?
0
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
11.04.2015, 09:21
При Ctrl+Alt+Del, как и при потере фокуса, приложение получит сообщение WM_ACTIVATE c параметром WA_INACTIVE.
1
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 5
11.04.2015, 19:34  [ТС]
Я конечно понимаю, что это элементарно. Но походу движок внутри себя или не ловит это(что странно) или ловит иначе. Используется PlayGround от PlayFirst. Жаль исходников реализации под платформу винды нету. И отловить потерю возможно будет только при наличии доступа к циклу сообщений?
0
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
11.04.2015, 20:01
Тут уж не знаю это надо в SDK движка смотреть, какие возможности и в каком виде он предоставляет.
По играм вот этот раздел форума.
0
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 5
14.04.2015, 03:15  [ТС]
Привет. Все еще пока не получается с этой обработкой сообщений у меня.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
...
        DWORD threadID = GetCurrentThreadId();
 
    gApp.mhInstDll = LoadLibrary(TEXT("HookHelper.dll"));
 
    void (*AttachHookProc)(DWORD, WndProcP);
    AttachHookProc = (void (*)(DWORD, WndProcP)) GetProcAddress(gApp.mhInstDll, "AttachHook"); 
    AttachHookProc(threadID, CallWndProc);
....
 
LRESULT 
cApplication::CallWndProc(_In_ int nCode, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
    if (nCode < 0)  // do not process message 
        return CallNextHookEx(NULL, nCode, wParam, lParam); 
    CWPSTRUCT* msg = (CWPSTRUCT*)lParam;
    int i =0;
    switch(nCode)
    {
         case HC_ACTION:
             switch(msg->message)
             {
             case WM_ACTIVATEAPP : case WM_ACTIVATE:
                 gApp.SetActive(LOWORD(msg->wParam) != 0);
                 break;
             case WM_WTSSESSION_CHANGE:
                 if (msg->lParam == WTS_SESSION_UNLOCK)
                 {
                     gApp.SetActive(true);
                 }
                 else if (msg->lParam == WTS_SESSION_LOCK)
                 {
                     gApp.SetActive(false);
                 }
                 break;
             default:
                 break;
             }
             break;
         default:
             break;
    }
    return CallNextHookEx(NULL, nCode, wParam, lParam); 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.....
__declspec(dllexport) void AttachHook(DWORD threadID, WndProcP Callback) {
        hook = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, thisModule, threadID);
        m_CallBackHook = Callback;
    }
    __declspec(dllexport) void DetachHook() {
        UnhookWindowsHookEx(hook);
    }
#ifdef __cplusplus
}
#endif
//--------------------------------------------------------------------------------------
LRESULT CALLBACK 
CallWndProc(_In_ int nCode, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
    if (m_CallBackHook)
    {
        return m_CallBackHook(nCode, wParam, lParam);
    }
    return CallNextHookEx(hook, nCode, wParam, lParam);
}
Я вот так привязываюсь к циклу обработки сообщений, так как прямого доступа у меня все еще нет. Но увы приложение при вызове ctrl+alt+del окна(с выбором, что делать дальше) не ставится на паузу. Возможно я что-то упустил? Код колбека находится в dll как уже видно, по рекомендациям MS
0
 Аватар для rao
903 / 424 / 159
Регистрация: 02.04.2014
Сообщений: 1,206
14.04.2015, 19:42
Нее, с хуками это уже перебор.
В википедии пишут, что Playground SDK под виндовсом работает на DirectX. А это уже не GDI и обработка оконных сообщений там происходит по своему. Т.е. надо разбираться с DirectX. Никогда с ним не работал, ничем помочь не могу.
0
0 / 0 / 0
Регистрация: 10.04.2015
Сообщений: 5
15.04.2015, 10:21  [ТС]
В википедии пишут, что Playground SDK под виндовсом работает на DirectX. А это уже не GDI и обработка оконных сообщений там происходит по своему.
Приложения на DirectX это все те же окна, и они получают все те же сообщения. Просто на WM_PAINT Direct3D рисует в окно свой буфер(намного быстрее чем gdi).

В любом случае спасибо за ответы. Проблему решил, немного иначе. Запустил отдельный тред который следит за тредом апдейтом движка, если тред паузится(что внутри движка видимо и происходит при локе компа), то паузится и тред звука. И наоборот.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2015, 10:21
Помогаю со студенческими работами здесь

Необходима утилита для вкл. диспетчера задач
Всем доброго времени суток! Уважаемые, подскажите! С помощью какой утилиты можно включить Диспетчер задач, заранее заблокированным...

Как сделать программу невидиммой для диспетчера задач?
Помогите.Скажите код чтобы при запуске программа не была видна в диспетчере задач.

Политика обоев экрана блокировки для Windows 10
Здравствуйте! Имеется win server 2003 sbs Имеются парк машин на хп 7 и 10. Прописал корпоративные обои, обои заменились везде,...

Как изменить фон экрана рабочего стола либо экрана блокировки?
Как изменить фон экрана рабочего стола либо экрана блокировки? Выбрав фотку из альбома к примеру. Или из папки какой-то.

Функция для блокировки системы и смены пользователя
Доброго времени суток. В моем распоряжении есть коды для выполнения задач связаных с завершением работы сеанса ПК на vb.net. Эти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru