VC常用代碼(VS2008下測試過的)
?
1.只允許運(yùn)行程序的一個(gè)實(shí)例
MFC寫在InitInstance函數(shù)中
????HANDLE?hMutex?=?CreateMutex(NULL,?TRUE,?_T("test")); //創(chuàng)建一個(gè)有名的互斥對象 ????if?(ERROR_ALREADY_EXISTS?==?GetLastError())//如果互斥對象創(chuàng)建失敗 ????{ ????????CWnd?*wnd; //找到當(dāng)前允許程序的窗口,第二個(gè)程序?yàn)榇翱诿?????????if(?wnd?=?CWnd::FindWindow(0,?_T("ControlDemo"))) ????????{ //恢復(fù)窗口 ????????????wnd->ShowWindow(SW_RESTORE); //最前端顯示 ????????????wnd->SetForegroundWindow(); ????????} ????????return?FALSE; ????}
2.打開保存文件
1?????LPCTSTR?pFileType?=_T("音樂/電影文件(mp3,wav,avi,asf)|*.mp3;*.wav;*.avi;*.asf|mp3?文件(*.mp3)|*.mp3|音頻文件?(*.wav)|*.wav|視頻文件?(*.avi)|*.avi|Window?Media?文件(*.asf)|*.asf|所有文件?(*.*)|*.*||"); 2?????CFileDialog?dlg(FALSE,?_T("打開MP3文件"),?_T("默認(rèn)打開的文件名"),?OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR,?pFileType);? 3?????if(dlg.DoModal()==IDOK)? 4?????{? 5?????????CString?m_filename=dlg.GetPathName();? 6????????? 7?????}
3.打開目錄
?1?????TCHAR?szPath[MAX_PATH];?????//存放選擇的目錄路徑? ?2?????CString?str; ?3? ?4?????ZeroMemory(szPath,?sizeof(szPath));??? ?5? ?6?????BROWSEINFO?bi;??? ?7?????bi.hwndOwner?=?m_hWnd;??? ?8?????bi.pidlRoot?=?NULL;??? ?9?????bi.pszDisplayName?=?szPath;??? 10?????bi.lpszTitle?=?L"請選擇需要打開的目錄:";??? 11?????bi.ulFlags?=?0;??? 12?????bi.lpfn?=?NULL;??? 13?????bi.lParam?=?0;??? 14?????bi.iImage?=?0;??? 15?????//彈出選擇目錄對話框 16?????LPITEMIDLIST?lp?=?SHBrowseForFolder(&bi);??? 17? 18?????if(lp?&&?SHGetPathFromIDList(lp,?szPath))??? 19?????{ 20?????????str.Format(_T("選擇的目錄為?%s"),??szPath); 21?????????AfxMessageBox(str);? 22?????} 23?????else??? 24?????????AfxMessageBox(_T("無效的目錄,請重新選擇"));
4.執(zhí)行控制臺命令和打開程序
有3種方式可以實(shí)現(xiàn)。
?1?WinExec("cmd",?SW_SHOW); //執(zhí)行的程序名稱{文件名和參數(shù);?如沒指定路徑會按以下順序查找:?程序目錄/當(dāng)前目錄/System32/Windows/PATH環(huán)境變量},顯示方式? ?2?system("cmd"); ?3?ShellExecute(NULL,?_T("open"),_T("cmd"),NULL,NULL,?SW_SHOWNORMAL);? ?4? /* ?5?ShellExecute(? HWND?hwnd,???????????//父窗口句柄?(如:NULL,Handle等) ?6? LPCSTR?lpOperation,?//操作類型?(如:"open")*要加英文雙引號 ?7? LPCSTR?lpFile,???????????//要進(jìn)行操作的文件或路徑? ?8? LPCSTR?lpParameters,?//當(dāng)lpOperation為“explore”時(shí)指定要傳遞的參數(shù),通常設(shè)為NULL? ?9? LPCSTR?lpDirectory,????//指定默認(rèn)目錄,通常設(shè)為NULL? 10? INT?nShowCmd??????????//文件打開的方式,以通常方式還是最大化或最小化顯示,一般為SW_SHOWNORMAL? 11? )? 12?參數(shù)說明: 13? ●hWnd:用于指定父窗口句柄。當(dāng)函數(shù)調(diào)用過程出現(xiàn)錯(cuò)誤時(shí),它將作為Windows消息窗口的父窗口。例如,可以將其設(shè)置為應(yīng)用程序主窗口句柄,即Application.Handle,也可以將其設(shè)置為桌面窗口句柄(用GetDesktopWindow函數(shù)獲得)。? 14? ●Operation:用于指定要進(jìn)行的操作。其中“open”操作表示執(zhí)行由FileName參數(shù)指定的程序,或打開由FileName參數(shù)指定的文件或文件夾;“print”操作表示打印由FileName參數(shù)指定的文件;“explore”操作表示瀏覽由FileName參數(shù)指定的文件夾。當(dāng)參數(shù)設(shè)為nil時(shí),表示執(zhí)行默認(rèn)操作“open”。? 15? ●FileName:用于指定要打開的文件名、要執(zhí)行的程序文件名或要瀏覽的文件夾名。? 16? ●Parameters:若FileName參數(shù)是一個(gè)可執(zhí)行程序,則此參數(shù)指定命令行參數(shù),否則此參數(shù)應(yīng)為nil或PChar(0)。? 17? ●Directory:用于指定默認(rèn)目錄。? 18? ●ShowCmd:若FileName參數(shù)是一個(gè)可執(zhí)行程序,則此參數(shù)指定程序窗口的初始顯示方式,否則此參數(shù)應(yīng)設(shè)置為0。? 19? 若ShellExecute函數(shù)調(diào)用成功,則返回值為被執(zhí)行程序的實(shí)例句柄。若返回值小于32,則表示出現(xiàn)錯(cuò)誤。
傳入的參數(shù)既可以是cmd命令,也可以是exe程序
例:
關(guān)機(jī):system("shutdown -s -t 0");
打開磁盤: system("explorer.exe D:\")
?PROCESS_INFORMATION pi;
?STARTUPINFO si;
?memset(&si,0,sizeof(si));
?si.cb=sizeof(si);
?si.wShowWindow=SW_SHOW;
?si.dwFlags=STARTF_USESHOWWINDOW;
?bool fRet=CreateProcess(L"C:\Test.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
5.文件拖動
//1 添加 WM_DropFILES 靜態(tài)消息?
//2 在OnInitDialog()函數(shù)中加入?
DragAcceptFiles(TRUE);//允許拖放?
//3 WM_DropFILES 的處理函數(shù)為?
?1?????unsigned?int?nFiles=DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0);//取得拖放的文件總數(shù)? ?2?????for?(unsigned?int?i?=?0;?i?<?nFiles;?i++)//循環(huán)取得文件名? ?3?????{? ?4?????????unsigned?int?nLen?=?DragQueryFile(hDropInfo,?i,?NULL,?0)+1;//取得文件名長度? ?5?????????char?*psBuffer?=?new?char[nLen];? ?6?????????unsigned?int?sLen?=?DragQueryFileA(hDropInfo,?i,?psBuffer,?nLen);//取得文件名到psBuffer中,sLen為實(shí)際拷貝的字符數(shù)? ?7?????????CString?str(psBuffer); ?8?????????ListBox.AddString(str);//將路徑加入ListBox中 ?9?????????delete?[]?psBuffer;? 10?????}? 11?????DragFinish(hDropInfo);//結(jié)束
?
6.文件查找
?1?void?CControlDemoDlg::FindAllFile(const?CString?&strPath,?const?CString?&strType) ?2?{ ?3?????CFileFind?file; ?4?????BOOL?bScanFirst?=?FALSE;//目錄是否是第一次掃描 ?5?????CString?strRealPath;//將路徑和文件類型進(jìn)行拼接 ?6?????strRealPath.Format(_T("%s\*.*"),strPath); ?7?????bool?bFind?=?file.FindFile(strRealPath); ?8?????while(bFind) ?9?????{???? 10?????????bFind?=?file.FindNextFile(); 11?????????CString?strTemp?=?file.GetFilePath(); 12?????????if?(!file.IsDots()?&&?!file.IsDirectory())//如果不是目錄 13?????????{ 14?????????????if?(!bScanFirst) 15?????????????{ 16?????????????????FindTypeFile(strPath,?strType);//查找當(dāng)前文件所在文件夾下指定類型的文件 17?????????????????bScanFirst?=?TRUE; 18?????????????} 19?????????} 20?????????else?if?(!file.IsDots()?&&?file.IsDirectory())//如果是目錄,排除.和..兩種類型的目錄 21?????????{ 22?????????????FindAllFile(strTemp,?strType);())//遞歸目錄 23?????????} 24?????} 25?} 26? 27?void?CControlDemoDlg::FindTypeFile(const?CString?&strPath,?const?CString?&strType) 28?{ 29?????CFileFind?file; 30?????CString?strRealPath; 31?????strRealPath.Format(_T("%s\%s"),strPath,strType); 32?????bool?bFind?=?file.FindFile(strRealPath); 33?????while(bFind) 34?????{???? 35?????????bFind?=?file.FindNextFile(); 36?????????CString?strTemp?=?file.GetFilePath(); 37?????????if?(!file.IsDots()?&&?!file.IsDirectory())//如果是指定格式的文件則加入列表框 38?????????{ 39?????????????ListBox.AddString(strTemp);//添加到ListBox 40?????????} 41?????} 42?}
?
?