我正在使用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
);
}
另外一个问题,如果我可以。如何持续监控失焦或最小化的窗口(使用此方法无法正常工作)
非常感谢!
答案 0 :(得分:1)
如果我理解正确的意思是“字符串混乱且线条混杂”,那么有两个问题可能对您有所帮助:
字符串可以输出为Glyphs索引而不是Chars(因此将显示为加扰文本)。
你应该只参考cbCount参数提供的字符数量,字符串中的其他字符可能是“垃圾”字符。
希望有所帮助。