下载了一个,APIHOOK的DLL,想学习一下,
但是发现,在VC++的IDE里,在这个函数上(按F9)下断点,为什么断不下来?
LPCTSTR WINAPI DLLGetPubString()是可以断下来,然后,单步步入的。
另外,为什么,要分别JMP到myImmGetCompositionStringA,和myImmGetCompositionStringA?因为,在MSDN中,只有ImmGetCompositionString一个函数。
ImmGetCompositionStringA(HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen)应该是个回调函数吧,具体,的用法有没有高手用过,能否讲解一下。
先谢谢了。
LONG WINAPI myImmGetCompositionStringA(HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen)
{
LONG myReturn=0;
LONG tempLen=0;
int StrBufLen=0;
if (dwIndex==GCS_RESULTSTR && g_HOOKflag)
{
memset(g_IMEString,0,256);
tempLen=255;
g_myHOOK1.HookStatus(false);
ImmGetCompositionStringA(hIMC,GCS_RESULTSTR,g_IMEString,tempLen);
g_myHOOK1.HookStatus(true);
g_IMEString[tempLen]=0;
if (lstrcmp(g_IMEString,g_StringBuf1)!=0)
{
memset(g_StringBuf1,0,256);
lstrcpy(g_StringBuf1,g_IMEString);
SendMessage(g_hMainhWnd,WM_HXWDLLWX_QQBTX,0,0);
memset(g_StringBuf2,0,256);
lstrcpy(g_StringBuf2,g_IMEString);
}
if (lpBuf==NULL || dwBufLen==0)
{
myReturn=lstrlen(g_StringBuf2);
}
else
{
StrBufLen=lstrlen(g_StringBuf2);
memset(lpBuf,0,dwBufLen);
if (dwBufLen>=StrBufLen)
{
dwBufLen=StrBufLen;
myReturn=StrBufLen;
}
else
{
myReturn=0;
}
memcpy(lpBuf,g_StringBuf2,dwBufLen);
}
}
else
{
g_myHOOK1.HookStatus(false);
myReturn=ImmGetCompositionStringA(hIMC,dwIndex,lpBuf,dwBufLen);
g_myHOOK1.HookStatus(true);
}
return myReturn;
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!