⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddlg.cpp

📁 The vc catalogue places procedure code under surveillance
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// dDlg.cpp : implementation file
//

#include "stdafx.h"
#include "d.h"
#include "dDlg.h"
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


UINT SoundThread(LPVOID)
{
	PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); 
	return 0;
}

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDDlg dialog

CDDlg::CDDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDDlg)
m_bAlwaysOnTop =(::GetPrivateProfileInt("Settings","AlwaysOnTop",0,".\\Settings.ini")==0 ?false:true);
m_bAutoRun=(::GetPrivateProfileInt("Settings","AutoRun",0,".\\Settings.ini")==0 ?false:true);
m_bMinimized=(::GetPrivateProfileInt("Settings","Minimized",0,".\\Settings.ini")==0 ?false:true);
	
m_bAutoStart = (::GetPrivateProfileInt("Settings","AutoStart",0,".\\Settings.ini")==0 ?false:true);
	
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

m_bAddNew0=(::GetPrivateProfileInt("Selections","m_bAddNew",0,".\\Settings.ini")==0 ?false:true);
m_bDel0=(::GetPrivateProfileInt("Selections","m_bDel",0,".\\Settings.ini")==0 ?false:true);
m_bRename0=(::GetPrivateProfileInt("Selections","m_bRename",0,".\\Settings.ini")==0 ?false:true);
m_bModify0=(::GetPrivateProfileInt("Selections","m_bModify",0,".\\Settings.ini")==0 ?false:true);
m_bOther0=(::GetPrivateProfileInt("Selections","m_bOther",0,".\\Settings.ini")==0 ?false:true);


/*------------------------------------------------------*/
	char buf[MAX_PATH];
	::GetPrivateProfileString("Settings",
							  "监视目录",
							  "",
							  buf,
							  MAX_PATH,".\\Settings.ini");
	strcpy((LPTSTR)(LPCTSTR)m_strWatchedDir,buf);
/*------------------------------------------------------*/
	m_hThread=NULL;		
	hDir=INVALID_HANDLE_VALUE  ;
	m_i=0;
	m_szi=new char[MAX_PATH];
	itoa(m_i,m_szi,10);

	

}

CDDlg::~CDDlg()
{
	
/*----------------------释放资源------------------------------------*/
	if(m_hThread !=NULL)
	{
		::TerminateThread(m_hThread, 0 );
		m_hThread = NULL;
	}
	if(hDir !=INVALID_HANDLE_VALUE)
	{
		CloseHandle( hDir );
		hDir = INVALID_HANDLE_VALUE;
	}
}

