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

钩子与API截获

开发平台:

Visual C++

  1. // CQQFindDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "CQQFind.h"
  5. #include "CQQFindDlg.h"
  6. #include "QQBitmap.h"
  7. #include "ConfigDlg.h"
  8. #include "AboutDlg.h"
  9. #include <afxtempl.h>
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CCQQFindDlg dialog
  17. CCQQFindDlg::CCQQFindDlg(CWnd* pParent /*=NULL*/)
  18. : CBitmapDialog(CCQQFindDlg::IDD, pParent)
  19. {
  20. //{{AFX_DATA_INIT(CCQQFindDlg)
  21. // NOTE: the ClassWizard will add member initialization here
  22. //}}AFX_DATA_INIT
  23. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  24. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  25. }
  26. void CCQQFindDlg::DoDataExchange(CDataExchange* pDX)
  27. {
  28. CDialog::DoDataExchange(pDX);
  29. //{{AFX_DATA_MAP(CCQQFindDlg)
  30. DDX_Control(pDX, IDC_BTN_CONFIG, m_btnConfig);
  31. DDX_Control(pDX, IDC_BTN_ABOUT, m_btnAbout);
  32. DDX_Control(pDX, IDCANCEL, m_btnCancel);
  33. DDX_Control(pDX, IDC_BTN_TEST, m_btnTest);
  34. DDX_Control(pDX, IDC_BTN_CLOSE, m_btnClose);
  35. //}}AFX_DATA_MAP
  36. }
  37. BEGIN_MESSAGE_MAP(CCQQFindDlg, CBitmapDialog)
  38. //{{AFX_MSG_MAP(CCQQFindDlg)
  39. ON_WM_PAINT()
  40. ON_WM_QUERYDRAGICON()
  41. ON_BN_CLICKED(IDC_BTN_TEST, OnBtnTest)
  42. ON_BN_CLICKED(IDC_BTN_CLOSE, OnBtnClose)
  43. ON_BN_CLICKED(IDC_BTN_CONFIG, OnBtnConfig)
  44. ON_BN_CLICKED(IDC_BTN_ABOUT, OnBtnAbout)
  45. ON_WM_TIMER()
  46. //}}AFX_MSG_MAP
  47. END_MESSAGE_MAP()
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CCQQFindDlg message handlers
  50. BOOL CCQQFindDlg::OnInitDialog()
  51. {
  52. CDialog::OnInitDialog();
  53. // Set the icon for this dialog.  The framework does this automatically
  54. //  when the application's main window is not a dialog
  55. SetIcon(m_hIcon, TRUE); // Set big icon
  56. SetIcon(m_hIcon, FALSE); // Set small icon
  57. // TODO: Add extra initialization here
  58. LoadBitmap(IDB_BITMAP2);//加载位图
  59. SetTransparent (TRUE);
  60. SetTransColor (RGB(0,0,0));//去掉形状的颜色设置
  61. SetStaticTransparent (TRUE);
  62. SetClickAnywhereMove (TRUE);//鼠标是否能拖动窗体。
  63. m_btnCancel.SetDefaultButton(TRUE);
  64. m_btnClose.SetDefaultButton(TRUE);
  65. m_btnTest.SetDefaultButton(TRUE);
  66. m_btnAbout.SetDefaultButton(TRUE);
  67. m_btnConfig.SetDefaultButton(TRUE);
  68. m_btnCancel.SetDefaultFace();
  69. m_btnClose.SetDefaultFace();
  70. m_btnTest.SetDefaultFace();
  71. m_btnAbout.SetDefaultFace();
  72. m_btnConfig.SetDefaultFace();
  73. if(GetFileAttributes("QQFind.whj")==-1)
  74. {
  75. //文件不存在
  76. CFile file("QQFind.whj",CFile::modeCreate|CFile::modeReadWrite);
  77. CArchive ar(&file,CArchive::store);
  78. ar<<RGB(0,0,255);
  79. ar<<TRUE;
  80. ar<<3;
  81. ar.Close();
  82. file.Close();
  83. }
  84. CFile file("QQFind.whj",CFile::modeRead);
  85. CArchive ar(&file,CArchive::load);
  86. ar>>m_clrDraw;
  87. ar>>m_bCircle;
  88. ar>>m_nWidth;
  89. ar.Close();
  90. file.Close();
  91. return TRUE;  // return TRUE  unless you set the focus to a control
  92. }
  93. // If you add a minimize button to your dialog, you will need the code below
  94. //  to draw the icon.  For MFC applications using the document/view model,
  95. //  this is automatically done for you by the framework.
  96. void CCQQFindDlg::OnPaint() 
  97. {
  98. if (IsIconic())
  99. {
  100. CPaintDC dc(this); // device context for painting
  101. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  102. // Center icon in client rectangle
  103. int cxIcon = GetSystemMetrics(SM_CXICON);
  104. int cyIcon = GetSystemMetrics(SM_CYICON);
  105. CRect rect;
  106. GetClientRect(&rect);
  107. int x = (rect.Width() - cxIcon + 1) / 2;
  108. int y = (rect.Height() - cyIcon + 1) / 2;
  109. // Draw the icon
  110. dc.DrawIcon(x, y, m_hIcon);
  111. }
  112. else
  113. {
  114. CDialog::OnPaint();
  115. }
  116. }
  117. // The system calls this to obtain the cursor to display while the user drags
  118. //  the minimized window.
  119. HCURSOR CCQQFindDlg::OnQueryDragIcon()
  120. {
  121. return (HCURSOR) m_hIcon;
  122. }
  123. void CCQQFindDlg::OnBtnTest() 
  124. {
  125. // TODO: Add your control notification handler code here
  126. if(m_dlgFlag.m_hWnd)
  127. {
  128. m_dlgFlag.DestroyWindow();
  129. m_dlgFlag.m_arrayDif.RemoveAll();
  130. m_dlgFlag.m_rcRegion.left=m_dlgFlag.m_rcRegion.right=
  131. m_dlgFlag.m_rcRegion.top=m_dlgFlag.m_rcRegion.bottom=-1;
  132. }
  133. HWND hWnd=::FindWindow("#32770","大家来找茬");
  134. if(hWnd==NULL)
  135. {
  136. MessageBox("没有开启QQ游戏","错误提示",MB_ICONWARNING);
  137. return;
  138. }
  139. CQQBitmap bmp(hWnd);
  140. CArray<RECT,RECT> arrayDif;
  141. RECT rcP1;
  142. bmp.GetDiffRects(arrayDif);
  143. bmp.GetPicture1Rect(rcP1);
  144. m_dlgFlag.m_rcRegion=rcP1;
  145. int nCount=arrayDif.GetSize();
  146. for(int i=0;i<nCount;i++)
  147. {
  148. RECT rcTemp;
  149. rcTemp=arrayDif.GetAt(i);
  150. m_dlgFlag.m_arrayDif.Add(rcTemp);
  151. }
  152. m_dlgFlag.Create(IDD_DLG_FLAG,this);
  153. m_dlgFlag.ShowWindow(SW_SHOW);
  154. SetTimer(1,10,NULL);
  155. //窗口显示出来之后,会获得焦点,引起游戏窗口不活动,从而可能导致
  156. //标识窗口显示不出来,因此设置一个时钟,立即将游戏窗口激活.
  157. }
  158. void CCQQFindDlg::OnBtnClose() 
  159. {
  160. // TODO: Add your control notification handler code here
  161. if(m_dlgFlag.m_hWnd)
  162. {
  163. m_dlgFlag.DestroyWindow();
  164. m_dlgFlag.m_arrayDif.RemoveAll();
  165. m_dlgFlag.m_rcRegion.left=m_dlgFlag.m_rcRegion.right=
  166. m_dlgFlag.m_rcRegion.top=m_dlgFlag.m_rcRegion.bottom=-1;
  167. }
  168. }
  169. void CCQQFindDlg::OnCancel() 
  170. {
  171. // TODO: Add extra cleanup here
  172. SetWindowLong(m_hWnd,GWL_EXSTYLE,   
  173. GetWindowLong(m_hWnd,GWL_EXSTYLE)|0x80000);   
  174. HINSTANCE   hInst   =   LoadLibrary("User32.DLL");     
  175. if(hInst)     
  176. {     
  177. typedef   BOOL   (WINAPI   *MYFUNC)(HWND,COLORREF,BYTE,DWORD);     
  178. MYFUNC   fun   =   NULL;    
  179. fun=(MYFUNC)GetProcAddress(hInst,   "SetLayeredWindowAttributes");   
  180. if(fun)
  181. {
  182. int i=255*3;
  183. {
  184. while(i--)
  185. {
  186. MSG msg;
  187. while(PeekMessage(&msg,m_hWnd,0,0,PM_REMOVE))
  188. {
  189. TranslateMessage(&msg);
  190. DispatchMessage(&msg);
  191. }
  192. fun(m_hWnd,0,i/3,2);  
  193. }
  194. }
  195. }
  196. FreeLibrary(hInst);
  197. }
  198. CBitmapDialog::OnCancel();
  199. }
  200. void CCQQFindDlg::OnOK()
  201. {
  202. }
  203. void CCQQFindDlg::OnBtnConfig() 
  204. {
  205. // TODO: Add your control notification handler code here
  206. CConfigDlg dlg;
  207. if(IDOK==dlg.DoModal())
  208. {
  209. m_clrDraw=dlg.m_clrDraw;
  210. m_bCircle=dlg.m_nCirCle==0?TRUE:FALSE;
  211. m_nWidth=dlg.m_nWidth;
  212. CFile file("QQFind.whj",CFile::modeCreate|CFile::modeReadWrite);
  213. CArchive ar(&file,CArchive::store);
  214. ar<<m_clrDraw;
  215. ar<<m_bCircle;
  216. ar<<m_nWidth;
  217. ar.Close();
  218. file.Close();
  219. m_dlgFlag.Invalidate(TRUE);
  220. }
  221. }
  222. void CCQQFindDlg::OnBtnAbout() 
  223. {
  224. // TODO: Add your control notification handler code here
  225. CAboutDlg dlg;
  226. dlg.DoModal();
  227. }
  228. void CCQQFindDlg::OnTimer(UINT nIDEvent) 
  229. {
  230. // TODO: Add your message handler code here and/or call default
  231. KillTimer(1);
  232. HWND hWnd=::FindWindow("#32770","大家来找茬");
  233. if(hWnd==NULL)
  234. {
  235. return;
  236. }
  237. //激活游戏窗口,同时会将标识窗口显示到顶端
  238. ::SetWindowPos(hWnd,HWND_TOP,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);
  239. CBitmapDialog::OnTimer(nIDEvent);
  240. }