版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第C++程序操作文件對話框的方法strLog.Format(_T("[CanAccessFile]GetFileSecurity-dwSize:%d"),dwSize);
WriteLog(strLog);
//獲取文件權(quán)限信息結(jié)構(gòu)體大小
bRet=GetFileSecurity(strPath,si,psd,dwSize,dwSize);
if(!bRet)
strLog.Format(_T("[CanAccessFile]GetFileSecurity-dwSizefailed,GetLastError:%d"),GetLastError());
WriteLog(strLog);
delete[]pBuf;
returnFALSE;
WriteLog(_T("[CanAccessFile]OpenProcessToken"));
HANDLEhToken=NULL;
if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,hToken))
strLog.Format(_T("[CanAccessFile]OpenProcessTokenfailed,GetLastError:%d"),GetLastError());
WriteLog(strLog);
delete[]pBuf;
returnFALSE;
WriteLog(_T("[CanAccessFile]DuplicateToken"));
//模擬令牌
HANDLEhImpersonatedToken=NULL;
if(!DuplicateToken(hToken,SecurityImpersonation,hImpersonatedToken))
strLog.Format(_T("[CanAccessFile]DuplicateTokenfailed,GetLastError:%d"),GetLastError());
WriteLog(strLog);
delete[]pBuf;
CloseHandle(hToken);
returnFALSE;
WriteLog(_T("[CanAccessFile]MapGenericMask"));
//在檢測是否有某個(gè)權(quán)限時(shí),將GENERIC_WRITE等值傳給本函數(shù)的第二個(gè)參數(shù)dwGenericAccessMask
//GENERIC_WRITE等參數(shù)在調(diào)用CreateFile創(chuàng)建文件時(shí)會使用到,下面調(diào)用MapGenericMask將
//GENERIC_WRITE等轉(zhuǎn)換成FILE_GENERIC_WRITE等
//將GENERIC_XXXXXX轉(zhuǎn)換成FILE_GENERIC_XXXXXX
GENERIC_MAPPINGgenMap;
genMap.GenericRead=FILE_GENERIC_READ;
genMap.GenericWrite=FILE_GENERIC_WRITE;
genMap.GenericExecute=FILE_GENERIC_EXECUTE;
genMap.GenericAll=FILE_ALL_ACCESS;
MapGenericMask(dwGenericAccessMask,genMap);
WriteLog(_T("[CanAccessFile]AccessCheck"));
//調(diào)用AccessCheck來檢測是否有指定的權(quán)限
PRIVILEGE_SETprivileges={0};
DWORDdwGrantedAccess=0;
DWORDprivLength=sizeof(privileges);
BOOLbGrantedAccess=FALSE;
if(AccessCheck(psd,hImpersonatedToken,dwGenericAccessMask,
genMap,privileges,privLength,dwGrantedAccess,bGrantedAccess))
strLog.Format(_T("[CanAccessFile]AccessChecksucceed,dwGenericAccessMask:%d,dwGrantedAccess:%d,bGrantedAccess:%d,"),
dwGenericAccessMask,dwGrantedAccess,bGrantedAccess);
WriteLog(strLog);
if(bGrantedAccess)
if(dwGenericAccessMask==dwGrantedAccess)
bGrantedAccess=TRUE;
else
bGrantedAccess=FALSE;
else
bGrantedAccess=FALSE;
else
strLog.Format(_T("[CanAccessFile]AccessCheckfailed,GetLastError:%d"),GetLastError());
WriteLog(strLog);
bGrantedAccess=FALSE;
strLog.Format(_T("[CanAccessFile]bGrantedAccess:%d"),bGrantedAccess);
WriteLog(strLog);
delete[]pBuf;
CloseHandle(hImpersonatedToken);
CloseHandle(hToken);
returnbGrantedAccess;
}
另外,我們可以在HOOK回調(diào)函數(shù)中調(diào)整文件對話框相對于父窗口的彈出位置,攔截WM_INITDIALOG消息,代碼如下:
//通過該回調(diào)函數(shù)移動文件保存對話框的位置,解決win32文件對話框默認(rèn)顯示在屏幕左上方的問題
UINT_PTRCALLBACKOFNHookProc(
HWNDhdlg,//handletochilddialogbox
UINTuiMsg,//messageidentifier
WPARAMwParam,//messageparameter
LPARAMlParam//messageparameter
if(uiMsg==WM_INITDIALOG)
HWNDhFileDlg=::GetParent(hdlg);
HWNDhParent=::GetParent(hFileDlg);
RECTrcParent;
::GetWindowRect(hParent,rcParent);
RECTrcFileDlg;
::GetWindowRect(hFileDlg,rcFileDlg);
intnFileDlgWdith=rcFileDlg.right-rcFileDlg.left;
intnFileDlgHeight=rcFileDlg.bottom-rcFileDlg.top;
RECTrcDst;
rcDst.left=rcParent.left+((rcParent.right-rcParent.left)-nFileDlgWdith)/2;
rcDst.right=rcDst.left+nFileDlgWdith;
rcDst.bottom=rcParent.bottom+1;
rcDst.top=rcDst.bottom-nFileDlgHeight;
//下面保證文件對話框處于屏幕可視區(qū)域內(nèi)
if(rcDst.left0)
rcDst.left=0;
rcDst.right=rcDst.left+nFileDlgWdith;
if(rcDst.top0)
rcDst.top=0;
rcDst.bottom=rcDst.top+nFileDlgHeight;
intnXScreen=::GetSystemMetrics(SM_CXSCREEN);
intnYScreen=::GetSystemMetrics(SM_CYSCREEN);
if(rcDst.rightnXScreen)
rcDst.right=nXScreen;
rcDst.left=rcDst.right-nFileDlgWdith;
if(rcDst.bottomnYScreen)
rcDst.bottom=nYScreen;
rcDst.top=rcDst.bottom-nFileDlgHeight;
//重新設(shè)置文件對話框位置
::SetWindowPos(hFileDlg,NULL,rcDst.left,rcDst.top,0,0,SWP_NOSIZE|SWP_NOZORDER);
return1;
return0;
}
3、調(diào)用SHBrowseForFolder接口打開瀏覽文件夾對話框
當(dāng)我們在IM聊天框中發(fā)起文件傳輸時(shí),我們要發(fā)送的是一個(gè)文件夾,可能就需要使用到系統(tǒng)的瀏覽文件夾對話框來選擇要發(fā)送的文件夾。當(dāng)我們在接收到多個(gè)文件時(shí),可以選擇全部另存為,此時(shí)也需要使用系統(tǒng)的瀏覽文件夾對話框來選擇要另存為的路徑。
我們調(diào)用SHBrowseForFolder接口即可打開瀏覽文件夾對話框,相關(guān)代碼如下所示:
//打開目錄選擇對話框
::CoInitialize(NULL);
LPMALLOClpMalloc=NULL;
TCHARpchSelDir[MAX_PATH]={0};
pchSelDir[0]=_T('\0');
if(E_FAIL==::SHGetMalloc(lpMalloc))
::CoUninitialize();
return;
BROWSEINFObrowseInfo;
browseInfo.hwndOwner=m_hParentWnd;
browseInfo.pidlRoot=NULL;
browseInfo.pszDisplayName=NULL;
browseInfo.lpszTitle=STRING_SEL_FOLDER_TO_SEND;
browseInfo.ulFlags=BIF_RETURNONLYFSDIRS;
browseInfo.lpfn=NULL;
browseInfo.lParam=0;
//打開瀏覽文件夾對話框
LPITEMIDLISTlpItemIDList=NULL;
if((lpItemIDList=::SHBrowseForFolder(browseInfo))
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- apg工藝生產(chǎn)管理制度
- 釀造車間生產(chǎn)管理制度
- 生產(chǎn)技術(shù)方面制度
- 安全生產(chǎn)法電工管理制度
- 班組安全生產(chǎn)制度范本
- 代加工生產(chǎn)規(guī)章制度
- 生產(chǎn)計(jì)劃管理規(guī)章制度
- 生產(chǎn)服務(wù)管理制度范本
- 2026山東泰安市屬事業(yè)單位初級綜合類崗位招聘參考考試試題附答案解析
- 2026甘肅白銀市平川區(qū)容通水務(wù)有限公司招聘9人參考考試題庫附答案解析
- 清真生產(chǎn)過程管控制度
- 2026年淺二度燒傷處理
- 北京通州產(chǎn)業(yè)服務(wù)有限公司招聘考試備考題庫及答案解析
- 河北省NT名校聯(lián)合體2025-2026學(xué)年高三上學(xué)期1月月考英語(含答案)
- 2025-2026學(xué)年滬科版八年級數(shù)學(xué)上冊期末測試卷(含答案)
- 途虎養(yǎng)車安全培訓(xùn)課件
- 衛(wèi)生管理研究論文
- 2025-2026學(xué)年人教版(新教材)小學(xué)數(shù)學(xué)二年級下冊(全冊)教學(xué)設(shè)計(jì)(附教材目錄P161)
- 委托市場調(diào)研合同范本
- 畜牧安全培訓(xùn)資料課件
- 2025年度黨支部書記述職報(bào)告
評論
0/150
提交評論