HRESULT AddSearchEngines (IPropertyActionSequence *pISeq) { // Key zusammenbauen string strKey = string(g_cbAppKey) + g_cbDel + g_cbSearchSubKey; // Registrierte Pages enumerieren HKEY hKey = NULL; DWORD i = 0, dwCnt = 0; char cbEnumKey[_MAX_PATH]; DWORD retCode = RegOpenKeyEx (HKEY_CLASSES_ROOT, strKey.c_str(), 0L, KEY_READ, &hKey); if (retCode == ERROR_SUCCESS) { // alle registrierten Einträge durchgehen while (RegEnumKey (hKey, i, cbEnumKey, _MAX_PATH) == ERROR_SUCCESS) { if (SUCCEEDED(LoadSearchEngine (pISeq, cbEnumKey))) // evtl. Fehler ignorieren dwCnt++; i++; } // Schlüssel wieder abschließen RegCloseKey (hKey); // Close the key handle. } if (0 == dwCnt) { // keine registrierten SearchEngines gefunden VMessageBox (NULL, FakeTRiASName(IDS_BADREGISTRATION_CAP, g_cbTRiAS).c_str(), ExclamationIcon|OkayButton, IDS_BADREGISTRATION, g_cbTRiAS); return E_FAIL; } return S_OK; }
/////////////////////////////////////////////////////////////////////////////// // Open a ShapeDatasource (all shp files in a directory) HRESULT CShapeDataSource::Open(const char *pszNewName, bool fUpdate, bool fTestOpen) { _ASSERTE(0 == m_Layers.size()); _ASSERTE(NULL != pszNewName); struct _stat stat; m_strName = pszNewName; m_fUpdatable = fUpdate; // Is the given path a directory or a regular file? os_string strPath (pszNewName); // evtl. abschließendes '\' abschneiden size_t pos = strPath.find_last_of("\\/"); if (os_npos != pos && pos == strPath.size()-1) strPath.replace(pos, 1, ""); if (0 != _stat(strPath.c_str(), &stat) || (!(stat.st_mode & _S_IFDIR) && !(stat.st_mode & _S_IFREG))) { if (fTestOpen) return S_FALSE; return TRIASHP_E_BADFILENAME; } // Build a list of filenames we figure are Shape files. if (stat.st_mode & _S_IFREG) { // given name relates to a file if (S_OK != OpenFile(pszNewName, fUpdate, fTestOpen)) { if (fTestOpen) return S_FALSE; return TRIASHP_E_OPENFILE_FAILED; } return S_OK; } else { vector<os_string> Candidates; vector<os_string> Failed; os_path dir (pszNewName); RETURN_FAILED_HRESULT(ReadDir (pszNewName, Candidates)); for (vector<os_string>::iterator it = Candidates.begin(); it != Candidates.end(); ++it) { os_path path (*it); if (stricmp (path.extension().c_str(), g_cbShp)) continue; // vollständigen Dateinamen bauen if (dir.has_directory()) path.directory(dir.directory()); if (dir.has_drive()) path.drive(*dir.drive().c_str()); if (S_OK != OpenFile (os_string(path).c_str(), fUpdate, fTestOpen) && !fTestOpen) Failed.push_back(os_string(path)); } if (!fTestOpen && 0 == m_Layers.size() && !fUpdate) { if (!m_fDeniedToOpen) { os_path datasource(strPath); VMessageBox(IDS_DBENGINE_DESC, MB_ICONEXCLAMATION|MB_OK, IDS_COULDNOTOPENSHAPE, datasource.base().c_str()); m_fDeniedToOpen = true; } return TRIASHP_W_NOFILESFOUND; } // Fehlerbahandlung if (Failed.size() > 0) { int iResult = IDNO; if (!m_fDeniedToOpen) { os_path datasource(strPath); if (1 == Failed.size()) { iResult = VMessageBox(IDS_DBENGINE_DESC, MB_ICONQUESTION|MB_YESNO, IDS_COULDNOTOPENFILE, Failed[0].c_str(), datasource.base().c_str()); } else { os_string failed; for (vector<os_string>::iterator it = Failed.begin(); it != Failed.end(); ++it) { failed += " "; failed += *it; failed += '\n'; } iResult = VMessageBox(IDS_DBENGINE_DESC, MB_ICONQUESTION|MB_YESNO, IDS_COULDNOTOPENFILES, failed.c_str(), datasource.base().c_str()); } m_fDeniedToOpen = true; } if (IDNO == iResult) { m_Layers.clear(); return TRIASHP_E_OPENFILE_FAILED; } } } // Datenbank jetzt geöffnet m_fOpened = true; return (m_Layers.size() > 0 || fUpdate) ? S_OK : S_FALSE; }