/*----------------------线程函数------------------------------------*/
DWORD WINAPI CDDlg::ThreadProc( LPVOID lParam )  //线程函数
{
	CDDlg* obj = (CDDlg*)lParam;  //参数转化
	
	obj->hDir = CreateFile(            //打开目录,得到目录的句柄
		obj->m_strWatchedDir,
		GENERIC_READ|GENERIC_WRITE,
		FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
		NULL,
		OPEN_EXISTING,
		FILE_FLAG_BACKUP_SEMANTICS,
		NULL
        ); 
	if(obj->hDir ==INVALID_HANDLE_VALUE  ) 
		return false;
	
	char buf[(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH)*2];
	FILE_NOTIFY_INFORMATION* pNotify=(FILE_NOTIFY_INFORMATION*)buf;
	DWORD dwBytesReturned;        
	while(true)
	{
		if( ::ReadDirectoryChangesW( obj->hDir,
			pNotify,
			sizeof(buf),
			true,
			FILE_NOTIFY_CHANGE_FILE_NAME|
			FILE_NOTIFY_CHANGE_DIR_NAME|
			FILE_NOTIFY_CHANGE_ATTRIBUTES|
			FILE_NOTIFY_CHANGE_SIZE|
			FILE_NOTIFY_CHANGE_LAST_WRITE|
			FILE_NOTIFY_CHANGE_LAST_ACCESS|
			FILE_NOTIFY_CHANGE_CREATION|
			FILE_NOTIFY_CHANGE_SECURITY,
			&dwBytesReturned,
			NULL,
			NULL ) )
		{
			char tmp[MAX_PATH], str1[MAX_PATH], str2[MAX_PATH];
			memset( tmp, 0, sizeof(tmp) ); //ZeroMemory()
			WideCharToMultiByte( CP_ACP,0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL );
			strcpy( str1, tmp );
	
			if(pNotify->NextEntryOffset !=0 )
			{
				PFILE_NOTIFY_INFORMATION p = (PFILE_NOTIFY_INFORMATION)((char*)pNotify+pNotify->NextEntryOffset);
				memset( tmp, 0, sizeof(tmp) );
				WideCharToMultiByte( CP_ACP,0,p->FileName,p->FileNameLength/2,tmp,99,NULL,NULL );
				strcpy( str2, tmp );
			}
			switch(pNotify->Action)
			{				
				case FILE_ACTION_ADDED:
					if(obj->m_bAddNew0)
					{
						CTime tt=CTime::GetCurrentTime();	
						CString strTT;
						strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
						obj->m_list.InsertItem(0,obj->m_szi);
						obj->m_list.SetItemText(0,2,"添加了新文件");
						obj->m_list.SetItemText(0,3,str1);
						obj->m_list.SetItemText(0,1,strTT);
				//		PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); 
					}
					break;
			
				case FILE_ACTION_REMOVED:
					if(obj->m_bDel0)
					{
						CTime tt=CTime::GetCurrentTime();	
						CString strTT;
						strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
						obj->m_list.InsertItem(0,obj->m_szi);
						obj->m_list.SetItemText(0,2,"删除了文件");
						obj->m_list.SetItemText(0,3,str1);
						obj->m_list.SetItemText(0,1,strTT);
				//		PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); 
					}
					break;

				case FILE_ACTION_RENAMED_NEW_NAME:
					if(obj->m_bRename0)
					{
						CTime tt=CTime::GetCurrentTime();	
						CString strTT;
						strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
						obj->m_list.InsertItem(0,obj->m_szi);
						obj->m_list.SetItemText(0,2,"重命名了文件");
						strcat(str1,"->");
						obj->m_list.SetItemText(0,3,strcat(str1,str2));
						obj->m_list.SetItemText(0,1,strTT);
						//			PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); 
					}
					break;
		
				case FILE_ACTION_RENAMED_OLD_NAME:
					if(obj->m_bRename0)
					{
						CTime tt=CTime::GetCurrentTime();	
						CString strTT;
						strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
						obj->m_list.InsertItem(0,obj->m_szi);
						obj->m_list.SetItemText(0,2,"重命名了文件");
						strcat(str1," 改名为 ");
						obj->m_list.SetItemText(0,3,strcat(str1,str2));
						obj->m_list.SetItemText(0,1,strTT);
						//			PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); 
					}
					break;

				case FILE_ACTION_MODIFIED:
					if(obj->m_bModify0)
					{
						CTime tt=CTime::GetCurrentTime();	
						CString strTT;
						strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
						obj->m_list.InsertItem(0,obj->m_szi);
						obj->m_list.SetItemText(0,2,"修改了文件");
						obj->m_list.SetItemText(0,3,str1);
						obj->m_list.SetItemText(0,1,strTT);
						//		PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); 
					}
					break;  
					
				default:
					if(obj->m_bOther0)
					{
						CTime tt=CTime::GetCurrentTime();	
						CString strTT;
						strTT.Format("%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
						obj->m_list.InsertItem(0,obj->m_szi);
						obj->m_list.SetItemText(0,2,"未知变化");
						obj->m_list.SetItemText(0,3,"");
						obj->m_list.SetItemText(0,1,strTT);
					
						//		PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT); 
					}
					break;  
			}	
			obj->m_i++;		
			itoa(obj->m_i,obj->m_szi,10);
			//AfxBeginThread(SoundThread,0);			
		}
		else           
			break;           
	}
	return 0;
}
/*----------------------线程函数------------------------------------*/


void CDDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDDlg)
	DDX_Control(pDX, IDC_LIST1, m_list);
	DDX_Check(pDX, IDC_BTN_ALWAYS_ON_TOP, m_bAlwaysOnTop);
	DDX_Check(pDX, IDC_CHECK_AUTORUN, m_bAutoRun);
	DDX_Check(pDX, IDC_CHECK_MINIMIZED, m_bMinimized);
	DDX_Check(pDX, IDC_NOSOUND, m_bAutoStart);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDDlg, CDialog)
	//{{AFX_MSG_MAP(CDDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_START, OnStart)
	ON_BN_CLICKED(IDC_CLEAR, OnClear)
	ON_BN_CLICKED(IDC_BTN_ALWAYS_ON_TOP, OnBtnAlwaysOnTop)
	ON_BN_CLICKED(IDC_ABOUT, OnAbout)
	ON_BN_CLICKED(IDC_CHECK_MINIMIZED, OnCheckMinimized)
	ON_BN_CLICKED(IDC_CHECK_AUTORUN, OnCheckAutorun)
		ON_MESSAGE(WM_HOTKEY,OnHotKey)
	ON_BN_CLICKED(IDC_SELECT_DIR, OnSelectDir)
	ON_WM_CTLCOLOR()
	ON_WM_LBUTTONDOWN()
	ON_BN_CLICKED(IDC_STOP, OnStop)
	ON_BN_CLICKED(IDC_SELECTIONS, OnSelections)
	ON_BN_CLICKED(IDC_NOSOUND, OnNosound)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDDlg message handlers

BOOL CDDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	
	m_list.ModifyStyle(LVS_TYPEMASK,LVS_REPORT);
	m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_FLATSB|LVS_EX_TWOCLICKACTIVATE |LVS_EX_GRIDLINES);
	m_list.InsertColumn(0,"数量",LVCFMT_LEFT,40);
	m_list.InsertColumn(1,"时间",LVCFMT_LEFT,80);
	m_list.InsertColumn(2,"类型",LVCFMT_LEFT,100);
	m_list.InsertColumn(3,"变化的内容",LVCFMT_LEFT,500);
		
	LOGFONT lf;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -