【发布时间】:2011-10-14 16:17:00
【问题描述】:
我想修改 Windows API 中可用的本机函数,例如 CreateWindowEx 或 ShowWindow,以便在编译包含这些函数的应用程序时,它会调用我的函数,在那里执行任务,然后调用原来的native函数。
换句话说,我想以某种方式代理函数,同时仍然使用相同的名称(因此,如果编写的程序是使用本机 API 编译的,只需添加这些函数就会修改这些本机函数的方式处理)
HWND WINAPI CreateWindowEx(
__in DWORD dwExStyle,
__in_opt LPCTSTR lpClassName,
__in_opt LPCTSTR lpWindowName,
__in DWORD dwStyle,
__in int x,
__in int y,
__in int nWidth,
__in int nHeight,
__in_opt HWND hWndParent,
__in_opt HMENU hMenu,
__in_opt HINSTANCE hInstance,
__in_opt LPVOID lpParam
) {
//my custom code here....
// done with my custom code... so now I want to run the native function
return CreateWindowEx(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
}
这(出于显而易见的原因)会导致堆栈溢出,因为它会一遍又一遍地调用自己。我希望它做的是,当它被调用时,它会运行我创建的自定义函数,然后运行 Windows API 中可用的本机函数。
我对 c++ 很陌生,但是例如在许多其他语言中,我可以将对本机函数的引用存储在另一个名称下,然后我可以在我的自定义函数中调用它。 c++中有没有类似的东西?
【问题讨论】:
-
曾几何时,微软研究院有一个 Detours 项目。现在它不再是免费的(至少是在 x64 上运行的 Pro 版本)。但是请尝试在谷歌上搜索 Detours 的替代品。
-
您这样做的原因将决定最佳解决方案是什么。你能提供更多背景信息吗?
-
@tenfour 我希望绑定这些函数以通过 Web 套接字将详细信息(窗口选项、操作等)发送到 javascript