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

C#调用虚拟键盘TabTip.exe

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

img

  • 写回答

34条回答 默认 最新

  • 阿里嘎多学长 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日