如何在触摸屏上关闭 Windows 8.1 手势和设置超级按钮栏

2023-12-01

我安装了戴尔触摸屏和 Windows 8.1 单语言,当我将手指从右边缘向中间移动时,Windows 8 将调出设置超级栏,或者当我将手指从中上边缘向下移动时,Windows 8 会隐藏我的应用程序并调出开始菜单。

这是一个问题,因为我正在 WPF 上开发 Kiosk 应用程序,并且我无法让用户查看设置或关闭 Kiosk 应用程序。

我尝试禁用它,但不能,简单的解决方案是在另一个操作系统上运行或降级到 Windows 7,但计算机将运行 Windows 8.1 单一语言,对此我无能为力。


以下是通过 .NET 互操作而不是编译 C++ 本机 DLL 来完成此操作的方法:

Imports System.Runtime.InteropServices
Imports System.Runtime.CompilerServices

Public Class EdgeGestureUtil

    Private Shared DISABLE_TOUCH_SCREEN As Guid = New Guid("32CE38B2-2C9A-41B1-9BC5-B3784394AA44")
    Private Shared IID_PROPERTY_STORE As Guid = New Guid("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99")
    Private Shared VT_BOOL As Short = 11

#Region "Structures"

    <StructLayout(LayoutKind.Sequential, Pack:=4)> _
    Public Structure PropertyKey
        Public Sub New(guid As Guid, pid As UInt32)
            fmtid = guid
            Me.pid = pid
        End Sub

        <MarshalAs(UnmanagedType.Struct)> _
        Public fmtid As Guid
        Public pid As UInteger
    End Structure

    <StructLayout(LayoutKind.Explicit)> _
    Public Structure PropVariant
        <FieldOffset(0)> _
        Public vt As Short
        <FieldOffset(2)> _
        Private wReserved1 As Short
        <FieldOffset(4)> _
        Private wReserved2 As Short
        <FieldOffset(6)> _
        Private wReserved3 As Short
        <FieldOffset(8)> _
        Private cVal As SByte
        <FieldOffset(8)> _
        Private bVal As Byte
        <FieldOffset(8)> _
        Private iVal As Short
        <FieldOffset(8)> _
        Public uiVal As UShort
        <FieldOffset(8)> _
        Private lVal As Integer
        <FieldOffset(8)> _
        Private ulVal As UInteger
        <FieldOffset(8)> _
        Private intVal As Integer
        <FieldOffset(8)> _
        Private uintVal As UInteger
        <FieldOffset(8)> _
        Private hVal As Long
        <FieldOffset(8)> _
        Private uhVal As Long
        <FieldOffset(8)> _
        Private fltVal As Single
        <FieldOffset(8)> _
        Private dblVal As Double
        <FieldOffset(8)> _
        Public boolVal As Boolean
        <FieldOffset(8)> _
        Private scode As Integer
        'CY cyVal;
        <FieldOffset(8)> _
        Private [date] As DateTime
        <FieldOffset(8)> _
        Private filetime As System.Runtime.InteropServices.ComTypes.FILETIME
        'CLSID* puuid;
        'CLIPDATA* pclipdata;
        'BSTR bstrVal;
        'BSTRBLOB bstrblobVal;
        <FieldOffset(8)> _
        Private blobVal As Blob
        'LPSTR pszVal;
        <FieldOffset(8)> _
        Private pwszVal As IntPtr
        'LPWSTR 
        'IUnknown* punkVal;
        'IDispatch* pdispVal;
        '        IStream* pStream;
        '        IStorage* pStorage;
        '        LPVERSIONEDSTREAM pVersionedStream;
        '        LPSAFEARRAY parray;
        '        CAC cac;
        '        CAUB caub;
        '        CAI cai;
        '        CAUI caui;
        '        CAL cal;
        '        CAUL caul;
        '        CAH cah;
        '        CAUH cauh;
        '        CAFLT caflt;
        '        CADBL cadbl;
        '        CABOOL cabool;
        '        CASCODE cascode;
        '        CACY cacy;
        '        CADATE cadate;
        '        CAFILETIME cafiletime;
        '        CACLSID cauuid;
        '        CACLIPDATA caclipdata;
        '        CABSTR cabstr;
        '        CABSTRBLOB cabstrblob;
        '        CALPSTR calpstr;
        '        CALPWSTR calpwstr;
        '        CAPROPVARIANT capropvar;
        '        CHAR* pcVal;
        '        UCHAR* pbVal;
        '        SHORT* piVal;
        '        USHORT* puiVal;
        '        LONG* plVal;
        '        ULONG* pulVal;
        '        INT* pintVal;
        '        UINT* puintVal;
        '        FLOAT* pfltVal;
        '        DOUBLE* pdblVal;
        '        VARIANT_BOOL* pboolVal;
        '        DECIMAL* pdecVal;
        '        SCODE* pscode;
        '        CY* pcyVal;
        '        DATE* pdate;
        '        BSTR* pbstrVal;
        '        IUnknown** ppunkVal;
        '        IDispatch** ppdispVal;
        '        LPSAFEARRAY* pparray;
        '        PROPVARIANT* pvarVal;
        '        

        ''' <summary>
        ''' Helper method to gets blob data
        ''' </summary>
        Private Function GetBlob() As Byte()
            Dim Result As Byte() = New Byte(blobVal.Length - 1) {}
            Marshal.Copy(blobVal.Data, Result, 0, Result.Length)
            Return Result
        End Function

        ''' <summary>
        ''' Property value
        ''' </summary>
        Public ReadOnly Property Value() As Object
            Get
                Dim ve As VarEnum = vt
                Select Case 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()
                End Select
                Throw New NotImplementedException("PropVariant " + ve.ToString())
            End Get
        End Property
    End Structure

    Friend Structure Blob
        Public Length As Integer
        Public Data As IntPtr

        '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 Sub FixCS0649()
            Length = 0
            Data = IntPtr.Zero
        End Sub
    End Structure

