Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > setlocale() не работает


Автор: winsent7 25.2.2011, 10:27
Здравствуйте, 
подскажите в чем проблема, не хочет выводить буквы, вместо них всякую ерунду пишет, цифры - нормально. 
Спасибо.
Код

#include <windows.h>
#include <iostream>
#include <cstring>
#include <clocale>
using namespace std;

int main()
{
                
ShellExecute(NULL,TEXT("open"),TEXT("c:windows\\system32 \\cmd.exe"),NULL,NULL,SW_SHOWNORMAL); 

    INPUT it[1];
    memset(it,0,sizeof(INPUT));
 
                 it[0].type = INPUT_KEYBOARD;
                 it[0].ki.wVk = VK_RETURN;
                    
    Sleep(1000);

                SendInput(1,it, sizeof(INPUT));
      
    INPUT qwe[1];
    memset(login,0,sizeof(INPUT));

    
    qwe[0].type = INPUT_KEYBOARD;
    qwe[0].ki.wVk  = 'm';
    qwe[0].ki.dwFlags = 0;

                setlocale(LC_ALL, "English_United States.1252"); 

    SendInput(1,qwe, sizeof(INPUT));
      
        return 0;
}


Автор: maint 25.2.2011, 10:51
Код

http://msdn.microsoft.com/en-us/library/x99tb11d%28v=vs.80%29.aspx


а вкратце
Цитата

If a valid locale and category are given, returns a pointer to the string associated with the specified locale and category. If the locale or category is invalid, returns a null pointer and the current locale settings of the program are not changed.

For example, the call

setlocale( LC_ALL, "English" );

sets all categories, returning only the string

English_United States.1252 

Автор: winsent7 25.2.2011, 11:23
Цитата

setlocale( LC_ALL, "English" );


и так пробовал - то же самое, 
а также варианты NULL и "" вторым параметром - не помогает.

Автор: xvr 25.2.2011, 15:51
Загадочная программа  smile Локаль чего она должна была поставить? И куда она не выводит, как должна?
Если вы думаете, что setlocale будет действовать на SendInput - то вы глубоко заблуждаетесь. Отправляйте эвенты в Unicode (см флажок KEYEVENTF_UNICODE http://msdn.microsoft.com/en-us/library/ms646271%28v=VS.85%29.aspx)

Автор: winsent7 28.2.2011, 10:49
xvr, спасибо, попробую разобраться, я только учусь smile  

Автор: winsent7 14.3.2011, 13:34
Да, локаль здесь не нужна, надо только нужные символы в hex-коде написать и не забыть KEYEVENTF_KEYUP добавлять, если нужно несколько символов вывести, спасибо    
xvr за подсказку.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)