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;}
Vòng tay phong thủy là một vật phẩm mang lại sự may mắn trong tài lộc, tình duyên, sự nghiệp,.. Là một vật phẩm không xa lạ gì với chúng ta, vòng tay phong thủy có nhiều màu, đa dạng và mỗi màu sắc...
Ý nghĩa và cách phân loại vòng tay...