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;}
Thanh lý pallet nhựa cũ Đaklak Trải dài trên vùng đất Daklak, những chiếc pallet nhựa cũ Đaklak nằm rải rác như những bức tranh tĩnh lặng, kể lể về những chặng đường mà chúng đã đi qua. Những đường...
Thanh lý pallet nhựa cũ Đaklak