Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 19

Не работает преобразование из wstring в wchar_t

12.05.2019, 20:39. Показов 3980. Ответов 5

Студворк — интернет-сервис помощи студентам
Помогите новичку не могу перевести наболевшую уже наверно тему - wstring в wchar_t.

Написал код все работает если просто запускать без преобразования уже готовую переменную wchar_t. Строку я закоментировал (wchar_t Namest[] = L"regex - Microsoft Visual Studio ". Программа ищет окно по заданной строке.

Из string в wstring преобразовал. А дальше больное место. Гуглил то старые функции <codecvt>, то не рабочие, или такие простыни на пол страницы без бутылки не разберешься.

Исправте пару строчек кода буду признателен. студия VS-17

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "pch.h"
#include <iostream>
#include <iterator>
#include <fstream>
#include <thread>
#include <string>
#include <vector>
#include <conio.h>
#include <clocale>
#include <windows.h>
#include <cstdlib>
 
 
//namespace fs = boost::filesystem;
using input = std::istreambuf_iterator<char>;
using namespace std;
//namespace fs = std::experimental::filesystem;
 
using std::string;
 
 
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) // std::string Names
{
    std::vector<std::wstring>* names = (std::vector<std::wstring>*) lParam;
 
    if (IsWindowVisible(hwnd) && (!GetWindow(hwnd, GW_OWNER)))
    {
        wchar_t str[512] = { 0 };
        if (GetWindowTextW(hwnd, str, 511))
            names->push_back(str);
    }
 
    return 1;
}
bool SerchWind(wstring Namest)
{
    std::vector<std::wstring> names;
    EnumWindows(&EnumWindowsProc, (LPARAM)&names);
    for (std::wstring &stlt : names)
    {
        if (stlt == Namest) {
            std::wcout << stlt << std::endl;
            return true;
            break;
        }
    }return false;
}
int main()
{
    setlocale(LC_CTYPE, "rus");
    
    std::string NameWindowsstr = "regex - Microsoft Visual Studio "; 
 
    std::wstring widestr = std::wstring(NameWindowsstr.begin(), NameWindowsstr.end()); // NameWindowsstr - переводим в (wstring)
    wchar_t Namest = widestr.c_str();  // wstring widestr - переводим в (wchar_t)
    
    //wchar_t Namest[] = L"regex - Microsoft Visual Studio "; // regex - имя запущенного решения в VS-17
    
    SerchWind(Namest); // Передаем в функцию SerchWind - строку в виде (wchar_t ) - окно которое ищем
 
 
 
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.05.2019, 20:39
Ответы с готовыми решениями:

Из wchar_t* в wstring или в string
Как перевести из wchar_t* в wstring или в string ? Почему столько геморроя со строками... Есть функция, которая принимает wstring и...

Неправильно сравнивает строки wchar_t* и std::wstring
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; using namespace std; wchar_t str =...

По поводу wchar_t, wstring, char, string и кодировок
Здравствуйте, пишу консольную либу которая будет работать с большим количеством символов в разных алфавитах, и кроссплатформенно, как я...

5
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
12.05.2019, 20:51
Лучший ответ Сообщение было отмечено DaemonX как решение

Решение

C++
1
const wchar_t* Namest = widestr.c_str();
1
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
12.05.2019, 21:06
Цитата Сообщение от DaemonX Посмотреть сообщение
C++
1
std::wstring widestr = std::wstring(NameWindowsstr.begin(), NameWindowsstr.end());
Только вот так преобразовывать можно только для ASCII подмножества. Т.е., например, русский текст работать не будет так.
2
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 19
12.05.2019, 21:23  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
const wchar_t* Namest = widestr.c_str();
Да ну ведь я же все это делал, ведь от это ушло... Да видать запарился совсем, в отпуск пора идти. Все уже плывет в глазах.

Все работает благодарствую

Добавлено через 11 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
Только вот так преобразовывать можно только для ASCII подмножества. Т.е., например, русский текст работать не будет так
Да я понимаю спасибо. Так и заложил изначально - русские названия окон не будут использоваться в программе.
Только поиск по английским названия.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
12.05.2019, 21:28
Лучший ответ Сообщение было отмечено DaemonX как решение

Решение

DaemonX, Еще не совсем понятно зачем вам нужно преобразование в const wchar_t *, если ваша функция поиска принимает wstring?

Не проще ли было сделать так?
C++
1
2
3
4
//....
    std::wstring widestr = std::wstring(NameWindowsstr.begin(), NameWindowsstr.end());
 
    SerchWind(widestr);
1
0 / 0 / 0
Регистрация: 05.04.2019
Сообщений: 19
12.05.2019, 22:10  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Еще не совсем понятно зачем вам нужно преобразование в const wchar_t *, если ваша функция поиска принимает wstring?
Не проще ли было сделать так?
Да согласен работает! Подправил свой говнокод, const wchar_t * оставил может кому потребуется.
Если честно сейчас уже и не помню и не скажу, почему то раньше ругалось на это??? Сильно не пинайте я несколько месяцев программирую. Вы же представляете какая сейчас каша в голове.. Столько в голову засунуть и еще пытаться трезво что то писать. Еще раз спасибо за уделенное время.

У меня следующим шагом написать найти (Путь к папке процесса по названию).
Если у кого есть рабочий код буду рад посмотреть, если не затруднит... А то как всегда придется сотни страниц поисковика перепахать чтобы найти пример. Сам я пока написать не способен опыта маловато.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) // std::string Names
{
    std::vector<std::wstring>* names = (std::vector<std::wstring>*) lParam;
 
    if (IsWindowVisible(hwnd) && (!GetWindow(hwnd, GW_OWNER)))
    {
        wchar_t str[512] = { 0 };
        if (GetWindowTextW(hwnd, str, 511))
            names->push_back(str);
    }
 
    return 1;
}
bool SerchWind(wstring Namest)
{
    std::vector<std::wstring> names;
    EnumWindows(&EnumWindowsProc, (LPARAM)&names);
    for (std::wstring &stlt : names)
    {
        if (stlt == Namest) {
            std::wcout << stlt << std::endl;
            return true;
            break;
        }
    }return false;
}
int main()
{
    setlocale(LC_CTYPE, "rus");
 
    std::string NameWindowsstr = "regex - Microsoft Visual Studio ";
 
    std::wstring widestr = std::wstring(NameWindowsstr.begin(), NameWindowsstr.end()); // NameWindowsstr - переводим в (wstring)
    //const wchar_t* Namest = widestr.c_str(); // wstring widestr - переводим в (wchar_t)
 
    //wchar_t Namest[] = L"regex - Microsoft Visual Studio "; // regex - имя запущенного решения в VS-17
 
    SerchWind(widestr); // Передаем в функцию SerchWind - строку в виде (wchar_t ) - окно которое ищем
 
 
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2019, 22:10
Помогаю со студенческими работами здесь

Часто ли вы пользуетесь wchar_t, wstring, wcout, wcin? Какие в них недостатки?
Сейчас в учебных целях нужно было для linux написать одну программу, работающую с кириллицей. Т.к. в консоли используется UTF-8, очень...

wchar_t, wstring и буфер обмена. Ошибка: Stack around the variable 'curt' was corrupted
wchar_t curt = L&quot;&quot;; // тип CurText — wstring int i; for (i = 0; i &lt; CurText.size(); i++) // преобразую wstring к wchar_t. Возможно...

Что лучше использовать для работы со строками класс wstring или wchar_t напрямую?
Всем привет! Мучает меня один вопрос: как грамотнее и безопаснее работать со строками: 1) Создавать экземпляр класса wstring и работать...

Широкие символы wchar_t wstring не хотят принимать русские символы
Собственно вопрос в шапке, вот примеры: std::wstring str = L&quot;блин комом&quot;; и такое: wchar_t stroka = L&quot;abcdefghijklmnopqrstuvwxyz...

Преобразование из String ^ в wstring
Как? В гугле нет ничего толкового.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru