2012-03-13 2 views
1

Мне нужно изменить язык клавиатуры. с этим кодом я могу изменить язык, если в фокусе приложения:Как изменить язык раскладки клавиатуры в Windows (C++)

#include <cstdlib> 
#include <iostream> 
#include <windows.h> 
#include <stdio.h> 
#include <string> 

using namespace std; 

#pragma comment(lib, "User32.lib") 


int main(int argc, char *argv[]) 
{ 
    //0409 - Ingles, 0c0a - Espanhol, 0416 - Portugues 
    char *str = "0c0a";//argv[1]; 
    int i; 

    if(EOF != sscanf(str, "%x", &i)) 
    { 
     SendMessage(GetActiveWindow(), WM_INPUTLANGCHANGEREQUEST, 0, i); 
    } 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

, но мне нужно изменить язык системы клавиатуры определенно, после того, как приложение находится близко или если фокус не установлен в приложении.

любой может мне помочь?

+1

Я сомневаюсь, что это возможно. Представьте себе, может ли другое приложение сделать то же самое - кто победит? Это не ваше приложение, которое контролирует язык системы, это пользователь. – Skizz

+0

См. [Этот вопрос] (http://stackoverflow.com/q/9669352/588306), размещенный менее чем за 24 часа до вашего ответа – Deanna

+0

Я даже не уверен, что существует «язык системной клавиатуры»; это похоже на настройку для каждого процесса. BTW, 'WM_INPUTLANGCHANGEREQUEST' - это сообщение из Windows (ОС), чтобы сообщить программе, что пользователь хочет изменить язык ввода; это не поддерживаемый способ для программ делать запросы к другим программам. – MSalters

ответ

1

Если вы действительно нужно изменить раскладку клавиатуры пользователя вы можете использовать следующие функции: GetKeyboardLayoutName() и LoadKeyboardLayout().

+0

Nope - «влияет только на макет текущего процесса», то есть не на «язык системной клавиатуры» "из вопроса. – MSalters

+0

Извините, я пропустил ** систему ** слово! Я предполагаю, что единственный способ - это зарегистрироваться (http://www.easydesksoftware.com/keyboard.htm). –

Смежные вопросы