大家知道智能ABC输入法有漏洞,可以直接把程序关掉,在一些网吧管理类软件的客户端就很成问题,现在我想有没有可能将EDIT之类的输入框设置成只能在英文状态,不能切换成中文输入法,不就可以解决这种问题了吗?但我试了好多方法都不行,比如在窗体中建立wm_ime***之类的的消息映射,还有用timer不停向edit发关闭输入法的消息,但都不管用。有没有办法解决呢?但我知道把tedit的passwordchar设置一下,使它变成密码输入框,这时就无法切换到中文,但这样,输入的字符又显示不出来了!

解决方案 »

  1.   

    procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    begin
      case Msg.message of
        WM_INPUTLANGCHANGEREQUEST, 49836, 49340: Handled := True;
      end;
    end;瘦人鱼不如美人鱼
    加一个日志
    procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    begin
      if Memo1.Lines.IndexOf(IntToStr(Msg.message)) < 0 then
        Memo1.Lines.Add(IntToStr(Msg.message));
    end;
    发现切换输入法的时候打出
    80
    49836
    4934080=$50
    到messages.pas中搜索 "50"
    找到WM_INPUTLANGCHANGEREQUEST = $0050
    其他两个消息不知道,直接写数值
    屏蔽掉这些消息测试,正是该结果
    game over