如何以编程方式禁用 Windows 10 平板电脑屏幕的边缘滑动手势?

2023-11-22

尝试以编程方式和手动方式在immersiveShell的EdgeUI下将DisableCharmsHint和DisableTLcorner的注册表修改为1(以禁用触摸屏滑动边缘),重新启动后没有任何反应。

只是想禁用从边缘滑动以防止用户访问其他应用程序,但仅访问当前打开的应用程序,稍后一旦我的应用程序关闭(恢复正常),将再次启用滑动边缘。

运行的应用程序是一个 Windows 窗体(不是 WPF)C# 应用程序,来自桌面并在 Windows 10 平板电脑中运行。

是否有其他方法可以防止用户滑动边缘并通过边缘滑动打开对应于每个边缘的窗口


我知道这个线程很旧,但在任何地方都找不到简洁明了的解决方案。我们的信息亭应用程序也有同样的问题(WIN7 PC 自动更新到 WIN 10)。尝试了从注册表/组策略更改到肮脏的 Windows shell 黑客的一切 - 没有任何效果。所以感谢链接 Koen_Rprovided设法让它工作(下面的代码是 Ron Schuler 的答案从 VB 转换为 C#)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualBasic;
using System.Collections;
using System.Data;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Runtime.CompilerServices;

namespace Your_Namespace
{


    public static class EdgeGestureUtil
    {

        private static Guid DISABLE_TOUCH_SCREEN = new Guid("32CE38B2-2C9A-41B1-9BC5-B3784394AA44");
        private static Guid IID_PROPERTY_STORE = new Guid("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99");

        private static short VT_BOOL = 11;
        #region "Structures"

        [StructLayout(LayoutKind.Sequential, Pack = 4)]
        public struct PropertyKey
        {
            public PropertyKey(Guid guid, UInt32 pid)
            {
                fmtid = guid;
                this.pid = pid;
            }

            [MarshalAs(UnmanagedType.Struct)]
            public Guid fmtid;
            public uint pid;
        }

        [StructLayout(LayoutKind.Explicit)]
        public struct PropVariant
        {
            [FieldOffset(0)]
            public short vt;
            [FieldOffset(2)]
            private short wReserved1;
            [FieldOffset(4)]
            private short wReserved2;
            [FieldOffset(6)]
            private short wReserved3;
            [FieldOffset(8)]
            private sbyte cVal;
            [FieldOffset(8)]
            private byte bVal;
            [FieldOffset(8)]
            private short iVal;
            [FieldOffset(8)]
            public ushort uiVal;
            [FieldOffset(8)]
            private int lVal;
            [FieldOffset(8)]
            private uint ulVal;
            [FieldOffset(8)]
            private int intVal;
            [FieldOffset(8)]
            private uint uintVal;
            [FieldOffset(8)]
            private long hVal;
            [FieldOffset(8)]
            private long uhVal;
            [FieldOffset(8)]
            private float fltVal;
            [FieldOffset(8)]
            private double dblVal;
            [FieldOffset(8)]
            public bool boolVal;
            [FieldOffset(8)]
            private int scode;
            [FieldOffset(8)]
            private DateTime date;
            [FieldOffset(8)]
            private System.Runtime.InteropServices.ComTypes.FILETIME filetime;

            [FieldOffset(8)]
            private Blob blobVal;
            [FieldOffset(8)]
            private IntPtr pwszVal;


            /// <summary>
            /// Helper method to gets blob data
            /// </summary>
            private byte[] GetBlob()
            {
                byte[] Result = new byte[blobVal.Length];
                Marshal.Copy(blobVal.Data, Result, 0, Result.Length);
                return Result;
            }

            /// <summary>
            /// Property value
            /// </summary>
            public object Value
            {
                get
                {
                    VarEnum ve = (VarEnum)vt;
                    switch (ve)
                    {
                        case VarEnum.VT_I1:
                            return bVal;
                        case VarEnum.VT_I2:
                            return iVal;
                        case VarEnum.VT_I4:
                            return lVal;
                        case VarEnum.VT_I8:
                            return hVal;
                        case VarEnum.VT_INT:
                            return iVal;
                        case VarEnum.VT_UI4:
                            return ulVal;
                        case VarEnum.VT_LPWSTR:
                            return Marshal.PtrToStringUni(pwszVal);
                        case VarEnum.VT_BLOB:
                            return GetBlob();
                    }
                    throw new NotImplementedException("PropVariant " + ve.ToString());
                }
            }
        }

        internal struct Blob
        {
            public int Length;

            public IntPtr Data;
            //Code Should Compile at warning level4 without any warnings, 
            //However this struct will give us Warning CS0649: Field [Fieldname] 
            //is never assigned to, and will always have its default value
            //You can disable CS0649 in the project options but that will disable
            //the warning for the whole project, it's a nice warning and we do want 
            //it in other places so we make a nice dummy function to keep the compiler
            //happy.
            private void FixCS0649()
            {
                Length = 0;
                Data = IntPtr.Zero;
            }
        }

        #endregion

        #region "Interfaces"

        [ComImport(), Guid("886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
        public interface IPropertyStore
        {
            [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
            void GetCount([Out(),In()] ref uint cProps);
            [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
            void GetAt([In()] uint iProp, ref PropertyKey pkey);
            [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
            void GetValue([In()] ref PropertyKey key, ref PropVariant pv);
            [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
            void SetValue([In()] ref PropertyKey key, [In()] ref PropVariant pv);
            [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
            void Commit();
            [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
            void Release();
        }

        #endregion

        #region "Methods"

        [DllImport("shell32.dll", SetLastError = true)]
        private static extern int SHGetPropertyStoreForWindow(IntPtr handle, ref Guid riid, ref IPropertyStore propertyStore);

        public static void DisableEdgeGestures(IntPtr hwnd, bool enable)
        {
            IPropertyStore pPropStore = null;
            int hr = 0;
            hr = SHGetPropertyStoreForWindow(hwnd, ref IID_PROPERTY_STORE, ref pPropStore);
            if (hr == 0)
            {
                PropertyKey propKey = new PropertyKey();
                propKey.fmtid = DISABLE_TOUCH_SCREEN;
                propKey.pid = 2;
                PropVariant var = new PropVariant();
                var.vt = VT_BOOL;
                var.boolVal = enable;
                pPropStore.SetValue(ref propKey, ref var);
                Marshal.FinalReleaseComObject(pPropStore);
            }
        }

        #endregion

    }
}

将其添加到您的命名空间中,然后在显示表单 (winforms) 或加载窗口 (WPF) 时调用它。

            IntPtr intPtr = System.Diagnostics.Process.GetProcessesByName("Your_app")[0].MainWindowHandle;
            EdgeGestureUtil.DisableEdgeGestures(intPtr, true);

就是这样 - 只要应用程序正在运行并且窗口处于活动状态,边缘滑动就会停止工作。一旦你关闭它 - 滑动将再次起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式禁用 Windows 10 平板电脑屏幕的边缘滑动手势? 的相关文章

随机推荐

  • Magento 覆盖控制器

    我想做以上的事情 我过去重写过许多文件 块 模型 助手 但这个让我困惑 谁能看到我在这里做错了什么 我已经编辑了这段代码 现在包含一些建议 这是我的文件夹结构 2 个控制器位置作为测试 Idigital Idgeneral etc conf
  • 使用 Rails 3 中的表单按钮覆盖 respond_to 格式

    我有一组使用 Rails 调用 respond to 以各种格式显示的报告 这样如果 URL 以 CSV 或 JSON 结尾 则报告将以该格式生成 我请求制作一个下载按钮 以便更轻松地获取报告 但由于报告具有日期范围等自定义功能 因此我需要
  • Firebase 时间戳至今的日期和时间

    我正在使用 firebase 作为我的聊天应用程序 在聊天对象中 我使用添加时间戳Firebase ServerValue TIMESTAMP method 我需要使用此时间戳在我的聊天应用程序中显示消息接收时间 如果是当前时间 我只需要显
  • Android ActionBarSherlock 顶部栏

    我想要一个像 foursquare 这样的操作栏 我想要的是诸如朋友 探索和我 另外 在选项卡上方 我想要一个自定义布局 其中包括一些按钮 例如foursquare 徽标 刷新和签入在四方 我创建了选项卡 但无法更改 ActionBarSh
  • UILocalNotification 的警报操作代码

    UILocalNotification notif cls alloc init notif fireDate self datePicker date notif timeZone NSTimeZone defaultTimeZone n
  • Java 忽略类路径

    我正在编写一个使用 Oracle JDBC 驱动程序的 java 程序 我已将其设置在我的类路径中 当我在 IDE 中运行程序 作为 jdbc 添加为库 时 程序运行良好 当我尝试部署它时 它完全忽略类路径中的列表并给我一个 NoClass
  • Docker build --no-cache 实际上会下载并刷新基础镜像吗?

    docker build no cache 刷新吗updated是否远程基础镜像 文档似乎没有具体说明 The no cache选项将重建图像而不使用本地缓存图层 但是 那FROM如果构建主机上存在已提取的基础映像 该行将重用该基础映像 来
  • 用 PHP 删除 GET 变量的好方法?

    我有一个包含 GET 变量的完整 URL 的字符串 删除 GET 变量的最佳方法是什么 有没有一种好方法可以只删除其中一个 这是一段可以工作但不是很漂亮的代码 我认为 current url explode current url echo
  • 2.5 的纯 Python 有理数模块

    有人见过这样的事情吗 小型自给自足的模块是首选 The 分数模块如有必要 可以从 2 6 中删除 获取fractions py numbers py 和abc py 所有纯Python模块 您可以从这里获取单个文件 2 6 分支 2 7 不
  • 在默认的 joomla 3.1.1 注册表单中添加自定义字段

    最近我偶然发现一个情况Joomla 3 1 1我需要添加一个附有默认注册表单的自定义字段 我浏览了现有的资源 这些资源表明我应该导航到joomla root components com users models forms registr
  • 如何将多个中间件功能封装成一个?

    我有许多类似于以下的中间件功能 function validate req res next req validationError new Error invalid function checkValid req res next if
  • 配置 Tomcat 以利用浏览器缓存?

    我运行谷歌的页面速度在我们的网络应用程序上分析和优化您的网站 下面的众多项目之一网络性能最佳实践如页面速度中列出的那样 为了在所有浏览器中充分利用缓存的一致优势 我们建议您将 Web 服务器配置为显式设置缓存标头并将其应用于所有可缓存静态资
  • PHP JSON 响应包含 HTML 标头

    我遇到了一个奇怪的问题 我正在尝试编写一个 PHP 页面 该页面将一些 JSON 返回到 Jquery AJAX 调用 问题是 尽管将内容类型设置为 application json 但响应似乎始终包含 HTML 标头 这是 PHP 代码
  • X f() 是什么意思?

    我看到这段代码 但不明白它的意思 我知道我们如何使用默认构造函数 但这不是默认构造函数 这是什么 class X int main X f 它声明了一个函数f它不带任何参数并返回一个类型X 这也称为最令人烦恼的解析在C 中 它是 C 标准定
  • Android - Activity 与 FragmentActivity? [复制]

    这个问题在这里已经有答案了 我是安卓新手 我想构建一个具有选项卡格式的应用程序 我找到了很多文档Activity已经用过 也在很多情况下使用过FragmentActivity 我不确定哪个会更好开始 请建议我应该使用Activity or
  • 如何修复“必须为自定义运行时设置 --custom_entrypoint 标志”?

    当我运行时 我在 appengine 上收到此错误gcloud preview app run app yaml The custom entrypoint flag must be set for custom runtimes My a
  • Jupyter 命令仅适用于破折号(例如 jupyter-kernelspec 而不是 jupyter kernelspec)

    我将 Jupyter 与 Anaconda3 一起使用 My Anaconda3 and Anaconda3 Scripts 文件夹已添加到 PATH 多变的 尽管jupyter exe在里面Scripts上面的文件夹中 Jupyter 相
  • 是否可以将结构变量作为函数参数传递而不预先定义它?

    我有两个这样定义的结构 在color h typedef struct rgb uint8 t r g b rgb typedef struct hsv float h s v hsv hsv rgb2hsv rgb color rgb h
  • jQuery 屏蔽输入插件。当文本框获得焦点时选择所有内容

    这是这个问题的后续问题 当文本框获得焦点时选择文本框的所有内容 Javascript 或 jQuery 基本上我将文本框与jQuery 屏蔽输入插件 编辑 链接可能不再指向相关版本 当屏蔽的输入文本框接收焦点时 我想选择该文本框的所有内容
  • 如何以编程方式禁用 Windows 10 平板电脑屏幕的边缘滑动手势?

    尝试以编程方式和手动方式在immersiveShell的EdgeUI下将DisableCharmsHint和DisableTLcorner的注册表修改为1 以禁用触摸屏滑动边缘 重新启动后没有任何反应 只是想禁用从边缘滑动以防止用户访问其他