Только учусь winAPI, весь вечер вчера пытался написать программу, которая бы выключала экран и включала при нажатие на клавишу F2, код ниже. Проблема в том, что при появлении окошка нажимаю на ОК и программа закрывается, не выполняя мою функцию NewWndProc, подскажите, что делать? Решил выключать экран в цикле, т.к без него экран загорается при передвижении мышкой или нажатии на клавиатуру.
КОД С++
#include <Windows.h>
#include <conio.h>
#include <winuser.h>
struct project1 {
LONG pPrevProc;
}ppjct1;
LRESULT CALLBACK NewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
bool key = true;
while (key) {
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
switch (uMsg) {
case WM_KEYUP:
switch (wParam) {
case VK_F2:
{
key = false;
break;
}
}
}
}
return CallWindowProc(WNDPROC(ppjct1.pPrevProc), hwnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
MessageBox(NULL, (LPCWSTR)L"Programm is started!", (LPCWSTR)L"Screen killer", MB_OK);
ppjct1.pPrevProc = SetWindowLongPtr(NULL, GWL_WNDPROC, (LONG_PTR)NewWndProc);
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1);
}
Вызов SetWindowLongPtr с NULL в качестве первого параметра ничего не делает. Выключать монитор в цикле также бесполезно, так как он по факту будет все время включаться - выключаться. Если хотите выключать экран, то придется копать глубже и отключать его полностью.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники