Я пытаюсь зарегистрировать невидимое окно в консольном приложении Win32. Моя цель - прослушать Raw Input в WindowPro c, чтобы (1) отобразить его на консоли и (2) выполнить дополнительные вычисления, например, отправить информацию через веб-сокет. Я следил за этой статьей CodeProject , но моя WNDCLASSEX
регистрация кажется неудачной.
Вот код, который у меня есть:
подход 1 - регистрация не кажется для работы
Моя основная функция
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.lpfnWndProc = NVTouch_WindowProc;
wndclass.hInstance = GetModuleHandle(NULL);
wndclass.lpszClassName = L"myclass";
bool isClassRegistered = false;
isClassRegistered = RegisterClassEx(&wndclass);
if (isClassRegistered) //1
{
HWND window = CreateWindow(wndclass.lpszClassName, NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, GetModuleHandle(0), NULL);
if (window)
{
ShowWindow(window, SW_SHOWDEFAULT);
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
Моя функция WindowPro c:
static LRESULT CALLBACK NVTouch_WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
std::cout << "window Proc";
bool registrationStatus = false;
switch (message)
{
case WM_CREATE:
registrationStatus = registerTouchpadForInput();
break;
case WM_DESTROY:
std::cout << "destroying application.";
PostQuitMessage(0);
break;
case WM_INPUT:
std::cout << "input!";
break;
default:
std::cout << "default.";
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
Когда я устанавливаю точки останова в Visual Studio 2019, я замечаю скачки кода от //1
до //2
со статусом регистрации false
.
У меня была аналогичная реализация на основе этой статьи , где регистрация прошла успешно, но я не смог прослушивать сообщения WM_INPUT
.
подход 2 - создание окна работает, но сообщения WM_INPUT не читаются
int main()
{
WNDCLASSEX wndclass = {
sizeof(WNDCLASSEX),
CS_DBLCLKS,
NVTouch_WindowProc,
0,
0,
GetModuleHandle(0),
LoadIcon(0,IDI_APPLICATION),
LoadCursor(0,IDC_ARROW),
HBRUSH(COLOR_WINDOW + 1),
0,
L"myclass",
LoadIcon(0,IDI_APPLICATION)
};
bool isClassRegistered = false;
isClassRegistered = RegisterClassEx(&wndclass);
if (isClassRegistered)
{
std::cout << "window class registered!";
HWND window = CreateWindowEx(0, L"myclass", L"title", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, GetModuleHandle(0), 0);
if (window)
{
ShowWindow(window, SW_SHOWDEFAULT);
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
}
Я хочу идеально зарегистрировать класс и отобразить Raw Input на console (подход 1), но возможность выполнить этот модифицирующий код подхода 2 также будет работать.
Почему моя регистрация не выполняется в подходе 1? Почему я не могу прослушивать сообщения WM_INPUT
в подходе 2?