关于SetWindowsHookEx的问题,如何解决?

在我学习SetWindowsHookEx函数时,发生了以下问题:
这是一个DLL文件:


#include "pch.h"
#include <iostream>
#include <fstream>
_declspec(selectany) HHOOK hook = nullptr;
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
//开启钩子
        Listener();
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
        break;
    case DLL_PROCESS_DETACH:
//释放钩子
        UnhookWindowsHookEx(hook);
        break;
    }
    return TRUE;
}

LRESULT CALLBACK ListenProc1(_In_ int code, _In_ WPARAM wp, _In_ LPARAM lp) {
    static std::wofstream os("ABC.txt");
    std::cout << "ok\n" << std::endl;
  //获得按键显示
    TCHAR keyty[32];
    GetKeyNameText(lp, keyty, 32);
    TCHAR chars[1000];
    //存入文件
    wsprintf(chars,L"%ws  ,%ws\n", keyty,
        (((lp >> 30) & 0x001) == WM_KEYDOWN || wp == WM_SYSKEYDOWN ? L"Down" : L"Up") );
    os << chars;
    return CallNextHookEx(hook, code, wp, lp);
}
void Listener() {
    using namespace std;
//设置钩子
    hook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)ListenProc1,
        GetModuleHandle(L"Hook.dll"),0);
    cout << GetLastError();
}

但是控制台并没有输出ok,GetLastError返回值是0,也没有输出文件ABC.txt,说明没有调用函数ListenProc1。
这个问题如何解决?