繁体   English   中英

如何正确钩住GetDlgItemTextA从C ++并从EasyHook返回C#到C ++

[英]How to correctly hook and return GetDlgItemTextA from C++ to C# to C++ from EasyHook

我正在使用EasyHook ,这是一个C#库,用于从非托管应用程序注入和绕行功能。 我试图挂钩到GetDlgItemTextA ,它接受参数:

UINT WINAPI GetDlgItemText(
  __in   HWND hDlg,
  __in   int nIDDlgItem,
  __out  LPTSTR lpString, 
  __in   int nMaxCount
);`

在我的钩子上,我将其强制转换为:

[DllImport("user32.dll",
// CharSet = CharSet.Unicode,
SetLastError = true,
CallingConvention = CallingConvention.StdCall)]
static extern uint GetDlgItemTextA(IntPtr hWin, int nIDDlgItem, StringBuilder text, int MaxCount);

我的钩子是:

static uint DGetDlgItemText_Hooked(IntPtr hWin, int nIDDlgItem, StringBuilder text, int MaxCount)
{
    // call original API...
    uint ret = GetDlgItemTextA(hWin, nIDDlgItem, text, MaxCount);
    MessageBox.Show(text.ToString());
    return ret;
}

不幸的是,一旦被调用,挂钩的应用程序就会崩溃。 我可以使用更好的演员表成功挂接到该功能吗? 谢谢!

我已经编译,编辑并确认了EasyHook安装程序的工作状态。 这只是套管和钩子而已。

好吧,看来我已经执行了代码,但是唯一的区别是我出于未知原因不得不将try catch语句挂在钩子上。 StringBuilder确实可以正确地从LPCSTR转换回LPCSTR,并且程序可以很好地读取它。 该程序现在不会崩溃,因此我想我将其添加为自己的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM