Util.cpp
上传用户:feituo2008
上传日期:2013-02-02
资源大小:493k
文件大小:5k
源码类别:

Email客户端

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include "resource.h"
  4. CRITICAL_SECTION g_cs_WriteLog, g_cs_WriteStat, g_cs_WriteExistEmail, g_cs_WriteNonexistEmail;
  5. int g_f_all_cs_inited =0, g_f_all_cs_deleted =0;
  6. void InitAllUtilCS()
  7. {
  8. if(g_f_all_cs_inited) return;
  9. InitializeCriticalSection(&g_cs_WriteLog);
  10. InitializeCriticalSection(&g_cs_WriteStat);
  11. InitializeCriticalSection(&g_cs_WriteExistEmail);
  12. InitializeCriticalSection(&g_cs_WriteNonexistEmail);
  13. g_f_all_cs_inited =true;
  14. g_f_all_cs_deleted =false;
  15. }
  16. void DeleteAllUtilCS()
  17. {
  18. if(g_f_all_cs_deleted || !g_f_all_cs_inited) return;
  19. DeleteCriticalSection(&g_cs_WriteLog);
  20. DeleteCriticalSection(&g_cs_WriteStat);
  21. DeleteCriticalSection(&g_cs_WriteExistEmail);
  22. DeleteCriticalSection(&g_cs_WriteNonexistEmail);
  23. g_f_all_cs_deleted =true;
  24. g_f_all_cs_inited =false;
  25. }
  26. /*class CUtilInit
  27. {
  28. public:
  29. CUtilInit()
  30. {
  31. InitAllUtilCS();
  32. }
  33. ~CUtilInit()
  34. {
  35. DeleteAllUtilCS();
  36. }
  37. };
  38. CUtilInit g_util_init;
  39. */
  40. HWND g_hWndNotify =NULL;
  41. int g_show_stat =true;
  42. int WriteStat(char *format, ...)
  43. {
  44. if(!g_show_stat) return 0;
  45. if(g_hWndNotify ==NULL) return 0;
  46. if(g_f_all_cs_inited) EnterCriticalSection(&g_cs_WriteStat);
  47. va_list args;
  48. char temp[4096];
  49. va_start(args, format);
  50. int len =vsprintf(temp, format, args);
  51. va_end(args);
  52. temp[len] =0;
  53. CString str;
  54. CWnd *pdlg =CWnd::FromHandle(g_hWndNotify);
  55. pdlg->GetDlgItemText(IDE_STAT, str);
  56. if(str.GetLength() >30000) str ="";
  57. str +=*(new CString(temp))+"rn";
  58. pdlg->SetDlgItemText(IDE_STAT, str);
  59. pdlg->SendDlgItemMessage(IDE_STAT, WM_VSCROLL, SB_BOTTOM, 0L);
  60. if(g_f_all_cs_inited) LeaveCriticalSection(&g_cs_WriteStat);
  61. return 0;
  62. }
  63. int WriteError(char *format, ...)
  64. {
  65. if(g_hWndNotify ==NULL) return 0;
  66. if(g_f_all_cs_inited) EnterCriticalSection(&g_cs_WriteStat);
  67. va_list args;
  68. char temp[4096];
  69. va_start(args, format);
  70. int len =vsprintf(temp, format, args);
  71. va_end(args);
  72. temp[len] =0;
  73. CString str;
  74. CWnd *pdlg =CWnd::FromHandle(g_hWndNotify);
  75. pdlg->GetDlgItemText(IDE_STAT, str);
  76. if(str.GetLength() >30000) str ="";
  77. str +=*(new CString(temp))+"rn";
  78. pdlg->SetDlgItemText(IDE_STAT, str);
  79. pdlg->SendDlgItemMessage(IDE_STAT, WM_VSCROLL, SB_BOTTOM, 0L);
  80. if(g_f_all_cs_inited) LeaveCriticalSection(&g_cs_WriteStat);
  81. return 0;
  82. }
  83. void WriteLog(char *fmt,...)
  84. {
  85. if(!g_show_stat) return;
  86. FILE *fp;
  87. va_list args;
  88. char modname[128];
  89. if(g_f_all_cs_inited) EnterCriticalSection(&g_cs_WriteLog);
  90. if((fp =fopen("c:\findmail.log", "a")) !=NULL)
  91. {
  92. va_start(args,fmt);
  93. GetModuleFileName(NULL, modname, sizeof(modname));
  94. //fprintf(fp, "n%s:n", modname);
  95. vfprintf(fp, fmt, args);
  96. fprintf(fp, "n");
  97. fclose(fp);
  98. va_end(args);
  99. }
  100. if(g_f_all_cs_inited) LeaveCriticalSection(&g_cs_WriteLog);
  101. }
  102. // output exist email to file and the edit control
  103. int WriteExistEmail(char *outfile, char *addr)
  104. {
  105. static int count =0;
  106. if(g_f_all_cs_inited) EnterCriticalSection(&g_cs_WriteExistEmail);
  107. FILE *fp;
  108. if((fp =fopen(outfile, "a")) !=NULL)
  109. {
  110. fprintf(fp, "%srn", addr);
  111. fclose(fp);
  112. }
  113. else return -1;
  114. CString str;
  115. CWnd *pdlg =CWnd::FromHandle(g_hWndNotify);
  116. pdlg->GetDlgItemText(IDE_EMAIL_EXIST, str);
  117. if(str.GetLength() >30000) str ="";
  118. str +=*(new CString(addr))+"rn";
  119. pdlg->SetDlgItemText(IDE_EMAIL_EXIST, str);
  120. pdlg->SendDlgItemMessage(IDE_EMAIL_EXIST, WM_VSCROLL, SB_BOTTOM, 0L);
  121. SetDlgItemInt(g_hWndNotify, IDC_EXIST_COUNT, ++count, 0);
  122. if(g_f_all_cs_inited) LeaveCriticalSection(&g_cs_WriteExistEmail);
  123. return 0;
  124. }
  125. // output nonexist email to file and the edit control
  126. int g_show_nonexist =true;
  127. int WriteNonexistEmail(char *outfile, char *addr)
  128. {
  129. if(!g_show_nonexist) return 0;
  130. static int count =0;
  131. if(g_f_all_cs_inited) EnterCriticalSection(&g_cs_WriteNonexistEmail);
  132. FILE *fp;
  133. if((fp =fopen(outfile, "a")) !=NULL)
  134. {
  135. fprintf(fp, "%srn", addr);
  136. fclose(fp);
  137. }
  138. else return -1;
  139. CString str;
  140. CWnd *pdlg =CWnd::FromHandle(g_hWndNotify);
  141. pdlg->GetDlgItemText(IDE_EMAIL_NONEXIST, str);
  142. if(str.GetLength() >30000) str ="";
  143. str +=*(new CString(addr))+"rn";
  144. pdlg->SetDlgItemText(IDE_EMAIL_NONEXIST, str);
  145. pdlg->SendDlgItemMessage(IDE_EMAIL_NONEXIST, WM_VSCROLL, SB_BOTTOM, 0L);
  146. SetDlgItemInt(g_hWndNotify, IDC_NONEXIST_COUNT, ++count, 0);
  147. if(g_f_all_cs_inited) LeaveCriticalSection(&g_cs_WriteNonexistEmail);
  148. return 0;
  149. }
  150. void WriteBinData(char *buf, int len)
  151. {
  152. FILE *fp;
  153. if((fp =fopen("c:\findmail.log", "a")) !=NULL)
  154. {
  155. for(int i =0; i<len; i++)
  156. fprintf(fp, "%d: %d, %crn", i, buf[i]&0xFF, buf[i]&0xFF);
  157. fprintf(fp, "nn");
  158. fclose(fp);
  159. }
  160. }
  161. char * GetErrString(char *str, DWORD errcode)
  162. {
  163. LPVOID lpbuf;
  164. if(FormatMessage( 
  165. FORMAT_MESSAGE_ALLOCATE_BUFFER |
  166. FORMAT_MESSAGE_FROM_SYSTEM | 
  167. FORMAT_MESSAGE_IGNORE_INSERTS,
  168. NULL,
  169. errcode,
  170. MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
  171. (LPTSTR) &lpbuf,
  172. 0,
  173. NULL
  174. ))
  175. {
  176. lstrcpy(str, (char *)lpbuf);
  177. LocalFree(lpbuf);
  178. }
  179. return str;
  180. }