Delphi API Hook表现得很奇怪

时间:2013-07-17 08:13:29

标签: api delphi winapi hook

我正在尝试实现API挂钩机制。

到目前为止,我是通过SetWindowsHookEx调用注入其他进程的DLL,以及一些用于实现钩子的代码。

例如,我可以成功地在多个不同的应用程序中挂起MessageBoxA个调用(这不是最终目标)。

我需要做的是挂钩一些图形功能,特别是textout功能,因为我需要能够屏幕刮擦。

现在 - 我知道我需要哪些textout函数(TextOutA/WExtTextOutA/W用于我正在尝试访问的应用程序),而且我知道我需要挂钩{{1} }或Begin/EndPaintGet/ReleaseDC与窗口句柄匹配,并确定文本输出是否在我感兴趣的窗口上。

我的问题是,虽然我可以挂钩textout函数,消息框等,但没有任何问题,DC会像GetDC一样导致严重崩溃。

代码很长,所以我会发布我遇到的问题,但是如果它有帮助我可以发布更多。

粗略的框架工作如下;

BeginPaint

即使这个非常简单的功能也会不断失败,返回零。

我完全无法解释最新情况,因为function CustomBeginPaint(hWnd: HWND; var lpPaint: TPaintStruct): HDC; begin UninstallHook(); Result := BeginPaint(hWnd, lpPaint ); InstallHook(); end; 始终是1309192,尽管在多台机器上尝试了这一点。

1 个答案:

答案 0 :(得分:0)

所以关键问题是,正如Andreas Hausladen所提到的线程安全性 - 但不是由于VCL。