那位高手有空,请帮我把这段代码转成Delphi的,谢谢!

举手无悔大丈夫 2012-11-01 08:32:36

typedef HRESULT (STDMETHODCALLTYPE * LPFN_HOOKPROC)(IUnknown *pThis, REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject);

LPFN_HOOKPROC Proc;

HRESULT STDMETHODCALLTYPE HookQueryInterface(IUnknown *pThis, REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject)
{
return Proc(pThis, riid, ppvObject);//调用原来的QueryInterface方法,记得有个this指针的参数
}

void WordSelectAll()
{
CLSID clsid;
IUnknown *pUnk;
CLSIDFromProgID(L"Word.Application", &clsid);
GetActiveObject(clsid, NULL, &pUnk);//这只是获取Word.Application的接口指针而已
if (pUnk == NULL) return;
//这儿进行Hook
PVOID pVmt = *((PVOID*)pUnk);//从接口指针找VMT指针
DWORD dwProtect;
VirtualProtect(&((PVOID*)pVmt)[0], sizeof(PVOID), PAGE_READWRITE, &dwProtect);
Proc = ((LPFN_HOOKPROC*)pVmt)[0];//把VMT中第一个方法地址保存到Proc中
((LPFN_HOOKPROC*)pVmt)[0] = &HookQueryInterface;//把HookQueryInterface方法地址写到VMT中
VirtualProtect(&((PVOID*)pVmt)[0], sizeof(PVOID), dwProtect, &dwProtect);
//这儿Hook完成了(其实只是Hook的代理而已,因为Word.Application是进程外组件)
pUnk->QueryInterface(IID_IDispatch, (LPVOID *)&dispApp);//调用这句的时候就会跳转到HookQueryInterface中去
pUnk->Release();
}


那位高手有空,请帮我把这段代码转成Delphi的,谢谢!
...全文
562 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
科比布莱恩特 2012-12-19
  • 打赏
  • 举报
回复
引用 1 楼 lianzhu520610 的回复:
顶上去
不懂同帮顶
  • 打赏
  • 举报
回复
顶上去

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