2012-09-03 94 views
3

當使用數字轉換筆以避免例如來自例如筆記本的「噪音」時,通常需要禁用觸摸輸入。手擱在屏幕上。存在一個程序化解決方案來禁用觸摸 - 但在Windows 7中維護筆輸入,這會更改TouchGate註冊表值並廣播系統消息;似乎後者在Windows 8中失敗了。Windows 8觸摸切換

有誰知道如何更新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 
       ); 
      } 
     } 
    } 
} 

回答

0

別處發現沒有應答後,另一種是使用PowerShell腳本來切換適當的設備(如果它是從筆不同)。請注意,我沒有測試此解決方案,因爲我不再希望使用Windows 8

您可能需要啓用通過組策略(管理模板< Windows組件<的Windows PowerShell)在本地計算機上的PowerShell腳本執行。

首先,爲您的機器下載'devcon.exe'(來自Microsoft)的副本。下面的腳本然後使用此命令來實現所需的效果,前提是'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 ID'之一。