在使用数字化笔时,经常需要禁用触摸输入,以避免例如手停留在屏幕上产生的‘噪音’。在Windows7中,有一种程序化的解决方案可以禁用触摸输入,但保留笔式输入,它会更改TouchGate注册表值并广播系统消息;在Windows8中,后者似乎失败了。
有谁知道如何更新代码/ Windows 8的替代解决方案(请注意,我的系统不允许我通过控制面板GUI禁用触摸输入)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace Touch_Toggle
{
class Program
{
static void Main(string[] args)
{
Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.CurrentUser;
regKey = regKey.OpenSubKey(@"Software\Microsoft\Wisp\Touch", true);
string currKey = regKey.GetValue("TouchGate").ToString();
if (currKey == "1")
regKey.SetValue("TouchGate", 0x00000000);
else
regKey.SetValue("TouchGate", 0x00000001);
regKey.Close();
User32Utils.Notify_SettingChange();
}
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,
1,
out result
);
}
}
}
}发布于 2012-09-27 07:30:18
在其他地方找不到答案后,另一种方法是使用PowerShell脚本切换适当的设备(如果设备与笔不同)。请注意,我没有测试此解决方案,因为我不再希望使用Windows 8。
您可能需要通过组策略(管理模板< Windows组件< Windows PowerShell)在本地计算机上启用PowerShell脚本执行。
首先,为你的机器下载一份'devcon.exe‘(来自微软)。然后,假设'devcon.exe‘在同一个目录中,下面的脚本使用这个命令来达到所需的效果。
$devid = "HID\WACOMVTHID&Col03"
$status = .\devcon status $devid | Select-String "running"
if($status -eq $null) {
write-host "Enabling touch"
.\devcon enable $devid
} else {
write-host "Disabling touch"
.\devcon disable $devid
}'devid‘参数可以作为设备属性中的'Hardware in’之一找到。
https://stackoverflow.com/questions/12255203
复制相似问题