Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
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;
}