FlagDlg.cpp
上传用户:cxh888fhc
上传日期:2017-07-08
资源大小:240k
文件大小:4k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. // FlagDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "CQQFind.h"
  5. #include "FlagDlg.h"
  6. #include "CQQFindDlg.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CFlagDlg dialog
  14. #define DLL_IMPORT extern "C" __declspec(dllimport)
  15. DLL_IMPORT HHOOK SetFocusHook(HWND hWnd,DWORD dwThread);
  16. DWORD MOVEMSG=RegisterWindowMessage("MOVEMSG");
  17. CFlagDlg::CFlagDlg(CWnd* pParent /*=NULL*/)
  18. : CDialog(CFlagDlg::IDD, pParent)
  19. {
  20. //{{AFX_DATA_INIT(CFlagDlg)
  21. // NOTE: the ClassWizard will add member initialization here
  22. //}}AFX_DATA_INIT
  23. }
  24. void CFlagDlg::DoDataExchange(CDataExchange* pDX)
  25. {
  26. CDialog::DoDataExchange(pDX);
  27. //{{AFX_DATA_MAP(CFlagDlg)
  28. // NOTE: the ClassWizard will add DDX and DDV calls here
  29. //}}AFX_DATA_MAP
  30. }
  31. BEGIN_MESSAGE_MAP(CFlagDlg, CDialog)
  32. //{{AFX_MSG_MAP(CFlagDlg)
  33. ON_WM_PAINT()
  34. ON_WM_CLOSE()
  35. //}}AFX_MSG_MAP
  36. ON_REGISTERED_MESSAGE(MOVEMSG,OnMoveMsg)
  37. END_MESSAGE_MAP()
  38. /////////////////////////////////////////////////////////////////////////////
  39. // CFlagDlg message handlers
  40. void CFlagDlg::OnPaint() 
  41. {
  42. CPaintDC dc(this); // device context for painting
  43. // TODO: Add your message handler code here
  44. // Do not call CDialog::OnPaint() for painting messages
  45. int nCount=m_arrayDif.GetSize();
  46. int i;
  47. CBrush *pOldBrush=(CBrush *)dc.SelectStockObject(NULL_BRUSH);
  48. CPen pen;
  49. pen.CreatePen(PS_SOLID,((CCQQFindDlg *)GetParent())->m_nWidth,((CCQQFindDlg *)GetParent())->m_clrDraw);
  50. CPen *pOldPen=(CPen *)dc.SelectObject(&pen);
  51. for(i=0;i<nCount;i++)
  52. {
  53. RECT rcTemp;
  54. rcTemp=m_arrayDif.GetAt(i);
  55. if(((CCQQFindDlg *)GetParent())->m_bCircle==TRUE)
  56. {
  57. dc.Ellipse(&rcTemp);
  58. }
  59. else
  60. {
  61. dc.Rectangle(&rcTemp);
  62. }
  63. }
  64. dc.SelectObject(pOldPen);
  65. dc.SelectObject(pOldBrush);
  66. //依次画出所有的标识圆圈
  67. }
  68. BOOL CFlagDlg::OnInitDialog() 
  69. {
  70. CDialog::OnInitDialog();
  71. // TODO: Add extra initialization here
  72. SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,   
  73. GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)|0x80000);   
  74. HINSTANCE hInst=LoadLibrary("User32.DLL");  
  75. COLORREF bkColor = GetSysColor( COLOR_3DFACE ); 
  76. if(hInst)     
  77. {     
  78. typedef   BOOL   (WINAPI   *MYFUNC)(HWND,COLORREF,BYTE,DWORD);     
  79. MYFUNC   fun   =   NULL;   
  80. fun=(MYFUNC)GetProcAddress(hInst,   "SetLayeredWindowAttributes");   
  81. if(fun)fun(this->GetSafeHwnd(),bkColor,0,1);     
  82. FreeLibrary(hInst);     
  83. //初始化对话框的时候设置其显示方式透明方式.
  84. HWND hWnd=::FindWindow("#32770","大家来找茬");
  85. if(hWnd!=NULL)
  86. {
  87. //初始显示时,和当前游戏窗口位置保持一致.
  88. RECT rcWindow;
  89. ::GetWindowRect(hWnd,&rcWindow);
  90. MoveWindow(rcWindow.left+m_rcRegion.left,rcWindow.top+m_rcRegion.top,
  91. m_rcRegion.right-m_rcRegion.left,m_rcRegion.bottom-m_rcRegion.top,FALSE);
  92. m_hHook=SetFocusHook(m_hWnd,GetWindowThreadProcessId(hWnd,NULL));
  93. }
  94. return TRUE;  // return TRUE unless you set the focus to a control
  95.               // EXCEPTION: OCX Property Pages should return FALSE
  96. }
  97. LRESULT CFlagDlg::OnMoveMsg(WPARAM wParam,LPARAM lParam)
  98. {
  99. //检测到目标游戏对话框移动,则及时移动以便保持同步
  100. int xPos = (int)(short) LOWORD(lParam);    // horizontal position 
  101. int yPos = (int)(short) HIWORD(lParam);    // vertical position 
  102. MoveWindow(m_rcRegion.left+xPos,m_rcRegion.top+yPos,
  103. m_rcRegion.right-m_rcRegion.left,m_rcRegion.bottom-m_rcRegion.top,FALSE);
  104. return 0L;
  105. }
  106. void CFlagDlg::OnClose() 
  107. {
  108. // TODO: Add your message handler code here and/or call default
  109. UnhookWindowsHookEx(m_hHook);
  110. CDialog::OnClose();
  111. }