📄 ddlg.cpp
字号:
// 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 + -