如何在Windows 8中禁用触摸屏?

时间:2013-10-11 10:08:28

标签: winapi windows-8

我想在窗口8中禁用触摸屏,但是在更改注册表时我遇到了一些麻烦。

更改注册表后,我必须重新启动计算机。如果没有重新启动计算机我无法禁用触摸屏。但我希望在不重启计算机的情况下禁用触摸屏。 这是我的代码:

int EnableTouchScreen(bool enable)
{
    EnableMulTouch(enable);
    EnableTouch(enable);

    DWORD dwRet = 0;
    SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, NULL, NULL, SMTO_NORMAL,1,&dwRet);

    return 0;
}  

int EnableMulTouch(bool enable) 
{
    HKEY hkey;
    LONG lResult;
    DWORD dwtype; 

    if(IsWin64())
    {
        lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Wisp\\MultiTouch\\"), 0, KEY_WOW64_64KEY | KEY_ALL_ACCESS |KEY_WRITE, &hkey);
    }
    else
    {
    lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Wisp\\MultiTouch\\"), 0, KEY_WOW64_32KEY | KEY_ALL_ACCESS |KEY_WRITE, &hkey);
    }

    if (lResult == ERROR_SUCCESS) 
    {
        DWORD value = 0;

        if(enable)
        {
             value = 1;
             lResult = RegSetValueEx(hkey, _T("MultiTouchEnabled"), 0, REG_DWORD, (PBYTE)&value, sizeof(DWORD));
        }
        else
        {
            value = 0;
            lResult = RegSetValueEx(hkey, _T("MultiTouchEnabled"), 0, REG_DWORD, (PBYTE)&value, sizeof(DWORD));
        }

        if (lResult != ERROR_SUCCESS) 
        {
            char strErr[256];
            sprintf(strErr, "SetMulTouch --- GetLastError(): %u\n", GetLastError() );
            OutputDebugStringA(strErr);

            return FALSE;
        }

        RegCloseKey(hkey);
   }

   return 0;
}

int EnableTouch(bool enable)
{
    HKEY hkey;
    LONG lResult; 
    DWORD dwtype; 

    if(IsWin64())
{
    lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Wisp\\Touch\\"), 0, KEY_WOW64_64KEY | KEY_ALL_ACCESS |KEY_WRITE, &hkey);
}
else
{

    lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Wisp\\Touch\\"), 0, KEY_WOW64_32KEY | KEY_ALL_ACCESS |KEY_WRITE, &hkey);
}

if (lResult == ERROR_SUCCESS) 
{
    DWORD value = 0;

    if(enable)
    {
        value = 1;
        lResult = RegSetValueEx(hkey, _T("TouchGate"), 0, REG_DWORD, (PBYTE)&value, sizeof(DWORD));
        value = 0;
        lResult = RegSetValueEx(hkey, _T("PanningDisabled"), 0, REG_DWORD, (PBYTE)&value, sizeof(DWORD));
    }
    else
    {
        value = 0;
        lResult = RegSetValueEx(hkey, _T("TouchGate"), 0, REG_DWORD, (PBYTE)&value, sizeof(DWORD));
        value = 1;
        lResult = RegSetValueEx(hkey, _T("PanningDisabled"), 0, REG_DWORD, (PBYTE)&value, sizeof(DWORD));
    }

    if (lResult != ERROR_SUCCESS) 
    {
        char strErr[256];
        sprintf(strErr, "SetMulTouch --- GetLastError(): %u\n"GetLastError() ); 
        OutputDebugStringA(strErr);
        return FALSE;
    }

    RegCloseKey(hkey);
}

return 0;
 }

3 个答案:

答案 0 :(得分:0)

我不认为这对程序有帮助,但您可以使用此应用程序通过Windows 8中的快捷方式禁用/启用触摸屏。

http://www.nirsoft.net/utils/device_manager_view.html

以您的语言下载,您必须在创建快捷方式后使用控制台命令

  1. 打开常规设备管理器
  2. 找到您的触摸屏驱动程序**
  3. 启动您下载的设备管理器
  4. 找到要禁用的触摸屏驱动程序
  5. 上面的属性菜单
  6. 将[设备实例ID]复制到记事本
  7. 创建您下载的设备管理器的快捷方式
  8. 将以下内容添加到目标名称​​ * 的末尾
    • / enable“[设备实例ID]”+
    • /禁用“[设备实例ID]”+
  9. 当然你会想要两个,所以制作两个快捷方式。

    **(它将是人机界面驱动程序之一,一次禁用一个,直到您发现哪个是触摸屏,如果您不确定,请注意不要一次禁用多个或冒险被锁在电脑外!!)

    ***不要加+,只是它们之间的什么

答案 1 :(得分:0)

Windows 8.1

  1. 我右键点击“四方”图标(以前是开始按钮)
  2. 设备管理器
  3. N-trig DuoSense(R)数字化仪
  4. 右键单击“N-trig Duosense Touch HID界面”
  5. 禁用
  6. DONE!

答案 2 :(得分:0)

感谢matscol,他在这里回答了他自己的类似问题:

How to turn off all touch input at application, window or control level?

仅在应用程序级别禁用它并且现在像注册表黑客那样系统范围内仍然是很好的。

我现在将使用此解决方案,但我会寻找更好的东西。