dDlg.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704
  1. //Download by http://www.NewXing.com
  2. // dDlg.cpp : implementation file
  3. //
  4. #include "stdafx.h"
  5. #include "d.h"
  6. #include "dDlg.h"
  7. #include<mmsystem.h>
  8. #pragma comment(lib,"winmm.lib")
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. UINT SoundThread(LPVOID)
  15. {
  16. PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT);
  17. return 0;
  18. }
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CAboutDlg dialog used for App About
  21. class CAboutDlg : public CDialog
  22. {
  23. public:
  24. CAboutDlg();
  25. // Dialog Data
  26. //{{AFX_DATA(CAboutDlg)
  27. enum { IDD = IDD_ABOUTBOX };
  28. //}}AFX_DATA
  29. // ClassWizard generated virtual function overrides
  30. //{{AFX_VIRTUAL(CAboutDlg)
  31. protected:
  32. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
  33. //}}AFX_VIRTUAL
  34. // Implementation
  35. protected:
  36. //{{AFX_MSG(CAboutDlg)
  37. //}}AFX_MSG
  38. DECLARE_MESSAGE_MAP()
  39. };
  40. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  41. {
  42. //{{AFX_DATA_INIT(CAboutDlg)
  43. //}}AFX_DATA_INIT
  44. }
  45. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  46. {
  47. CDialog::DoDataExchange(pDX);
  48. //{{AFX_DATA_MAP(CAboutDlg)
  49. //}}AFX_DATA_MAP
  50. }
  51. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  52. //{{AFX_MSG_MAP(CAboutDlg)
  53. // No message handlers
  54. //}}AFX_MSG_MAP
  55. END_MESSAGE_MAP()
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CDDlg dialog
  58. CDDlg::CDDlg(CWnd* pParent /*=NULL*/)
  59. : CDialog(CDDlg::IDD, pParent)
  60. {
  61. //{{AFX_DATA_INIT(CDDlg)
  62. m_bAlwaysOnTop =(::GetPrivateProfileInt("Settings","AlwaysOnTop",0,".\\Settings.ini")==0 ?false:true);
  63. m_bAutoRun=(::GetPrivateProfileInt("Settings","AutoRun",0,".\\Settings.ini")==0 ?false:true);
  64. m_bMinimized=(::GetPrivateProfileInt("Settings","Minimized",0,".\\Settings.ini")==0 ?false:true);
  65. m_bAutoStart = (::GetPrivateProfileInt("Settings","AutoStart",0,".\\Settings.ini")==0 ?false:true);
  66. //}}AFX_DATA_INIT
  67. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  68. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  69. m_bAddNew0=(::GetPrivateProfileInt("Selections","m_bAddNew",0,".\\Settings.ini")==0 ?false:true);
  70. m_bDel0=(::GetPrivateProfileInt("Selections","m_bDel",0,".\\Settings.ini")==0 ?false:true);
  71. m_bRename0=(::GetPrivateProfileInt("Selections","m_bRename",0,".\\Settings.ini")==0 ?false:true);
  72. m_bModify0=(::GetPrivateProfileInt("Selections","m_bModify",0,".\\Settings.ini")==0 ?false:true);
  73. m_bOther0=(::GetPrivateProfileInt("Selections","m_bOther",0,".\\Settings.ini")==0 ?false:true);
  74. /*------------------------------------------------------*/
  75. char buf[MAX_PATH];
  76. ::GetPrivateProfileString("Settings",
  77. "监视目录",
  78. "",
  79. buf,
  80. MAX_PATH,".\\Settings.ini");
  81. strcpy((LPTSTR)(LPCTSTR)m_strWatchedDir,buf);
  82. /*------------------------------------------------------*/
  83. m_hThread=NULL;
  84. hDir=INVALID_HANDLE_VALUE ;
  85. m_i=0;
  86. m_szi=new char[MAX_PATH];
  87. itoa(m_i,m_szi,10);
  88. }
  89. CDDlg::~CDDlg()
  90. {
  91. /*----------------------释放资源------------------------------------*/
  92. if(m_hThread !=NULL)
  93. {
  94. ::TerminateThread(m_hThread, 0 );
  95. m_hThread = NULL;
  96. }
  97. if(hDir !=INVALID_HANDLE_VALUE)
  98. {
  99. CloseHandle( hDir );
  100. hDir = INVALID_HANDLE_VALUE;
  101. }
  102. }
  103. /*----------------------线程函数------------------------------------*/
  104. DWORD WINAPI CDDlg::ThreadProc( LPVOID lParam ) //线程函数
  105. {
  106. CDDlg* obj = (CDDlg*)lParam; //参数转化
  107. obj->hDir = CreateFile( //打开目录,得到目录的句柄
  108. obj->m_strWatchedDir,
  109. GENERIC_READ|GENERIC_WRITE,
  110. FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
  111. NULL,
  112. OPEN_EXISTING,
  113. FILE_FLAG_BACKUP_SEMANTICS,
  114. NULL
  115. );
  116. if(obj->hDir ==INVALID_HANDLE_VALUE )
  117. return false;
  118. char buf[(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH)*2];
  119. FILE_NOTIFY_INFORMATION* pNotify=(FILE_NOTIFY_INFORMATION*)buf;
  120. DWORD dwBytesReturned;
  121. while(true)
  122. {
  123. if( ::ReadDirectoryChangesW( obj->hDir,
  124. pNotify,
  125. sizeof(buf),
  126. true,
  127. FILE_NOTIFY_CHANGE_FILE_NAME|
  128. FILE_NOTIFY_CHANGE_DIR_NAME|
  129. FILE_NOTIFY_CHANGE_ATTRIBUTES|
  130. FILE_NOTIFY_CHANGE_SIZE|
  131. FILE_NOTIFY_CHANGE_LAST_WRITE|
  132. FILE_NOTIFY_CHANGE_LAST_ACCESS|
  133. FILE_NOTIFY_CHANGE_CREATION|
  134. FILE_NOTIFY_CHANGE_SECURITY,
  135. &dwBytesReturned,
  136. NULL,
  137. NULL ) )
  138. {
  139. char tmp[MAX_PATH], str1[MAX_PATH], str2[MAX_PATH];
  140. memset( tmp, 0, sizeof(tmp) ); //ZeroMemory()
  141. WideCharToMultiByte( CP_ACP,0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL );
  142. strcpy( str1, tmp );
  143. if(pNotify->NextEntryOffset !=0 )
  144. {
  145. PFILE_NOTIFY_INFORMATION p = (PFILE_NOTIFY_INFORMATION)((char*)pNotify+pNotify->NextEntryOffset);
  146. memset( tmp, 0, sizeof(tmp) );
  147. WideCharToMultiByte( CP_ACP,0,p->FileName,p->FileNameLength/2,tmp,99,NULL,NULL );
  148. strcpy( str2, tmp );
  149. }
  150. switch(pNotify->Action)
  151. {
  152. case FILE_ACTION_ADDED:
  153. if(obj->m_bAddNew0)
  154. {
  155. CTime tt=CTime::GetCurrentTime();
  156. CString strTT;
  157. strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
  158. obj->m_list.InsertItem(0,obj->m_szi);
  159. obj->m_list.SetItemText(0,2,"添加了新文件");
  160. obj->m_list.SetItemText(0,3,str1);
  161. obj->m_list.SetItemText(0,1,strTT);
  162. // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT);
  163. }
  164. break;
  165. case FILE_ACTION_REMOVED:
  166. if(obj->m_bDel0)
  167. {
  168. CTime tt=CTime::GetCurrentTime();
  169. CString strTT;
  170. strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
  171. obj->m_list.InsertItem(0,obj->m_szi);
  172. obj->m_list.SetItemText(0,2,"删除了文件");
  173. obj->m_list.SetItemText(0,3,str1);
  174. obj->m_list.SetItemText(0,1,strTT);
  175. // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT);
  176. }
  177. break;
  178. case FILE_ACTION_RENAMED_NEW_NAME:
  179. if(obj->m_bRename0)
  180. {
  181. CTime tt=CTime::GetCurrentTime();
  182. CString strTT;
  183. strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
  184. obj->m_list.InsertItem(0,obj->m_szi);
  185. obj->m_list.SetItemText(0,2,"重命名了文件");
  186. strcat(str1,"->");
  187. obj->m_list.SetItemText(0,3,strcat(str1,str2));
  188. obj->m_list.SetItemText(0,1,strTT);
  189. // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT);
  190. }
  191. break;
  192. case FILE_ACTION_RENAMED_OLD_NAME:
  193. if(obj->m_bRename0)
  194. {
  195. CTime tt=CTime::GetCurrentTime();
  196. CString strTT;
  197. strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
  198. obj->m_list.InsertItem(0,obj->m_szi);
  199. obj->m_list.SetItemText(0,2,"重命名了文件");
  200. strcat(str1," 改名为 ");
  201. obj->m_list.SetItemText(0,3,strcat(str1,str2));
  202. obj->m_list.SetItemText(0,1,strTT);
  203. // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT);
  204. }
  205. break;
  206. case FILE_ACTION_MODIFIED:
  207. if(obj->m_bModify0)
  208. {
  209. CTime tt=CTime::GetCurrentTime();
  210. CString strTT;
  211. strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
  212. obj->m_list.InsertItem(0,obj->m_szi);
  213. obj->m_list.SetItemText(0,2,"修改了文件");
  214. obj->m_list.SetItemText(0,3,str1);
  215. obj->m_list.SetItemText(0,1,strTT);
  216. // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT);
  217. }
  218. break;
  219. default:
  220. if(obj->m_bOther0)
  221. {
  222. CTime tt=CTime::GetCurrentTime();
  223. CString strTT;
  224. strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
  225. obj->m_list.InsertItem(0,obj->m_szi);
  226. obj->m_list.SetItemText(0,2,"未知变化");
  227. obj->m_list.SetItemText(0,3,"");
  228. obj->m_list.SetItemText(0,1,strTT);
  229. // PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT);
  230. }
  231. break;
  232. }
  233. obj->m_i++;
  234. itoa(obj->m_i,obj->m_szi,10);
  235. //AfxBeginThread(SoundThread,0);
  236. }
  237. else
  238. break;
  239. }
  240. return 0;
  241. }
  242. /*----------------------线程函数------------------------------------*/
  243. void CDDlg::DoDataExchange(CDataExchange* pDX)
  244. {
  245. CDialog::DoDataExchange(pDX);
  246. //{{AFX_DATA_MAP(CDDlg)
  247. DDX_Control(pDX, IDC_LIST1, m_list);
  248. DDX_Check(pDX, IDC_BTN_ALWAYS_ON_TOP, m_bAlwaysOnTop);
  249. DDX_Check(pDX, IDC_CHECK_AUTORUN, m_bAutoRun);
  250. DDX_Check(pDX, IDC_CHECK_MINIMIZED, m_bMinimized);
  251. DDX_Check(pDX, IDC_NOSOUND, m_bAutoStart);
  252. //}}AFX_DATA_MAP
  253. }
  254. BEGIN_MESSAGE_MAP(CDDlg, CDialog)
  255. //{{AFX_MSG_MAP(CDDlg)
  256. ON_WM_SYSCOMMAND()
  257. ON_WM_PAINT()
  258. ON_WM_QUERYDRAGICON()
  259. ON_BN_CLICKED(IDC_START, OnStart)
  260. ON_BN_CLICKED(IDC_CLEAR, OnClear)
  261. ON_BN_CLICKED(IDC_BTN_ALWAYS_ON_TOP, OnBtnAlwaysOnTop)
  262. ON_BN_CLICKED(IDC_ABOUT, OnAbout)
  263. ON_BN_CLICKED(IDC_CHECK_MINIMIZED, OnCheckMinimized)
  264. ON_BN_CLICKED(IDC_CHECK_AUTORUN, OnCheckAutorun)
  265. ON_MESSAGE(WM_HOTKEY,OnHotKey)
  266. ON_BN_CLICKED(IDC_SELECT_DIR, OnSelectDir)
  267. ON_WM_CTLCOLOR()
  268. ON_WM_LBUTTONDOWN()
  269. ON_BN_CLICKED(IDC_STOP, OnStop)
  270. ON_BN_CLICKED(IDC_SELECTIONS, OnSelections)
  271. ON_BN_CLICKED(IDC_NOSOUND, OnNosound)
  272. ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
  273. //}}AFX_MSG_MAP
  274. END_MESSAGE_MAP()
  275. /////////////////////////////////////////////////////////////////////////////
  276. // CDDlg message handlers
  277. BOOL CDDlg::OnInitDialog()
  278. {
  279. CDialog::OnInitDialog();
  280. // Add "About..." menu item to system menu.
  281. // IDM_ABOUTBOX must be in the system command range.
  282. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  283. ASSERT(IDM_ABOUTBOX < 0xF000);
  284. CMenu* pSysMenu = GetSystemMenu(FALSE);
  285. if (pSysMenu != NULL)
  286. {
  287. CString strAboutMenu;
  288. strAboutMenu.LoadString(IDS_ABOUTBOX);
  289. if (!strAboutMenu.IsEmpty())
  290. {
  291. pSysMenu->AppendMenu(MF_SEPARATOR);
  292. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  293. }
  294. }
  295. // Set the icon for this dialog. The framework does this automatically
  296. // when the application's main window is not a dialog
  297. SetIcon(m_hIcon, TRUE); // Set big icon
  298. SetIcon(m_hIcon, FALSE); // Set small icon
  299. m_list.ModifyStyle(LVS_TYPEMASK,LVS_REPORT);
  300. m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_FLATSB|LVS_EX_TWOCLICKACTIVATE |LVS_EX_GRIDLINES);
  301. m_list.InsertColumn(0,"数量",LVCFMT_LEFT,40);
  302. m_list.InsertColumn(1,"时间",LVCFMT_LEFT,80);
  303. m_list.InsertColumn(2,"类型",LVCFMT_LEFT,100);
  304. m_list.InsertColumn(3,"变化的内容",LVCFMT_LEFT,500);
  305. LOGFONT lf;
  306. ::ZeroMemory(&lf,sizeof(lf)); //API函数,它将一块内存清零
  307. lf.lfHeight =90;
  308. lf.lfWeight =FW_NORMAL; //, FW_NORMAL常规 FW_BOLD;粗体
  309. lf.lfItalic =false;
  310. ::lstrcpy(lf.lfFaceName ,"Verdana");
  311. m_font.CreatePointFontIndirect(&lf);
  312. GetDlgItem(IDC_STATE)->SetFont(&m_font);
  313. CString str;
  314. str.Format("你选择的监视目录为 %s",m_strWatchedDir);
  315. GetDlgItem(IDC_STATE)->SetWindowText(str);
  316. GetDlgItem(IDC_STOP)->EnableWindow(false);
  317. if(m_bAlwaysOnTop)
  318. OnBtnAlwaysOnTop();
  319. if(this->m_bMinimized)
  320. PostMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
  321. if(this->m_bAutoStart)
  322. this->OnStart();
  323. ::RegisterHotKey(m_hWnd,199,MOD_ALT,'Z');
  324. return TRUE;
  325. }
  326. void CDDlg::OnSysCommand(UINT nID, LPARAM lParam)
  327. {
  328. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  329. {
  330. CAboutDlg dlgAbout;
  331. dlgAbout.DoModal();
  332. }
  333. if(nID==SC_MINIMIZE)
  334. {
  335. ShowWindow(SW_HIDE);
  336. }
  337. else
  338. {
  339. CDialog::OnSysCommand(nID, lParam);
  340. }
  341. }
  342. // If you add a minimize button to your dialog, you will need the code below
  343. // to draw the icon. For MFC applications using the document/view model,
  344. // this is automatically done for you by the framework.
  345. void CDDlg::OnPaint()
  346. {
  347. if (IsIconic())
  348. {
  349. CPaintDC dc(this); // device context for painting
  350. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  351. // Center icon in client rectangle
  352. int cxIcon = GetSystemMetrics(SM_CXICON);
  353. int cyIcon = GetSystemMetrics(SM_CYICON);
  354. CRect rect;
  355. GetClientRect(&rect);
  356. int x = (rect.Width() - cxIcon + 1) / 2;
  357. int y = (rect.Height() - cyIcon + 1) / 2;
  358. // Draw the icon
  359. dc.DrawIcon(x, y, m_hIcon);
  360. }
  361. else
  362. {
  363. CDialog::OnPaint();
  364. }
  365. }
  366. // The system calls this to obtain the cursor to display while the user drags
  367. // the minimized window.
  368. HCURSOR CDDlg::OnQueryDragIcon()
  369. {
  370. return (HCURSOR) m_hIcon;
  371. }
  372. BOOL CDDlg::StartWatch(CString path)
  373. {
  374. m_strWatchedDir = path;
  375. DWORD ThreadId; //创建一个新线程用于监视
  376. m_hThread=::CreateThread(NULL,0,ThreadProc,this,0,&ThreadId );
  377. return NULL!=m_hThread;
  378. }
  379. void CDDlg::OnSelectDir()
  380. {
  381. CBrowseFolder Dlg;
  382. if(Dlg.DoModal(this,NULL)==IDOK)
  383. {
  384. m_strWatchedDir=Dlg.GetDirPath();
  385. ::WritePrivateProfileString("Settings",
  386. "监视目录",
  387. m_strWatchedDir,
  388. ".\\Settings.ini");
  389. GetDlgItem(IDC_STATE)->SetWindowText("你选择了监视 "+m_strWatchedDir);
  390. }
  391. }
  392. void CDDlg::OnStart()
  393. {
  394. this->StartWatch(m_strWatchedDir);
  395. GetDlgItem(IDC_STOP)->EnableWindow(true);
  396. GetDlgItem(IDC_START)->EnableWindow(false);
  397. GetDlgItem(IDC_SELECT_DIR)->EnableWindow(false);
  398. GetDlgItem(IDC_STATE)->SetWindowText("正在监视... "+m_strWatchedDir);
  399. }
  400. void CDDlg::OnStop()
  401. {
  402. GetDlgItem(IDC_STATE)->SetWindowText("停止了监视"+m_strWatchedDir);
  403. if(m_hThread !=NULL)
  404. {
  405. ::TerminateThread(m_hThread, 0 );
  406. m_hThread = NULL;
  407. }
  408. if(hDir !=INVALID_HANDLE_VALUE)
  409. {
  410. CloseHandle( hDir );
  411. hDir = INVALID_HANDLE_VALUE;
  412. }
  413. GetDlgItem(IDC_STOP)->EnableWindow(false);
  414. GetDlgItem(IDC_START)->EnableWindow(true);
  415. GetDlgItem(IDC_SELECT_DIR)->EnableWindow(true);
  416. }
  417. void CDDlg::OnClear()
  418. {
  419. PlaySound(MAKEINTRESOURCE(IDR_WAVE2),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT);
  420. m_list.DeleteAllItems();
  421. }
  422. void CDDlg::OnBtnAlwaysOnTop()
  423. {
  424. UpdateData();
  425. if (m_bAlwaysOnTop)
  426. {
  427. SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | WS_EX_TOPMOST);
  428. ::WritePrivateProfileString("Settings","AlwaysOnTop",m_bAlwaysOnTop? "1":"0",".\\Settings.ini");
  429. }
  430. else
  431. {
  432. ::SetWindowPos(GetSafeHwnd(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
  433. ::WritePrivateProfileString("Settings","AlwaysOnTop",m_bAlwaysOnTop? "1":"0",".\\Settings.ini");
  434. }
  435. }
  436. void CDDlg::OnAbout()
  437. {
  438. //CAboutDlg dd;
  439. CLogoDlg dd;
  440. dd.DoModal();
  441. }
  442. void CDDlg::OnNosound()
  443. {
  444. UpdateData(true);
  445. ::WritePrivateProfileString("Settings","AutoStart",m_bAutoStart? "1":"0",".\\Settings.ini");
  446. }
  447. void CDDlg::OnCheckMinimized()
  448. {
  449. UpdateData(true);
  450. ::WritePrivateProfileString("Settings","Minimized",m_bMinimized? "1":"0",".\\Settings.ini");
  451. }
  452. void CDDlg::OnCheckAutorun()
  453. {
  454. UpdateData(true);
  455. const TCHAR gcszAutoRunKey[]= _T( "Software\\microsoft\\windows\\currentversion\\run" );
  456. const TCHAR gcszWindowClass[] = _T("关驱控制");//设置开机程序自启动键值位置和其下新建子键值(可设为程序名)
  457. HKEY hKey;
  458. LONG lRet, lRet2;
  459. DWORD dwLength, dwDataType;
  460. TCHAR szItemValue[MAX_PATH], szPrevValue[MAX_PATH];
  461. TCHAR szBuffer[MAX_PATH];
  462. GetModuleFileName( NULL, szItemValue, MAX_PATH ); // 得到程序全路径名
  463. //MessageBox(szItemValue);
  464. lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, gcszAutoRunKey,0, KEY_READ | KEY_WRITE, &hKey );
  465. if( lRet != ERROR_SUCCESS ) // 打开注册表键
  466. {
  467. MessageBox("设置自动启动失败,请检查注册表是否被禁用!","使闹钟",MB_OK| MB_ICONEXCLAMATION);
  468. }
  469. dwLength = sizeof( szBuffer );
  470. lRet = RegQueryValueEx( hKey, gcszWindowClass,NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
  471. // 查询AutoRun项目是否存在
  472. if( m_bAutoRun ) // 添加
  473. {
  474. ::WritePrivateProfileString("Settings","AutoRun",m_bAutoRun? "1":"0",".\\Settings.ini");
  475. if( lRet != ERROR_SUCCESS ) // AutoRun项目不存在
  476. lRet2 = RegSetValueEx( hKey, gcszWindowClass,0, REG_SZ, (LPBYTE)szItemValue, strlen( szItemValue ) );
  477. else // 存在, 比较二者是否相同
  478. {
  479. dwLength = sizeof( szPrevValue );
  480. lRet2 = RegQueryValueEx( hKey, gcszWindowClass,0, &dwDataType,(LPBYTE)szPrevValue, &dwLength );
  481. if( lstrcmp( szItemValue, szPrevValue ) ) // 不相同则替换
  482. {
  483. lRet2 = RegDeleteValue( hKey, gcszWindowClass );
  484. lRet2 = RegSetValueEx( hKey, gcszWindowClass,0, REG_SZ,(LPBYTE)szItemValue, strlen( szItemValue ) );
  485. }
  486. }
  487. }
  488. else // 删除
  489. {
  490. if( lRet == ERROR_SUCCESS )
  491. lRet2 = RegDeleteValue( hKey, gcszWindowClass ); // AutoRun项目已存在则删除
  492. ::WritePrivateProfileString("Settings","AutoRun",m_bAutoRun? "1":"0",".\\Settings.ini");
  493. }
  494. RegCloseKey( hKey ); // 关闭注册表键
  495. if( lRet2 != ERROR_SUCCESS )
  496. {}// MessageBox("设置自动启动失败,请检查注册表是否被禁用!","使闹钟",MB_OK| MB_ICONEXCLAMATION);
  497. }
  498. LRESULT CDDlg::OnHotKey(WPARAM wp,LPARAM lp)
  499. {
  500. if(wp==199)
  501. {
  502. if(IsWindowVisible())
  503. ShowWindow(SW_HIDE);
  504. else
  505. ShowWindow(SW_SHOWNORMAL);
  506. }
  507. return 0;
  508. }
  509. BOOL CDDlg::DestroyWindow()
  510. {
  511. ::UnregisterHotKey(m_hWnd,199);
  512. return CDialog::DestroyWindow();
  513. }
  514. BOOL CDDlg::PreTranslateMessage(MSG* pMsg)
  515. {
  516. if (pMsg->message==WM_KEYDOWN)
  517. {
  518. switch (pMsg->wParam)
  519. {
  520. case VK_ESCAPE:
  521. ShowWindow(SW_HIDE);
  522. return true;
  523. break;
  524. case VK_RETURN:
  525. return true;
  526. break;
  527. default: break;
  528. }
  529. }
  530. return CDialog::PreTranslateMessage(pMsg);
  531. }
  532. HBRUSH CDDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  533. {
  534. HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  535. if(pWnd->GetDlgCtrlID()==IDC_STATE)
  536. pDC->SetTextColor(RGB(0,0,255));
  537. // TODO: Return a different brush if the default is not desired
  538. return hbr;
  539. }
  540. void CDDlg::OnLButtonDown(UINT nFlags, CPoint point)
  541. {
  542. ReleaseCapture();
  543. SendMessage(WM_NCLBUTTONDOWN,HTCAPTION,0);
  544. CDialog::OnLButtonDown(nFlags, point);
  545. }
  546. void CDDlg::OnSelections()
  547. {
  548. CSelectDlg sel;
  549. if(sel.DoModal()==IDOK)
  550. {
  551. this->m_bAddNew0=sel.m_bAddNew;
  552. this->m_bDel0=sel.m_bDel;
  553. this->m_bModify0=sel.m_bModify;
  554. this->m_bRename0=sel.m_bRename;
  555. this->m_bOther0=sel.m_bOther;
  556. ::WritePrivateProfileString("Selections","m_bAddNew",sel.m_bAddNew? "1":"0",".\\Settings.ini");
  557. ::WritePrivateProfileString("Selections","m_bDel",sel.m_bDel? "1":"0",".\\Settings.ini");
  558. ::WritePrivateProfileString("Selections","m_bModify",sel.m_bModify? "1":"0",".\\Settings.ini");
  559. ::WritePrivateProfileString("Selections","m_bRename",sel.m_bRename? "1":"0",".\\Settings.ini");
  560. ::WritePrivateProfileString("Selections","m_bOther",sel.m_bOther? "1":"0",".\\Settings.ini");
  561. }
  562. }
  563. void CDDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
  564. {
  565. int nIndex = m_list.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
  566. if(nIndex == -1)
  567. return;
  568. char buf[200];
  569. m_list.GetItemText(nIndex,3,buf,200);
  570. CString str;
  571. str=this->m_strWatchedDir+"\\"+buf;
  572. ::ShellExecute(NULL,"open",str,NULL,NULL,SW_SHOW);
  573. *pResult = 0; *pResult = 0;
  574. }