c++ - 钩子(Hook)查找窗口

标签 c++ winapi hook detours

我正在尝试使用 Detours 3.0 连接 FindWindowA 和 FindWindowW。这两个函数成功 Hook ,我可以看到请求的类和窗口标题。但是当我尝试访问任何像

这样的词时
if ( lpWindowName[0] == buf ) 

或类似的东西:

wcscpy(buf, lpWindowName);
memcpy(buf, lpWindowName, sizeof(lpWindowName));

我得到错误(钩子(Hook)程序中的异常)。我无法访问此字符串,但我可以使用它来读取它

MessageBox(NULL,lpWindowName,lpClassName,MB_OK);

http://s017.radikal.ru/i421/1201/73/54fa9046a46c.png我什么都不懂...有错误的错误代码。我使用这段代码:

int filter(DWORD code, struct _EXCEPTION_POINTERS *ep) {

    char buf[MAX_PATH] = {0};
    sprintf(buf,"Exception code: %d", code);
    MessageBox(NULL,buf,"Error",MB_OK);
    return EXCEPTION_EXECUTE_HANDLER;
}

HWND __stdcall Mine_FindWindowW(LPCWSTR a0,
    LPCWSTR a1)
{
    __try 
    {
    if (a1[0] == L'a')
        return NULL;
    }
    __except(filter(GetExceptionCode(), GetExceptionInformation())){
    }
    HWND rv = 0;
    __try {
        rv = Real_FindWindowW(a0, a1);
    } __finally {
    };
    return rv;
}

而且琴弦没有损坏。一切正常...为什么我不能检查或直接访问这两个参数?

最佳答案

查看 FindWindow 的文档.

任一字符串参数可以是 NULL(意思是不关心),类名可以是一个原子。在这两种情况下尝试取消引用字符串都将导致访问冲突(异常代码 -1073741819=0xC0000005)。

关于c++ - 钩子(Hook)查找窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8955099/

相关文章:

c++ - 在独立(裸机)项目中使用 std::tuple 和 arm-none-eabi-gcc?

c++ - 在不知道完整层次结构的情况下进行双重分派(dispatch)

c++ - C++ 中的静态成员数组

c++ - 如何将 WebKit 嵌入到我的 C/C++/Win32 应用程序中?

wordpress - 当产品添加到购物车时,woocommerce 获取产品 ID

c++ - 将 vector 初始化为零 C++/C++11

c# - 在 Windows 10 上将 UWP Geolocation-API 与 Win32-Application 结合使用

C++ GetTextExtentPoint32 未给出正确的大小

c++ - 使用 Assembly 和 C++ 调用一个函数两次

vue.js - 如何在 vue-router 中查看导航历史记录?