2012-08-14 68 views
-1

我需要使用alt + shift键为文本框禁用语言更改。我有改变currentCulture的功能,但按Alt + Shift键总是切换到下一种语言,即使我将它设置在keydown或keyup事件上。如何防止更改机器上安装的语言

+4

Alt + Shift的是对一个热键语言栏。它会在您的用户界面之前始终看到它。它会改变语言。 – 2012-08-15 02:00:07

+1

你为什么要这样做?如果用户想要切换语言,除非他们的管理员选择禁用机器上的这些设备,否则在单个程序中尝试执行这些设备仍然不合适。 – 2012-08-16 08:06:02

+0

好的,但我们如何禁用和覆盖按特定控制按Alt键或Shift键?这可能是比阻止它改变文化更好的主意 – MeqDotNet 2012-08-16 09:25:10

回答

0

您必须检测到Windows操作系统输入语言更改,并在您的应用程序具有焦点时将其更改为所需的语言。 因此,阅读下面的文章用于检测Windows操作系统的输入语言的变化: 1. http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx 2. http://www.codeproject.com/KB/system/TrayMe.aspx 然后从下面的代码使用来实现你的目标:

/// <summary> 
/// Changing Current Input Language to a next installed language 
/// </summary> 
public void ChangeInputLanguage() 
{ 
    // Nothing to do if there is only one Input Language supported: 
    if (InputLanguage.InstalledInputLanguages.Count == 1) 
     return; 
    // Get index of current Input Language 
    int currentLang = InputLanguage.InstalledInputLanguages.IndexOf(InputLanguage.CurrentInputLanguage); 
    // Calculate next Input Language 
    InputLanguage nextLang = ++currentLang == InputLanguage.InstalledInputLanguages.Count ? 
    InputLanguage.InstalledInputLanguages[0] : InputLanguage.InstalledInputLanguages[currentLang]; 
    // Change current Language to the calculated: 
    ChangeInputLanguage(nextLang); 
} 

/// <summary> 
/// Changing current Input Language to a new one passed in the param 
/// </summary> 
/// <param name="ISOLang">ISO Culture name string code e.g. "en" for English</param> 
public void ChangeInputLanguage(string ISOLang) 
{ 
    // Convert ISO Culture name to InputLanguage object. Be aware: if ISO is not supported 
    // ArgumentException will be invoked here 
    InputLanguage nextLang = InputLanguage.FromCulture(new System.Globalization.CultureInfo(ISOLang)); 
    ChangeInputLanguage(nextLang); 
} 

/// <summary> 
/// Changing current Input Language to a new one passed in the param 
/// </summary> 
/// <param name="LangID">Integer Culture code e.g. 1033 for English</param> 
public void ChangeInputLanguage(int LangID) 
{ 
    // Convert Integer Culture code to InputLanguage object. Be aware: if Culture code is not supported 
    // ArgumentException will be invoked here 
    InputLanguage nextLang = InputLanguage.FromCulture(new System.Globalization.CultureInfo(LangID)); 
    ChangeInputLanguage(nextLang); 
} 

/// <summary> 
/// Changing current Input Language to a new one passed in the param 
/// </summary> 
/// <param name="InputLang">New Input Language as InputLanguage object</param> 
public void ChangeInputLanguage(InputLanguage InputLang) 
{ 
    // Check is this Language really installed. Raise exception to warn if it is not: 
    if (InputLanguage.InstalledInputLanguages.IndexOf(InputLang) == -1) 
     throw new ArgumentOutOfRangeException(); 

    // InputLAnguage changes here: 
    InputLanguage.CurrentInputLanguage = InputLang; 
}