将你要输入的控件(如EDIT,MEMO等)的IMEMODE和IMENAME的属性设置成你需要的东东就可以了.

解决方案 »

  1.   

    Form1.ImeName := '中文 (简体) - 全拼';
      

  2.   

    这么快有了回复我感到很高兴,谢谢2位的帮助,可是问题不是这样简单的,如果我要改变某个ie窗口的输入法,而且该窗口当时没有获得焦点,应该怎么办?我查遍了api函数,也没有找到这样一个函数,有哪位高手知道方法,请指教!
      

  3.   

    提供一个建议:使用函数AttachThreadInput把你的程序挂接到IE窗口,然后再使用函数activekeyboardlayout设置IE的输入法
      

  4.   

    提供一个建议:使用函数AttachThreadInput把你的程序挂接到IE窗口,然后再使用函数activekeyboardlayout设置IE的输入法
      

  5.   

    to  BCB_FANS:
    你建议的方法我试了一下,发现不行,还是只能改变当前进程的输入法,代码如下,写在TTimer的OnTimer事件中。
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      wnd:tHandle;
      i,index:integer;
    begin
      wnd:=getforegroundwindow;
      attachthreadinput(GetWindowThreadProcessId(wnd,nil),
                         GetWindowThreadProcessId(self.handle,nil),
                         true);
      for i:=0 to screen.Imes.Count-1 Do
        if pos('智能',screen.Imes.Strings[i])>0 then
        begin
          index:=i;
          break;
        end;
      if index >= 0 then
        ActivateKeyboardLayout(HKL(Screen.Imes.Objects[index]), 0);
    end;
      

  6.   

    你的代码有误:attachthreadinput(GetWindowThreadProcessId(wnd,nil),
                         GetWindowThreadProcessId(self.handle,nil),
                         true);
    应改为:attachthreadinput(   GetWindowThreadProcessId(self.handle,nil),
                        GetWindowThreadProcessId(wnd,nil),
                                           true);再试一下,看看结果如何
      

  7.   

    to  BCB_FANS:
        我试过了,还是只能改变当前进程的输入法,而无法改变其它进程的。
        请问还有没有更好的办法?