You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用WndProc禁用特定TextBox触发Windows屏幕键盘的行为

实现方案

你可以通过自定义派生自TextBox的控件,重写其WndProc方法拦截特定系统消息实现,只会作用于该自定义控件,不会影响全局屏幕键盘配置,也不会干扰其他控件的正常行为:

  1. 首先明确需要拦截的消息常量:
  • 触发屏幕键盘请求的消息为 WM_GETOBJECT(值为0x003D)
  • 对应UI自动化根对象请求的标识为 UiaRootObjectId(值为-25)
  1. 自定义控件代码示例:
using System;
using System.Windows.Forms;

public class NoAutoOSKTextBox : TextBox
{
    private const int WM_GETOBJECT = 0x003D;
    private const int UiaRootObjectId = -25;

    protected override void WndProc(ref Message m)
    {
        // 拦截UI自动化根对象请求,阻止屏幕键盘触发逻辑
        if (m.Msg == WM_GETOBJECT && m.LParam.ToInt32() == UiaRootObjectId)
        {
            return;
        }
        // 其余消息走正常处理逻辑
        base.WndProc(ref m);
    }
}
  1. 使用方法:将你项目中原本的TextBox控件替换为上述自定义的NoAutoOSKTextBox即可。

注意:如果你的项目是64位架构,可将m.LParam.ToInt32()修改为m.LParam.ToInt64()避免类型溢出警告,功能不受影响。

内容的提问来源于stack exchange,提问作者tmighty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:15:04