邋遢的土豆 2024-07-22 08:45 采纳率: 0%
浏览 129
已结题

C#调用虚拟键盘TabTip.exe

C#winfrom嵌套H5程序,调用虚拟键盘TabTip.exe,如何屏蔽键盘上的设置按钮,因为程序是霸屏的,所以不像让用户跳出程序,但是虚拟键盘的设置按钮点开直接打开了win10的系统设置界面了。有哪位大神可以解决下,屏蔽这个按钮,或者即使点了设置不显示出来。

img

  • 写回答

35条回答 默认 最新

  • 阿里嘎多学长 2024-07-22 08:45
    关注
    获得0.20元问题酬金

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    要解决你在使用C# WinForms应用程序中嵌入H5程序时调用虚拟键盘TabTip.exe并屏蔽键盘上的设置按钮的问题,你可以按照以下步骤进行:

    1. 调用TabTip.exe虚拟键盘

    首先,你需要在C#中调用TabTip.exe。这可以通过启动一个进程来实现。

    using System.Diagnostics;
    
    public void LaunchVirtualKeyboard()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = "TabTip.exe";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.UseShellExecute = false;
        Process.Start(startInfo);
    }
    

    2. 屏蔽虚拟键盘上的设置按钮

    屏蔽虚拟键盘上的设置按钮可以通过几种方法实现,以下是一些可能的方法:

    方法一:使用Windows API

    你可以使用Windows API来查找并禁用设置按钮。这需要一些底层的Windows编程知识。

    using System;
    using System.Runtime.InteropServices;
    
    public class VirtualKeyboardHelper
    {
        [DllImport("user32.dll")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
        [DllImport("user32.dll")]
        public static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
    
        public static void DisableSettingsButton()
        {
            IntPtr hWnd = FindWindow(null, "TabTip");
            if (hWnd != IntPtr.Zero)
            {
                IntPtr settingsButton = FindWindowEx(hWnd, IntPtr.Zero, "Button", "Settings");
                if (settingsButton != IntPtr.Zero)
                {
                    EnableWindow(settingsButton, false);
                }
            }
        }
    }
    

    方法二:使用UI Automation

    你可以使用UI Automation来查找并禁用设置按钮。

    using System.Windows.Automation;
    
    public void DisableSettingsButton()
    {
        // 等待TabTip窗口出现
        var window = AutomationElement.RootElement.FindFirst(TreeScope.Children,
            new PropertyCondition(AutomationElement.NameProperty, "TabTip"));
        if (window != null)
        {
            // 查找设置按钮并禁用
            var settingsButton = window.FindFirst(TreeScope.Descendants,
                new PropertyCondition(AutomationElement.AutomationIdProperty, "Settings"));
            if (settingsButton != null)
            {
                settingsButton.SetFocus();
                settingsButton.Current.IsEnabled = false;
            }
        }
    }
    

    3. 阻止Windows 10系统设置界面的弹出

    如果用户尝试点击设置按钮,你可以使用消息拦截来阻止系统设置界面的弹出。

    using System;
    using System.Runtime.InteropServices;
    
    public class VirtualKeyboardHelper
    {
        [DllImport("user32.dll")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
        [DllImport("user32.dll")]
        public static extern IntPtr FindWindowEx(IntPtr hWndParent, IntPtr hWndChildAfter, string lpszClass, string lpszWindow);
    
        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
    
        public static void InterceptSettingsClick()
        {
            IntPtr hWnd = FindWindow(null, "TabTip");
            if (hWnd != IntPtr.Zero)
            {
                IntPtr settingsButton = FindWindowEx(hWnd, IntPtr.Zero, "Button", "Settings");
                if (settingsButton != IntPtr.Zero)
                {
                    SendMessage(settingsButton, 0x0201, 0, 0); // 模拟点击,但不执行默认操作
                }
            }
        }
    }
    

    4. 测试解决方案

    最后,确保你的解决方案在全屏模式下有效,并且不会影响用户使用虚拟键盘的其他功能。进行彻底的测试,确保没有遗漏的步骤或问题。

    通过以上步骤,你可以有效地调用虚拟键盘,屏蔽设置按钮,并阻止系统设置界面的弹出。希望这些方法能帮助你解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月30日
  • 创建了问题 7月22日

悬赏问题

  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?