📄 ddlg.cpp
字号:
// DDlg.cpp : implementation file
//
#include "stdafx.h"
#include "listen.h"
#include "DDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDDlg dialog
CDDlg::CDDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDDlg::IDD, pParent)
{
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(CDDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON2);
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;
//{AfxMessageBox("nihao",0,0);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_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();
// 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;
::ZeroMemory(&lf,sizeof(lf)); //API函数,它将一块内存清零
lf.lfHeight =90;
lf.lfWeight =FW_NORMAL; //, FW_NORMAL常规 FW_BOLD;粗体
lf.lfItalic =false;
::lstrcpy(lf.lfFaceName ,"Verdana");
m_font.CreatePointFontIndirect(&lf);
GetDlgItem(IDC_STATE)->SetFont(&m_font);
CString str;
str.Format("你选择的监视目录为 %s",m_strWatchedDir);
GetDlgItem(IDC_STATE)->SetWindowText(str);
GetDlgItem(IDC_STOP)->EnableWindow(false);
if(m_bAlwaysOnTop)
OnBtnAlwaysOnTop();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -