TestApp.cpp
上传用户:jstlsd
上传日期:2007-01-13
资源大小:186k
文件大小:2k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. #include <windows.h>
  2. HWND     g_hWnd;
  3. HMODULE  hHookLib = NULL;
  4. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  5. int APIENTRY WinMain(
  6. HINSTANCE hInstance, 
  7. HINSTANCE hPrevInstance,
  8.     LPSTR     lpszCmdLine, 
  9. int       nCmdShow
  10. )
  11. {
  12.     HWND     hwnd;
  13.     MSG      msg ;
  14.     WNDCLASS wndclass ;
  15. if(!hPrevInstance) 
  16. {
  17. wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  18. wndclass.lpfnWndProc   = WndProc ;
  19. wndclass.cbClsExtra    = 0 ;
  20. wndclass.cbWndExtra    = 0 ;
  21. wndclass.hInstance     = hInstance ;
  22. wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION) ;
  23. wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW) ;
  24. wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH) ;
  25. wndclass.lpszMenuName  = NULL;
  26. wndclass.lpszClassName = "DemoClass" ;
  27. RegisterClass(&wndclass) ;
  28. }
  29. hwnd = ::CreateWindow(
  30. "DemoClass", // LPCTSTR lpClassName
  31. "Test Application", // LPCTSTR lpWindowName
  32.     WS_OVERLAPPEDWINDOW, // DWORD dwStyle
  33. CW_USEDEFAULT, // int x
  34. 0, // int y 
  35. CW_USEDEFAULT, // int nWidth
  36. 0, // int nHeight
  37. NULL, // HWND hWndParent
  38. NULL, // HMENU hMenu
  39. hInstance, // HANDLE hInstance
  40. NULL                    // PVOID lpParam 
  41. );
  42. g_hWnd = hwnd;
  43. ::ShowWindow(hwnd, nCmdShow) ;
  44. ::UpdateWindow(hwnd) ;
  45. while(::GetMessage(&msg, NULL, 0, 0))
  46. {
  47. ::TranslateMessage(&msg) ;
  48. ::DispatchMessage(&msg) ;
  49. }
  50. return msg.wParam ;
  51. }
  52. LRESULT CALLBACK WndProc(
  53. HWND   hwnd, 
  54. UINT   message, 
  55. WPARAM wParam, 
  56. LPARAM lParam
  57. )
  58. {
  59. static char    pszLine0[80] = "Hello from TestApp!";
  60. static wchar_t pszLine1[80] = L"Hello from TestApp!";
  61.     HDC hDC;                               
  62.     PAINTSTRUCT ps;
  63. switch(message)
  64.     {
  65.     case WM_PAINT:
  66.         hDC = ::BeginPaint(hwnd, &ps);
  67. ::TextOutA(hDC, 0, 0, pszLine0, lstrlen(pszLine0));
  68. ::TextOutW(hDC, 0, 20, pszLine1, wcslen(pszLine1));
  69.         ::EndPaint(hwnd, &ps);
  70. return 0;
  71.     case WM_DESTROY :
  72.         ::PostQuitMessage(0) ;
  73. return 0;
  74.     default:
  75.         break;
  76.     }
  77.     return DefWindowProc(hwnd, message, wParam, lParam) ;
  78. }