Передача команд с символами UTF-16 для выполнения в терминале через канал [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Передача команд с символами UTF-16 для выполнения в терминале через канал [закрыто]

Сообщение Anonymous »

Моя программа создает окно терминала и отправляет ему команды через канал. Проблема в том, что мне нужно отправлять команды на терминал с символами UTF-16. Вот пример моего кода:

Код: Выделить всё

void Terminal::createProcessCMD(const std::wstring& path)
{

STARTUPINFOW PSTARTUPINFO;
PROCESS_INFORMATION PPROCESSINFO;
SECURITY_ATTRIBUTES SECURITYATTR;

SECURITYATTR.nLength = sizeof(SECURITY_ATTRIBUTES);
SECURITYATTR.bInheritHandle = TRUE;
SECURITYATTR.lpSecurityDescriptor = NULL;

CreatePipe(&CMD_READ, &PARENT_WRITE, &SECURITYATTR, 0);

ZeroMemory(&PSTARTUPINFO, sizeof(STARTUPINFO));

PSTARTUPINFO.cb = sizeof(STARTUPINFO);
PSTARTUPINFO.hStdInput = CMD_READ;
PSTARTUPINFO.dwFlags |= STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
PSTARTUPINFO.wShowWindow = SW_SHOWNORMAL;
BOOL success = CreateProcessW(path.c_str(),
NULL,
NULL,
NULL,
TRUE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&PSTARTUPINFO,
&PPROCESSINFO);
}
void Terminal::sendCommandToCMD(const std::wstring& command)
{
DWORD bytesToWrite = static_cast((command.size() + 1) * sizeof(wchar_t));
DWORD bytesWritten = 0;
WriteFile(PARENT_WRITE, command.c_str(), bytesToWrite, &bytesWritten, NULL);
}
int main()
{
terminal.createPrecessCMD(L"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe");
terminal.sendCommandToCMD(L"cd \'C:\\Users\\Forty\'");
}
Данные в канал записываются корректно. Терминал возвращает эту ошибку при попытке выполнить команду:

Код: Выделить всё

PS C:\Users\Forty\AppData\Roaming\TerminalsThisWay> cd 'C:\Users\Forty'
: The term '' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ cd 'C:\Users\Forty'
+ ~
+ CategoryInfo          : ObjectNotFound: (:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Вот что произойдет, если написать без конечного нуля

Код: Выделить всё

PS C:\Users\Forty\AppData\Roaming\TerminalsThisWay> cd 'C:\Users\Forty'
c : The term 'c' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ cd 'C:\Users\Forty'
+ ~
+ CategoryInfo          : ObjectNotFound: (c:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Я знаю, что это будет работать, если я передам на терминал символы ANSI, но мне нужно передать на терминал команды, которые могут содержать китайские символы и другие символы, отличные от символов в кодировке ANSI. . Я знаю, что стандартный терминал может принимать символы в формате UTF-16. Я не могу понять, что мне нужно сделать, чтобы терминал принимал символы UTF-16 из моей программы. Эту программу я пишу для автоматизации работы с командной строкой.


Подробнее здесь: https://stackoverflow.com/questions/792 ... via-a-pipe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»