AVSINLINE const CStringA Encoding::wstring2string(const CStringW &sLine, const unsigned int unCodePage) { const int nSize = WideCharToMultiByte( unCodePage, 0, sLine.GetString(), sLine.GetLength(), NULL, 0, NULL, NULL ); char *sTemp = new char[nSize]; if ( !sTemp ) return ""; WideCharToMultiByte( unCodePage, 0, sLine.GetString(), sLine.GetLength(), sTemp, nSize, NULL, NULL ); CStringA sResult( sTemp ); delete []sTemp; return sResult; }
LPCWSTR StringUTF8ToWChar(LPCSTR sUTF8, CStringW &sWChar, int iChars/* = -1*/) { if (!sUTF8) return NULL; sWChar.Empty(); int iLen = MultiByteToWideChar(CP_UTF8, 0, sUTF8, iChars, NULL, 0); if (iLen > 0) { LPWSTR sBuf = sWChar.GetBufferSetLength(iLen); iLen = MultiByteToWideChar(CP_UTF8, 0, sUTF8, iChars, sBuf, iLen); sWChar.ReleaseBufferSetLength(sBuf[iLen - 1] ? iLen : iLen - 1); return (iLen > 0) ? sWChar.GetString() : NULL; } return *sUTF8 != 0 ? sWChar.GetString() : NULL; }
LPCWSTR StringCharToWChar(LPCSTR sChar, CStringW &sWChar, int iChars/* = -1*/, UINT codepage/* = CP_ACP*/) { if (!sChar) return NULL; sWChar.Empty(); int iLen = MultiByteToWideChar(codepage, 0, sChar, iChars, NULL, 0); if (iLen > 0) { LPWSTR sBuf = sWChar.GetBufferSetLength(iLen); MultiByteToWideChar(codepage, 0, sChar, iChars, sBuf, iLen); sWChar.ReleaseBufferSetLength(sBuf[iLen - 1] ? iLen : iLen - 1); return (iLen > 0) ? sWChar.GetString() : NULL; } return (*sChar != 0) ? sWChar.GetString() : NULL; }
EXTERN_C BOOL WINAPI RouteTheCall( IN HWND hWndOwner, IN HINSTANCE hInstance, IN LPCSTR lpStringArg, IN INT Show) { CStringW path = lpStringArg; PathRemoveBlanksW(path.GetBuffer()); path.ReleaseBuffer(); path = L"\"" + path + L"\""; ShellExecuteW(NULL, L"open", L"explorer.exe", path.GetString(), NULL, SW_SHOWNORMAL); return TRUE; }
STDMETHODIMP XyOptionsImpl::XyGetString(unsigned field, LPWSTR *value, int *chars) { if (!TestOption(field, OPTION_TYPE_STRING, OPTION_MODE_READ)) return E_INVALIDARG; if (!value && !chars) return S_FALSE; CStringW tmp; HRESULT hr = DoGetField(field, &tmp); if (SUCCEEDED(hr)) { if (value) { *value = static_cast<LPWSTR>(LocalAlloc(LPTR, sizeof(WCHAR)*(tmp.GetLength()+1))); ASSERT(*value); memcpy(*value, tmp.GetString(), (tmp.GetLength()+1)*sizeof(WCHAR)); } if (chars) { *chars = tmp.GetLength(); } } return hr; }
std::string RunBotCommand(const CSteamID& id, MessageType mType, const string& message, const string& username, ChatType cType) { try { sf::TcpSocket socket; sf::Socket::Status status = socket.Connect(ipAndSuch, port); if (FAILED(status)) return "!Failed to connect to bot!"; char* utf8string = new char[2048]; sprintf(utf8string, "%s\n%s\n%s\n%s\n%s\n", (mType == Message_Interact ? "interactsteam" : "tell"), username.c_str(), id.Render(), (cType == Chat_Private ? "PM" : "GROUPCHAT"), message.c_str()); char* utf16string = 0; int utf16stringLen = 0; { CStringW temp = CStringW(CA2W(utf8string)); utf16stringLen = temp.GetLength()*2; utf16string = new char[utf16stringLen]; _swab((char*)temp.GetString(), utf16string, utf16stringLen); } delete[] utf8string; status = socket.Send(utf16string, utf16stringLen); delete[] utf16string; if (FAILED(status)) { return "!Failed to send message to bot!"; } utf16string = new char[2048]; size_t size; status = socket.Receive(utf16string, (size_t)2048, size); if (FAILED(status)) { delete[] utf16string; return "!Failed to receive response from bost!"; } std::string retString; { wchar_t* temp = new wchar_t[size]; _swab(utf16string, (char*)temp, size); CStringW asdf(temp); retString = std::string(CW2A(asdf)); delete[] temp; retString.resize(size/2); } socket.Disconnect(); return retString; } catch (const std::exception& e) { std::string error = "!Something went wrong: "; error.append(e.what()); error.append("!"); return error; } }
DWORD WINAPI FolderUpdater::watching(void *params) { FolderUpdater *thisFolderUpdater = (FolderUpdater *)params; generic_string dir2Watch = (thisFolderUpdater->_rootFolder)._rootPath; if (dir2Watch[dir2Watch.length() - 1] != '\\') dir2Watch += TEXT("\\"); // CReadDirectoryChanges will add another '\' so we will get "\\" as a separator (of monitored root) in the notification const DWORD dwNotificationFlags = FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_FILE_NAME; // Create the monitor and add directory to watch. CReadDirectoryChanges changes; changes.AddDirectory(dir2Watch.c_str(), true, dwNotificationFlags); HANDLE changeHandles[] = { thisFolderUpdater->_EventHandle, changes.GetWaitHandle() }; bool toBeContinued = true; while (toBeContinued) { DWORD waitStatus = ::WaitForMultipleObjects(_countof(changeHandles), changeHandles, FALSE, INFINITE); switch (waitStatus) { case WAIT_OBJECT_0 + 0: // Mutex was signaled. User removes this folder or file browser is closed toBeContinued = false; break; case WAIT_OBJECT_0 + 1: // We've received a notification in the queue. { DWORD dwAction; CStringW wstrFilename; if (changes.CheckOverflow()) printStr(L"Queue overflowed."); else { changes.Pop(dwAction, wstrFilename); static generic_string oldName; static std::vector<generic_string> file2Change; file2Change.clear(); switch (dwAction) { case FILE_ACTION_ADDED: file2Change.push_back(wstrFilename.GetString()); //thisFolderUpdater->updateTree(dwAction, file2Change); ::SendMessage((thisFolderUpdater->_pFileBrowser)->getHSelf(), FB_ADDFILE, (WPARAM)nullptr, (LPARAM)&file2Change); oldName = TEXT(""); break; case FILE_ACTION_REMOVED: file2Change.push_back(wstrFilename.GetString()); //thisFolderUpdater->updateTree(dwAction, file2Change); ::SendMessage((thisFolderUpdater->_pFileBrowser)->getHSelf(), FB_RMFILE, (WPARAM)nullptr, (LPARAM)&file2Change); oldName = TEXT(""); break; case FILE_ACTION_MODIFIED: oldName = TEXT(""); break; case FILE_ACTION_RENAMED_OLD_NAME: oldName = wstrFilename.GetString(); break; case FILE_ACTION_RENAMED_NEW_NAME: if (not oldName.empty()) { file2Change.push_back(oldName); file2Change.push_back(wstrFilename.GetString()); //thisFolderUpdater->updateTree(dwAction, file2Change); ::SendMessage((thisFolderUpdater->_pFileBrowser)->getHSelf(), FB_RNFILE, (WPARAM)nullptr, (LPARAM)&file2Change); } oldName = TEXT(""); break; default: oldName = TEXT(""); break; } } } break; case WAIT_IO_COMPLETION: // Nothing to do. break; } } // Just for sample purposes. The destructor will // call Terminate() automatically. changes.Terminate(); //printStr(L"Quit watching thread"); return EXIT_SUCCESS; }