bool MyGetLogicalDriveStrings(CSysStringVector &driveStrings) { driveStrings.Clear(); UINT32 size = GetLogicalDriveStrings(0, NULL); if (size == 0) return false; CSysString buffer; UINT32 newSize = GetLogicalDriveStrings(size, buffer.GetBuffer(size)); if (newSize == 0) return false; if (newSize > size) return false; CSysString string; for (UINT32 i = 0; i < newSize; i++) { TCHAR c = buffer[i]; if (c == TEXT('\0')) { driveStrings.Add(string); string.Empty(); } else string += c; } if (!string.IsEmpty()) return false; return true; }
LRESULT CComboBox::GetLBText(int index, CSysString &s) { s.Empty(); LRESULT len = GetLBTextLen(index); if (len == CB_ERR) return len; len = GetLBText(index, s.GetBuffer((int)len + 1)); s.ReleaseBuffer(); return len; }
bool MyGetVolumeInformation( LPCTSTR rootPathName, CSysString &volumeName, LPDWORD volumeSerialNumber, LPDWORD maximumComponentLength, LPDWORD fileSystemFlags, CSysString &fileSystemName) { bool result = BOOLToBool(GetVolumeInformation( rootPathName, volumeName.GetBuffer(MAX_PATH), MAX_PATH, volumeSerialNumber, maximumComponentLength, fileSystemFlags, fileSystemName.GetBuffer(MAX_PATH), MAX_PATH)); volumeName.ReleaseBuffer(); fileSystemName.ReleaseBuffer(); return result; }
LONG CKey::QueryValue(LPCTSTR name, CSysString &value) { value.Empty(); DWORD type = 0; UInt32 currentSize = 0; LONG res = RegQueryValueEx(_object, (LPTSTR)name, NULL, &type, NULL, (DWORD *)¤tSize); if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) return res; res = QueryValue(name, value.GetBuffer(currentSize), currentSize); value.ReleaseBuffer(); return res; }
bool MyGetDateFormat(LCID locale, DWORD flags, CONST SYSTEMTIME *time, LPCTSTR format, CSysString &resultString) { resultString.Empty(); int numChars = ::GetDateFormat(locale, flags, time, format, NULL, 0); if(numChars == 0) return false; numChars = ::GetDateFormat(locale, flags, time, format, resultString.GetBuffer(numChars), numChars + 1); resultString.ReleaseBuffer(); return (numChars != 0); }
bool CWindow::GetText(CSysString &s) { s.Empty(); int length = GetTextLength(); if (length == 0) return (::GetLastError() == ERROR_SUCCESS); length = GetText(s.GetBuffer(length), length + 1); s.ReleaseBuffer(); if (length == 0) return (::GetLastError() != ERROR_SUCCESS); return true; }
CSysString MyLoadString(HINSTANCE hInstance, UINT resourceID) { CSysString s; int size = 256; int len; do { size += 256; len = ::LoadString(hInstance, resourceID, s.GetBuffer(size - 1), size); } while (size - len <= 1); s.ReleaseBuffer(); return s; }
bool BrowseForFolder(HWND owner, LPCTSTR title, UINT ulFlags, LPCTSTR initialFolder, CSysString &resultPath) { CSysString displayName; BROWSEINFO browseInfo; browseInfo.hwndOwner = owner; browseInfo.pidlRoot = NULL; browseInfo.pszDisplayName = displayName.GetBuffer(MAX_PATH); browseInfo.lpszTitle = title; browseInfo.ulFlags = ulFlags; browseInfo.lpfn = (initialFolder != NULL) ? BrowseCallbackProc : NULL; browseInfo.lParam = (LPARAM)initialFolder; return BrowseForFolder(&browseInfo, resultPath); }
LONG CKey::EnumKeys(CSysStringVector &keyNames) { keyNames.Clear(); CSysString keyName; for (UInt32 index = 0; ; index++) { const UInt32 kBufferSize = MAX_PATH + 1; // 256 in ATL FILETIME lastWriteTime; UInt32 nameSize = kBufferSize; LONG result = ::RegEnumKeyEx(_object, index, keyName.GetBuffer(kBufferSize), (DWORD *)&nameSize, NULL, NULL, NULL, &lastWriteTime); keyName.ReleaseBuffer(); if (result == ERROR_NO_MORE_ITEMS) break; if (result != ERROR_SUCCESS) return result; keyNames.Add(keyName); } return ERROR_SUCCESS; }
bool GetPathFromIDList(LPCITEMIDLIST itemIDList, CSysString &path) { bool result = BOOLToBool(::SHGetPathFromIDList(itemIDList, path.GetBuffer(MAX_PATH * 2))); path.ReleaseBuffer(); return result; }