#End Region

#Region "Interfaces"

    <ComImport, Guid("886D8EEB-8CF2-4446-8D02-CDBA1DBDCF99"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> _
    Interface IPropertyStore
        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)> _
        Sub GetCount(<Out> ByRef cProps As UInteger)

        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)> _
        Sub GetAt(<[In]> iProp As UInteger, ByRef pkey As PropertyKey)

        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)> _
        Sub GetValue(<[In]> ByRef key As PropertyKey, ByRef pv As PropVariant)

        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)> _
        Sub SetValue(<[In]> ByRef key As PropertyKey, <[In]> ByRef pv As PropVariant)

        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)> _
        Sub Commit()

        <MethodImpl(MethodImplOptions.InternalCall, MethodCodeType:=MethodCodeType.Runtime)> _
        Sub Release()
    End Interface

#End Region

#Region "Methods"

    <DllImport("shell32.dll", SetLastError:=True)> _
    Private Shared Function SHGetPropertyStoreForWindow(handle As IntPtr, ByRef riid As Guid, ByRef propertyStore As IPropertyStore) As Integer
    End Function

    Public Shared Sub EnableEdgeGestures(ByVal hwnd As IntPtr, ByVal enable As Boolean)
        Dim pPropStore As IPropertyStore = Nothing
        Dim hr As Integer
        hr = SHGetPropertyStoreForWindow(hwnd, IID_PROPERTY_STORE, pPropStore)
        If hr = 0 Then
            Dim propKey As New PropertyKey
            propKey.fmtid = DISABLE_TOUCH_SCREEN
            propKey.pid = 2
            Dim var As New PropVariant
            var.vt = VT_BOOL
            var.boolVal = enable
            pPropStore.SetValue(propKey, var)
            Marshal.FinalReleaseComObject(pPropStore)
        End If
    End Sub

#End Region

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

如何在触摸屏上关闭 Windows 8.1 手势和设置超级按钮栏 的相关文章

