做一个进程监视当前活动窗体,然后设置相应的输入法InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[i];i为输入法的index……0,1,2

解决方案 »

  1.   

    完整代码,我放在一个timer里面测试通过
    楼主给分给分~~[DllImport("user32.dll")] private static extern IntPtr
    GetForegroundWindow(); private void timer1_Tick(object sender, System.EventArgs e)
    {         foreach (Process thisproc in Process.GetProcessesByName("WINWORD")) 
    {
    if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32()  InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[0]; } foreach (Process thisproc in Process.GetProcessesByName("NOTEPAD")) 
    { if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32() )
    InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[1];

    }
    }
      

  2.   

    漏了一个括号……补[DllImport("user32.dll")] private static extern IntPtr
    GetForegroundWindow(); private void timer1_Tick(object sender, System.EventArgs e)
    {         foreach (Process thisproc in Process.GetProcessesByName("WINWORD")) 
    {
    if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32()  ) InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[0]; } foreach (Process thisproc in Process.GetProcessesByName("NOTEPAD")) 
    { if( thisproc.MainWindowHandle.ToInt32()==GetForegroundWindow().ToInt32() )
    InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[1];

    }
    }
      

  3.   

    To  CSTerry(Terry)
    你的这个获得进程的方法很好,但这个程序只有在原程序窗口是当前窗口的情况下此程序才能正确执行,一旦将原程序窗口隐藏,此程序就不会在起作用。
    而我所说的意思就是当原程序窗口隐藏的情况下去改变其他窗口的输入法,您写这个程序只能更改本身程序所在的窗口。
    其问题我认为在于InputLanguage.CurrentInputLanguage只能设置InputLanguage所在程序的窗口,而不能设置其他的窗口。
      

  4.   

    将原程序窗口隐藏,此程序就不会在起作用……这个我没试过不好说……国庆休息中,哈哈我个人认为是InputLanguage.CurrentInputLanguage的问题,因为检测到进程的时候可以检测得到,但是判断语句以后设置了InputLanguage.CurrentInputLanguage好象没用……我用一个按纽单独设置InputLanguage.CurrentInputLanguage的时候好象有效果……可能正如你所说,InputLanguage.CurrentInputLanguage这个程序只有在原程序窗口是当前窗口的情况下才能正确执行这样的话设置输入法的部分就要想其他办法了,我现在没放假没机子也测试不了,呵呵
      

  5.   

    搜索了一下,可以用操作注册表和API来实现对输入法的设置,这里有个VC的例子http://dev.csdn.net/Develop/article/11/11507.shtmC#里面对注册表的操作好象已经比较好了,配合LoadKeyboardLayout:装载输入法 
    ActivateKeyboardLayout:激活输入法 这2个API函数应该可以搞定
      

  6.   

    CSTerry(Terry) 的方法应该是可行的
      

  7.   

    请问 raidenzxx(小强) ,您有API控制输入法的例子嘛?若有,请给您一份。谢谢
      

  8.   

    InputLanguage.CurrentInputLanguage=InputLanguage.InstalledInputLanguages[i];
    i为输入法的索引值。