Я в памяти читаю строку из японской игры, и я пытаюсь отобразить ее в окне консоли и скопировать строку в буфер обмена. До сих пор мне удавалось отобразить его в консоли, но всякий раз, когда я пытаюсь скопировать его в буфер обмена, строка искажается. Я пытался найти проблему, но в основном люди пытались отобразить строку в консоли, с чем у меня нет проблем.
char StrTxt[500];
// TextAddress: The memory address of the string
ReadProcessMemory(hProcess, (LPCVOID)(TextAddress), &StrTxt, sizeof(StrTxt) / sizeof(*StrTxt), 0);
toClipboard(StrTxt);
cout << StrTxt << endl;
Японский текст правильно отображается в консоли после соиЬ, однако сохраняемое значение буфера обмена выглядит примерно так: у • zuƒXƒ ~. Я понятия не имею, почему он работает нормально, когда я вывожу его на консоль, потому что строка, которая читается из памяти, также искажается так же, как и в буфере обмена. Вот функция буфера обмена, если она будет полезна:
void toClipboard(const string &s) {
OpenClipboard(0);
EmptyClipboard();
HGLOBAL hg = GlobalAlloc(GMEM_MOVEABLE, s.size());
if (!hg) {
CloseClipboard();
return;
}
memcpy(GlobalLock(hg), s.c_str(), s.size());
GlobalUnlock(hg);
SetClipboardData(CF_TEXT, hg);
CloseClipboard();
GlobalFree(hg);
}
Я также попытался обработать строку с помощью wchar_t а также wstring, но тогда я получил совершенно другие символы, чем ожидалось.
Мой язык системы в настоящее время установлен на японский, если это имеет значение.
Что я здесь не так делаю?
Задача ещё не решена.