PostMessage не удалось отправить нажатия клавиш

Я написал небольшой глобальный хук, чтобы можно было обрабатывать ввод с клавиатуры и мыши. Я хотел бы иметь возможность выводить нажатия клавиш при перемещении мыши, но до сих пор мне не удавалось отправить нажатия клавиш в любое окно верхнего уровня. Единственное, что я могу себе представить, это то, что мои биты верны как lParam PostMessage (), но я перечитал документы, и, похоже, это должен быть правильный порядок. Я пробовал это в блокноте, Chrome, Microsoft Word и некоторых других программах и не смог заставить его работать, поэтому я заблудился.

Вот что у меня так далеко

HHOOK hMouseHook;
MOUSEHOOKSTRUCT previousMouseEventData;int main(int argc, char** argv)
{
HANDLE hThread;
DWORD dwThread;

hThread = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)setHooks, (LPVOID)argv[0], NULL, &dwThread);if (hThread)
return WaitForSingleObject(hThread, INFINITE);
}

DWORD WINAPI setHooks(LPVOID lpParm)
{
HINSTANCE hInstance = GetModuleHandle(NULL);
if (!hInstance)
hInstance = LoadLibrary((LPCWSTR)lpParm);
if (!hInstance)
return -1;hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC)MouseEvent, hInstance, NULL);
MessageLoop();UnhookWindowsHookEx(hMouseHook);
return 0;
}

void MessageLoop()
{
MSG message;
while (GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
}

-Насколько я вижу, это должно работать

_declspec(dllexport) LRESULT CALLBACK MouseEvent(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
try {
MOUSEHOOKSTRUCT newMouseEventData = *(MOUSEHOOKSTRUCT*)lParam;

if (newMouseEventData.hwnd == previousMouseEventData.hwnd &&
newMouseEventData.pt.x != previousMouseEventData.pt.x)
{
int xChange = newMouseEventData.pt.x - previousMouseEventData.pt.x;
//Mouse movement left
if (xChange < 0)
{
cout << "Mouse left" << endl;//A press down
//0 1 0 0 0000 01100001 0000000000000000
int keydownLparam = 0b01000000011000010000000000000000;

if (!PostMessage(newMouseEventData.hwnd, WM_KEYDOWN, 0x41, keydownLparam))
{
cout << GetLastError() << endl;
}

}

}
else
{
cout << "Mouse right" << endl;
}
}
}
catch(exception e){
cout << e.what() << endl;
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector