cbs_cbs 2024-08-27 12:10 采纳率: 33.3%
浏览 41

windows 系统钩子一直报错 1428

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;
}
  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-08-27 17:41
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    错误代码1428表示系统找不到指定的模块。这可能是由于以下原因:

    1. 缺少必要的库文件或 DLL 文件。
    2. 库文件或 DLL 文件的版本不兼容。
    3. 库文件或 DLL 文件损坏或丢失。

    针对这个问题,你可以尝试以下解决方案:

    1. 确保你的程序链接了所有必要的库文件和 DLL 文件。对于 Windows 钩子,你需要确保链接了 user32.lib。你可以在 Visual Studio 的项目属性中检查这一点。

    2. 确保你的程序使用的库文件和 DLL 文件版本与你的操作系统版本兼容。例如,如果你使用的是 Windows 10,那么你应该使用与之兼容的库文件和 DLL 文件。

    3. 如果上述方法都无法解决问题,尝试重新安装或修复有问题的库文件或 DLL 文件。你可以从官方网站下载最新版本的库文件和 DLL 文件,或者使用系统自带的修复工具进行修复。

    另外,你的代码中使用了 WH_CALLWNDPROCRET 钩子类型,这个钩子类型在 Windows Vista 及更高版本的系统中已经被弃用。建议使用 WH_CALLWNDPROC 钩子类型。将以下代码行:

    
    HHOOK hTouchHook = SetWindowsHookEx(WH_CALLWNDPROCRET, TouchHookProc, NULL, 0);
    
    

    替换为:

    
    HHOOK hTouchHook = SetWindowsHookEx(WH_CALLWNDPROC, TouchHookProc, NULL, GetCurrentThreadId());
    
    

    同时,确保你的应用程序以管理员权限运行。右键单击应用程序的可执行文件,然后选择“以管理员身份运行”。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月27日