windows 系统钩子一直报错 1428,开了管理员权限也没用
#include <windows.h>
#include <bits/stdc++.h>
using namespace std;
LRESULT CALLBACK TouchHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode == HC_ACTION) {
if (wParam == WM_TOUCH) {
UINT cInputs = LOWORD(wParam);
TOUCHINPUT* pInputs = new TOUCHINPUT[cInputs];
if (pInputs) {
if (GetTouchInputInfo((HTOUCHINPUT)lParam, cInputs, pInputs, sizeof(TOUCHINPUT))) {
for (UINT i = 0; i < cInputs; i++) {
TOUCHINPUT ti = pInputs[i];
cout << "Touch ID: " << ti.dwID<< " Position: " << TOUCH_COORD_TO_PIXEL(ti.x) << "," << TOUCH_COORD_TO_PIXEL(ti.y) << ") Flags: ";
if(ti.dwFlags & TOUCHEVENTF_MOVE) cout << "Move ";
if(ti.dwFlags & TOUCHEVENTF_DOWN) cout << "Down ";
if(ti.dwFlags & TOUCHEVENTF_UP) cout << "Up ";
if(ti.dwFlags & TOUCHEVENTF_INRANGE) cout << "InRange ";
if(ti.dwFlags & TOUCHEVENTF_PRIMARY) cout << "Primary ";
if(ti.dwFlags & TOUCHEVENTF_NOCOALESCE) cout << "NoCoalesce ";
if(ti.dwFlags & TOUCHEVENTF_PEN) cout << "Pen ";
if(ti.dwFlags & TOUCHEVENTF_PALM) cout << "Palm ";
cout << endl;
}
}
delete[] pInputs;
}
CloseTouchInputHandle((HTOUCHINPUT)lParam);
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main() {
// 设置全局钩子
HHOOK hTouchHook = SetWindowsHookEx(WH_CALLWNDPROCRET, TouchHookProc, NULL, 0);
if (hTouchHook == NULL) {
cout << GetLastError();
MessageBox(NULL, "Failed to set hook", "Error", MB_ICONERROR);
return 1;
}
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
UnhookWindowsHookEx(hTouchHook);
return 0;
}