Mã:
#include "windows.h" typedef VOID(*LOADPROC)(HHOOK hHook); HWND hWindow;HINSTANCE hInst;HHOOK hHook;BOOL setHook();BOOL unHook(HHOOK hHook); enum { ID_LABEL = 1,ID_IMAGE,ID_EDIT,ID_LIST,ID_BUTTON,ID_COMBO, ID_BUTTON2 }; LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); HINSTANCE g_hInst;TCHAR szAppName[] = TEXT("SDI Frame");TCHAR szWinClass[] = TEXT("WIN_CLASS"); HWND button1,button2; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow){ MSG msg; WNDCLASS wc; HWND hwnd; g_hInst = hInstance; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hInstance = hInstance; wc.lpfnWndProc = WinProc; wc.lpszClassName = szWinClass; wc.lpszMenuName = NULL; wc.style = CS_HREDRAW | CS_VREDRAW; if( !RegisterClass(&wc)) { MessageBox(NULL, TEXT("Error registering class"), TEXT("ERROR"), MB_OK); return 0; } hwnd = CreateWindow(szWinClass, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 250, 200, (HWND) NULL, (HMENU) NULL, (HINSTANCE) hInstance, (void *) NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while (GetMessage(&msg, (HWND) NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ PAINTSTRUCT ps; HDC hdc; int iD; int i; switch(msg){ case WM_CREATE: button1 = CreateWindow(L"Button",L"start hook",BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE ,50,50,150,25,hwnd,(HMENU)ID_BUTTON,g_hInst,0); button2 = CreateWindow(L"Button",L"end hook",BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE ,50,100,150,25,hwnd,(HMENU)ID_BUTTON2,g_hInst,0); case WM_PAINT: hdc = BeginPaint(hwnd, &ps); EndPaint(hwnd, &ps); return 0; case WM_COMMAND: iD = LOWORD(wParam); if (iD == ID_BUTTON) { if (setHook()) { MessageBox(hwnd, L"hook succeed", L"box", MB_OK); } else { MessageBox(hwnd, L"Err hook!", L"box", MB_OK); } } else if (iD=ID_BUTTON2) { if (unHook(hHook)) { MessageBox(hwnd, L"UnHook ", L"box", MB_OK); } else { MessageBox(hwnd, L"Err unhook!", L"box", MB_OK); } } break; case WM_CHAR: i = wParam; break; case WM_DESTROY: PostQuitMessage(0); break; case WM_CLOSE: DestroyWindow(hwnd); break; }return DefWindowProc(hwnd, msg, wParam, lParam);} //// setuphook BOOL setHook(){ if (LoadLibraryW(L"..\\..\\DLL\\Debug\\DLL.dll") == NULL) { MessageBox(0, L"Can not load DLL file.",L"Error", 0); return FALSE; } HMODULE hDLL = GetModuleHandle(L"DLL"); if (hDLL == NULL) { return FALSE; } hHook = SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetProcAddress(hDLL,"GetMsgProc"),hDLL, 0); if (hHook == NULL) { return FALSE; } LOADPROC fPtrFcnt; fPtrFcnt = (LOADPROC)GetProcAddress(hDLL,"SetGlobalHookHandle"); if (fPtrFcnt == NULL) { return FALSE; } fPtrFcnt(hHook); return TRUE; } BOOL unHook(HHOOK hHook){ return UnhookWindowsHookEx(hHook);}
còn đây là code DLL
Mã:
#include <Windows.h> #pragma data_seg("SHARED_DATA")#pragma data_seg()HHOOK hGobalHook=NULL; __declspec(dllexport) LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam){ if (nCode<0) { return CallNextHookEx(hGobalHook,nCode,wParam,lParam); } MSG* msg=(MSG*)lParam; if (msg->message==WM_CHAR) { if ((0x61<=msg->wParam)&&(msg->wParam<=0x7A)) { msg->wParam=msg->wParam - 0x20; } } return CallNextHookEx(hGobalHook,nCode,wParam,lParam);} __declspec(dllexport) void SetGlobalHookHandle(HHOOK hHook){ hGobalHook=hHook;}
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...