OSType CResourceFile::MakeOSType( const std::string& fpath ) { return (OSType(fpath[0]) << 24) | (OSType(fpath[1]) << 16) | (OSType(fpath[2]) << 8) | OSType(fpath[3]); }
BOOL RunControlPanel(LPSTR szCplName) { STARTUPINFO si={0}; PROCESS_INFORMATION pi ; char szCmd[600],szWinPath[MAX_PATH],szSysPath[MAX_PATH]; si.cb = sizeof( STARTUPINFO) ; si.lpReserved = NULL ; si.lpDesktop = NULL ; si.lpTitle = NULL ; si.dwX = 0 ; si.dwY = 0 ; si.dwXSize = 0 ; si.dwYSize = 0 ; si.dwXCountChars = 0 ; si.dwYCountChars = 0 ; si.dwFillAttribute = 0 ; si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOW ; si.cbReserved2 = 0 ; si.lpReserved2 = NULL ; si.hStdInput = NULL; si.hStdOutput = NULL; si.hStdError = NULL; if(OSType() == NT) GetSystemDirectory(szWinPath,MAX_PATH); else GetWindowsDirectory(szWinPath,MAX_PATH); GetSystemDirectory(szSysPath,MAX_PATH); wsprintf(szCmd,"%s\\control.exe %s\\%s",szWinPath,szSysPath,szCplName); if( !CreateProcess( 0,//szWinPath, szCmd,//"control.exe c:pwin97systemtimedate.cpl",//szSysPath, (LPSECURITY_ATTRIBUTES)NULL, (LPSECURITY_ATTRIBUTES)NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) { return FALSE; } return TRUE; }
BOOL ringFile::moveTo(LPCTSTR lpNewName,BOOL bForceOverWrite) { if(m_bExtern || lpNewName == NULL || *lpNewName == '\0') return FALSE; char dbuf[MAX_PATH]; DWORD attr = GetFileAttributes(lpNewName); if((attr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) { if(lpNewName[strlen(lpNewName)-1] == '\\') wsprintf(dbuf,"%s%s\0\0",lpNewName,Filename()); else wsprintf(dbuf,"%s\\%s\0\0",lpNewName,Filename()); } else strcpy(dbuf,lpNewName); DWORD how = bForceOverWrite?MOVEFILE_REPLACE_EXISTING:0; DWORD loc = 0UL; BOOL bOpened = (BOOL)m_hFile; // 如果文件处于打开状态,则先关闭它 if(m_hFile) { loc = GetRWLocation(); Close(); } // 移动文件 BOOL bOK; if(OSType() == OST_WINNT) bOK = ::MoveFileEx(m_szFilename,dbuf,how); else { bOK = copyTo(dbuf,how);//ringFile rf = dbuf; if(bOK) delIt(); } // 如果移动失败,恢复原状态 if(!bOK) { if(bOpened) { Open(RF_READWRITE); Seek(loc); } return FALSE; } // 关联到新的位置 SetFile(dbuf); if(bOpened) { Open(RF_READWRITE); Seek(loc); } return TRUE; }
///////////////////////////////////////////////////////////////////////////////////////// // //通过文件对话框选取文件 // //入口: // szFileType - 过滤串 // szTitle - 对话框标题串 // bSave - ‘打开’/‘另存为’对话框选择标签 // hWnd - 对话框父窗口 // hookproc - 对话框钩子函数 // //返回: // TRUE - 关联成功、FALSE - 失败 // /////////////////////////////////////////////////////////////////////////////////////// int ringFile::Select(LPCTSTR szFileType,LPCTSTR szTitle,BOOL bSave/*=FALSE*/, HWND hWnd/*=m_hWnd*/,LPCTSTR dlgEx/*=NULL*/,LPOFNHOOKPROC hookproc/*=NULL*/, LONG lCustData/*=0*/) { RINGOPENFILENAME ofnTemp; DWORD Errval; TCHAR d[MAX_PATH],f[MAX_PATH],*p,*v; memset(d,0,MAX_PATH); if(szTitle == NULL) szTitle = LANSTR_FILEOPEN; // 规格化过滤串 int len = MAX_PATH * sizeof(TCHAR); int n0cnt = 0; p = (LPTSTR)szFileType; v = f; memset(f,0,len); for(int i=0;i<len;i++) { if(*p == '|' || *p == '\0') { *v++ = '\0'; p++; n0cnt ++; if(n0cnt > 1) break; } else { *v++ = *p++; n0cnt = 0; } } #if(_WIN32_WINNT < 0x0500) n0cnt = 0; #else n0cnt = 12; #endif if(OSType() < OST_WIN2KPRO) ofnTemp.m_ofn.lStructSize = sizeof( OPENFILENAME ) - n0cnt; else ofnTemp.m_ofn.lStructSize = sizeof(RINGOPENFILENAME); ofnTemp.m_ofn.hwndOwner = hWnd; ofnTemp.m_ofn.hInstance = GetInstance(); ofnTemp.m_ofn.lpstrFilter = f; ofnTemp.m_ofn.lpstrCustomFilter = NULL; ofnTemp.m_ofn.nMaxCustFilter = 0; ofnTemp.m_ofn.nFilterIndex = 1; ofnTemp.m_ofn.lpstrFile = d; ofnTemp.m_ofn.nMaxFile = MAX_PATH; ofnTemp.m_ofn.lpstrFileTitle = NULL; ofnTemp.m_ofn.nMaxFileTitle = NULL; ofnTemp.m_ofn.lpstrInitialDir = NULL;//GetSpecPath(RFSP_CURRPATH); ofnTemp.m_ofn.lpstrTitle = szTitle; if(dlgEx && hookproc) ofnTemp.m_ofn.Flags = OFN_ENABLEHOOK | OFN_EXPLORER |OFN_ENABLETEMPLATE|OFN_ENABLESIZING; else ofnTemp.m_ofn.Flags = OFN_EXPLORER; ofnTemp.m_ofn.nFileOffset = NULL; ofnTemp.m_ofn.nFileExtension = 0; ofnTemp.m_ofn.lpstrDefExt = "*"; ofnTemp.m_ofn.lCustData = lCustData; ofnTemp.m_ofn.lpfnHook = hookproc; ofnTemp.m_ofn.lpTemplateName = dlgEx; ofnTemp.FlagsEx = 0; if(!bSave) bSave = GetOpenFileName((LPOPENFILENAME)&ofnTemp); else bSave = GetSaveFileName((LPOPENFILENAME)&ofnTemp); if(!bSave) { Errval = CommDlgExtendedError(); if(Errval != 0) { memset(f,0,len); if(GetErrMessage(Errval,f,MAX_PATH)) Errmsg(f); } return FALSE; } SetFile(d); return TRUE; }