挂钩extTextOut问题

时间:2010-04-30 13:41:57

标签: c# hook gdi dll-injection easyhook

我正在使用c#中的dll注入软件,注入的dll也在c#中,并且我使用pinvoke来执行某些系统功能。

当使用extTextOut时,我得到字符串乱码并且线条混合在一起 我做错了什么?

我在codeplex.com上使用EasyHook连接了extTextOut,如下所示:

try
            {                
                CreateFileHook = LocalHook.Create(
                    LocalHook.GetProcAddress("gdi32.dll", "ExtTextOutW"),
                    new DExtTextOutW(ExtTextOutW_Hooked),
                   this);

                CreateFileHook.ThreadACL.SetExclusiveACL(new Int32[1]);

            }

我的extTextOut方法是

[DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, CallingConvention = CallingConvention.StdCall)]
        static extern bool ExtTextOutW(IntPtr hdc,
                                       int X,
                                       int Y,
                                       uint fuOptions,
                                       [In] ref RECT lprc,
                                       string lpString,
                                       uint cbCount,
                                       [In] IntPtr lpDx);

static bool ExtTextOutW_Hooked(
            IntPtr hdc,
            int X,
            int Y,
            uint fuOptions,
            [In] ref RECT lprc,
            string lpString,
            uint cbCount,
            [In] IntPtr lpDx)
        {


            try
            {
                DemoInjection This = (DemoInjection)HookRuntimeInfo.Callback;

                lock (This.Queue)
                {                    
                    This.Queue.Push(lpString);

                }
            }
            catch
            {
            }           

            return ExtTextOutW(
                 hdc,
                 X,
                 Y,
                 fuOptions,
                 ref lprc,
                 lpString,
                 cbCount,
                 lpDx
                  );

        }

另外一个问题,如果我可以。如何持续监控失焦或最小化的窗口(使用此方法无法正常工作)

非常感谢!

1 个答案:

答案 0 :(得分:1)

如果我理解正确的意思是“字符串混乱且线条混杂”,那么有两个问题可能对您有所帮助:

  1. 字符串可以输出为Glyphs索引而不是Chars(因此将显示为加扰文本)。

  2. 你应该只参考cbCount参数提供的字符数量,字符串中的其他字符可能是“垃圾”字符。

  3. 希望有所帮助。