0
我正在c#中注入dll軟件,注入的dll也在c#中,並且我正在使用某些系統函數的pinvoke。掛鉤extTextOut問題
當使用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
);
}
如果另外一個問題我可能:
我extTextOut使用EasyHook從codeplex.com這樣的大呼過癮。我怎樣才能經常監控一個沒有聚焦或最小化的窗口(使用這種方法它不能正常工作)
非常感謝!
現在我正在經歷同樣的問題。即使當我只是將參數傳遞給ExtTextOutW函數時,我仍然在掛鉤程序中遇到問題 - 它顯示了一些象形文字而不是拉丁文本。我相信,問題在於MarshalAs在轉換爲CLR字符串時會更改源數據中的某些內容。只有在設置了字形標誌時,問題纔會顯示,否則,鉤子可以正常工作,並且掛鉤文本不會損壞。 – 2013-01-14 12:55:52