0

我想在窗口 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;
 }
4

3 回答 3

0

视窗 8.1

  1. 我右键单击“四方”图标(以前是开始按钮)
  2. 装置经理
  3. N-trig DuoSense(R) 数字化仪
  4. 右键单击“N-trig Duosense Touch HID 接口”
  5. 禁用

完毕!

于 2014-02-15T02:02:36.547 回答
0

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

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

只在应用程序级别禁用它仍然很好,现在像注册表黑客一样在系统范围内禁用它。

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

于 2015-03-26T19:12:46.470 回答
0

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

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

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

  1. 打开常规设备管理器
  2. 找到您的触摸屏驱动程序**
  3. 启动您下载的设备管理器
  4. 找到您要禁用的触摸屏驱动程序
  5. 属性菜单就可以了
  6. 将[设备实例ID]复制到记事本
  7. 创建您下载的设备管理器的快捷方式
  8. 将以下内容添加到目标名称的末尾*
    • /enable "[设备实例 ID]"+
    • /disable "[设备实例 ID]"+

当然你会想要两者,所以制作两个快捷方式。

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

***不要添加+,只是它们之间的东西

于 2013-10-22T01:33:21.890 回答