随机推荐

  • 定义一种只能包含一个属性的打字稿类型

    我有这个 JSON meta http example com rel 1 my meta 14 http example com rel 2 345 我如何用打字稿类型来表达这一点 meta is an array of 元项 objec
  • Android Wifi Direct:如何将数据从组所有者发送到客户端?

    我在使用 wifi direct 时遇到问题 我成功连接了 2 个设备并将数据从客户端发送到群组所有者 因为群组所有者 ip 是每个人都知道的 IP 我还设法找出客户端的 IP 并将其传递给组所有者 但我无法将数据从组所有者发送到客户端 即
  • 如何创建具有精确像素大小的 WPF 窗口?

    我尝试在我的应用程序中精确地在指定的矩形中显示一个窗口 Left 0 Top 0 Width 1920 Height 240 好像有左边距和右边距 和底部边距 看起来大约是8像素 就像系统拒绝将窗口放置在我通过指定 Left Top Wid
  • MSBuild,运行自定义工具来生成 linq to sql 模型类的自定义任务?

    我有以下场景 我们使用存储过程来访问数据库 并使用 LiNQ 2 SQL 来生成类 或者即我们使用 UnpluggedLINQ 到 SQL 生成器为了这 它已作为自定义工具运行 但区分生成的类是一个很大的难题 我们希望自动生成类 但将其排除
  • Eclipse 中通知未处理异常的配置是什么?

    当在 Eclipse 中我使用抛出异常的方法时 如果它没有被 try catch 包围或者没有再次抛出异常 它通常会抱怨 但对于某些例外情况 例如 Integer parseInt string Eclipse 不会抱怨 我如何设置 Ecl
  • ChromeDriver - 尝试使用 javascript 打印页面时超时

    我需要将页面另存为 PDF 但遇到问题 我正在使用 ChromeDriver 仅使用 google 作为示例 因为我的应用程序需要登录 我导航到该页面 google com 然后在 javascript 中执行 window print 以
  • 从另外 2 个表创建百分比表 - Google 查询

    有没有办法计算第三个交叉表 其中包含从 Google 查询创建的 2 个交叉表的百分比 最初 我使用大括号将两个查询堆叠在一起 但发现如果存在行或列不匹配 则两个表查询都会导致 VALUE 错误 因此 将 2 个表分开 它们之间有 100
  • 在 Amazon Elastic Beanstalk 上安装 Anaconda

    我已将部署命令添加到我的 Elastic Beanstalk 部署中 该命令下载 Anaconda 安装程序 并将其安装到 anaconda 一切顺利 但我似乎无法正确修改我的实例的 PATH 以包含 anaconda bin按照 Anac
  • 内容拥抱和内容压缩阻力、自动布局约束的问题

    我已经修改了问题 以提供更多且清晰的信息 我想要一个动态表格视图单元格 具有灵活的 UITextView 高度和可选的 UIImageView 根据 UITextView 和可选的 UIImageView 的内容大小 可以缩小或扩展单元格
  • PDFBox 的内存泄漏问题

    我在用PDF Box version 2 0 9在我的应用程序中 我必须从网络解析大型 pdf 文件 以下是我正在使用的代码 MimeDetector 类 Getter Setter class MimeTypeDetector priva
  • CSS/JS:文本更改时对内联元素进行动画处理

    When an inline元素的文本发生变化 通常情况是它的计算width or height也发生变化 通常这是微不足道的transition属性随 CSS 改变 例如添加transition改变background color悬停时的
  • 在 QTreeView 上的子项上设置小部件

    谢谢这个线程 我可以将小部件添加到第二列或后续列QAbstractItemView 在我的例子中QTreeView 的顶级项目view 但是是否可以向子项添加小部件 这是我尝试过的部分进展顺利的方法 usr bin env python i
  • Android Studio 0.4.3 中的 Gradle 错误

    我在旧版本中找到了对此的引用 但不是最新版本 我将 Android Studio 更新到 0 4 3 并创建了一个新项目 构建立即失败 并显示以下内容 Could not create an instance of Tooling API
  • 更改 YTPlayerView 的播放质量

    我的应用程序中嵌入的 YouTube 视频存在质量问题 我在用YTPlayerView嵌入 YouTube 中的视频 我的应用程序有 2 个选项 选项 1 是用户可以观看 360p 质量的视频 选项 2 是 720p 质量 这两种选择可能吗
  • 从特定日期开始按 7 天间隔对行进行分组

    有没有办法从 Mysql 中的某个日期开始按 7 天间隔 日期时间 对行进行分组 SELECT 1 DATEDIFF columnDate start date DIV 7 AS weekNumber start date INTERVAL
  • WPF Datagrid 双击单元格 MVVM 设计

    我有一个包含数据网格的 WPF 应用程序 它绑定到我的列表对象 订单 如下所示 public class OrderBlock public Settings setting public List
  • 仅复制粘贴值( xlPasteValues )

    我正在尝试将sheetA 中的整个列复制到Sheet B sheetA 列具有用公式形成的值 我仅使用复制 SheetA 列值xl粘贴值 但它不会将值粘贴到另一个sheetB SheetB 中的列为空 我的VBA代码 Public Sub
  • Xcode 10 Beta 6 Playground 中未调用 Deinit 方法

    我正在探索内存管理概念并发现deinit方法没有调用Xcode 10 beta 6 游乐场 最初我认为可能是代码中存在一些问题 然后我在 Xcode 9 4 1 Playground 和 Xcode 10 beta 6 示例应用程序中测试相
  • fetch() 在 Firefox 中使用 SSL 客户端身份验证失败

    我有一个使用 SSL 客户端身份验证的 Web 服务器 该服务器上的网页具有同源性GET请求使用fetch API 在 Chrome 中 客户端证书按照预期在 SSL 握手中发送 从而产生 200 ok 响应 在 Firefox 中 不会发
  • 如何在触摸屏上关闭 Windows 8.1 手势和设置超级按钮栏

    我安装了戴尔触摸屏和 Windows 8 1 单语言 当我将手指从右边缘向中间移动时 Windows 8 将调出设置超级栏 或者当我将手指从中上边缘向下移动时 Windows 8 会隐藏我的应用程序并调出开始菜单 这是一个问题 因为我正在