要在WinForm中屏蔽IME,設定以下幾個要素:
1、在WinForm的InputLanguageChanging事件中添加e.Cancel = True
2、鍵盤事件向表單註冊(表單內容)
注意:如果只是屏蔽系統的IME並且還要有切換IME的功能(系統切換IME會造成某些程式卡死),那麼在函數InputLanguageChanging中添加“切換IME的代碼”,這個切換IME的代碼不能加在其它地方,不然會引起IME浮動視窗和系統右下角IME表徵圖不一致,因為“切換IME的代碼”只會控制IME浮動視窗,而右下角IME表徵圖是根據IME浮動視窗值來切換的,自己切換IME的代碼如下:
private void MainForm_InputLanguageChanging(object sender, InputLanguageChangingEventArgs e)
{
//程式禁止切換IME的訊息傳到Windows系統
e.Cancel = true;
int iCountLan = InputLanguage.InstalledInputLanguages.Count;
//擷取當前IME的序號iFlagInputLan
for (int i = 0; i < InputLanguage.InstalledInputLanguages.Count; i++)
{
if (InputLanguage.CurrentInputLanguage.LayoutName == InputLanguage.InstalledInputLanguages[i].LayoutName)
{
iFlagInputLan = i;
break;
}
}
//擷取下一個IME的序號iFlagInputLan
if ((iFlagInputLan + 1) >= iCountLan)
{
iFlagInputLan = 0;
}
else
{
iFlagInputLan++;
}
//設定IME
InputLanguage.CurrentInputLanguage = InputLanguage.InstalledInputLanguages[iFlagInputLan];
}