VC常用代碼(VS2008下測試過的)
?
1.只允許運行程序的一個實例
MFC寫在InitInstance函數(shù)中
????HANDLE?hMutex?=?CreateMutex(NULL,?TRUE,?_T("test"));
//創(chuàng)建一個有名的互斥對象
????if?(ERROR_ALREADY_EXISTS?==?GetLastError())//如果互斥對象創(chuàng)建失敗
????{
????????CWnd?*wnd;
//找到當(dāng)前允許程序的窗口,第二個程序為窗口名
????????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種方式可以實現(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,???????????//要進行操作的文件或路徑?
?8? LPCSTR?lpParameters,?//當(dāng)lpOperation為“explore”時指定要傳遞的參數(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)錯誤時,它將作為Windows消息窗口的父窗口。例如,可以將其設(shè)置為應(yīng)用程序主窗口句柄,即Application.Handle,也可以將其設(shè)置為桌面窗口句柄(用GetDesktopWindow函數(shù)獲得)。?
14? ●Operation:用于指定要進行的操作。其中“open”操作表示執(zhí)行由FileName參數(shù)指定的程序,或打開由FileName參數(shù)指定的文件或文件夾;“print”操作表示打印由FileName參數(shù)指定的文件;“explore”操作表示瀏覽由FileName參數(shù)指定的文件夾。當(dāng)參數(shù)設(shè)為nil時,表示執(zhí)行默認(rèn)操作“open”。?
15? ●FileName:用于指定要打開的文件名、要執(zhí)行的程序文件名或要瀏覽的文件夾名。?
16? ●Parameters:若FileName參數(shù)是一個可執(zhí)行程序,則此參數(shù)指定命令行參數(shù),否則此參數(shù)應(yīng)為nil或PChar(0)。?
17? ●Directory:用于指定默認(rèn)目錄。?
18? ●ShowCmd:若FileName參數(shù)是一個可執(zhí)行程序,則此參數(shù)指定程序窗口的初始顯示方式,否則此參數(shù)應(yīng)設(shè)置為0。?
19? 若ShellExecute函數(shù)調(diào)用成功,則返回值為被執(zhí)行程序的實例句柄。若返回值小于32,則表示出現(xiàn)錯誤。傳入的參數(shù)既可以是cmd命令,也可以是exe程序
例:
關(guān)機: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ù)?
?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;//將路徑和文件類型進行拼接
?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?}?
?





