gpt4 book ai didi

wpf - 如何在应用程序、窗口或控制级别关闭所有触摸输入?

转载 作者:行者123 更新时间:2023-12-05 00:59:44 24 4
gpt4 key购买 nike

将 c# 用于 wpf 应用程序,如果在 Windows 7 中在控制面板中启用触摸,则用户默认可以在 InkCanvas 上“写入”。用一根手指。我想禁用它并仅强制手写笔输入。

如果可能,我想知道如何以不止一种方式进行操作:首先通过禁用 InkCanvas 上的触摸,第二个是针对特定窗口禁用它,第三个是针对整个应用程序禁用它。第四个好处是知道如何在系统范围内打开或关闭触摸。

我试过 UnregisterTouchWindow ,我试过设置 Stylus.SetIsTouchFeedbackEnabled为假 InkCanvas ,但都没有奏效。

最佳答案

进一步的挖掘帮助我整理了以下内容,作为在系统范围内打开/关闭触摸的一种方式。如果有人知道如何以其他 3 种方式中的任何一种来实现这一点,我仍然会感谢这些答案。

基本步骤是检查当前注册表状态,必要时更改它(然后刷新系统以识别更改),并记下初始状态以在程序退出时根据需要恢复。

感谢这些海报 two links为教育。

public MainWindow(){

InitializeComponent();

RegistryKey regKey = Registry.CurrentUser;
regKey = regKey.OpenSubKey(@"Software\Microsoft\Wisp\Touch", true);
string currKey = regKey.GetValue("TouchGate").ToString();
if (currKey == "1")
{
regKey.SetValue("TouchGate", 0x00000000);
User32Utils.Notify_SettingChange();
UserConfig.TGate = "1";
}
regKey.Close();
...
}


public static class UserConfig {
public static string TGate { get; set; }
...
}


private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e){
...
if (UserConfig.TGate == "1")
{
RegistryKey regKey = Registry.CurrentUser;
regKey = regKey.OpenSubKey(@"Software\Microsoft\Wisp\Touch", true);
regKey.SetValue("TouchGate", 0x00000001);
User32Utils.Notify_SettingChange();
regKey.Close();
}
}



//------------------User32Utils.cs
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

namespace (...)
{
internal class User32Utils
{
#region USER32 Options
static IntPtr HWND_BROADCAST = new IntPtr(0xffffL);
static IntPtr WM_SETTINGCHANGE = new IntPtr(0x1a);
#endregion

#region STRUCT
enum SendMessageTimeoutFlags : uint
{
SMTO_NORMAL = 0x0000,
SMTO_BLOCK = 0x0001,
SMTO_ABORTIFHUNG = 0x2,
SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
}
#endregion

#region Interop

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern IntPtr SendMessageTimeout(IntPtr hWnd,
uint Msg,
UIntPtr wParam,
UIntPtr lParam,
SendMessageTimeoutFlags fuFlags,
uint uTimeout,
out UIntPtr lpdwResult);
#endregion

internal static void Notify_SettingChange()
{
UIntPtr result;
SendMessageTimeout(HWND_BROADCAST, (uint)WM_SETTINGCHANGE,
UIntPtr.Zero, UIntPtr.Zero,
SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out result);
}
}
}

关于wpf - 如何在应用程序、窗口或控制级别关闭所有触摸输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5120890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com