Winapi 如何在windows 8中禁用触摸屏?

Winapi 如何在windows 8中禁用触摸屏?,winapi,windows-8,Winapi,Windows 8,我想禁用窗口8中的触摸屏,但在更改注册表时遇到了一些问题 更改注册表后,我必须重新启动计算机。如果不重新启动电脑,我不能禁用触摸屏。但我希望在不重新启动电脑的情况下禁用触摸屏。 这是我的密码: int EnableTouchScreen(bool enable) { EnableMulTouch(enable); EnableTouch(enable); DWORD dwRet = 0; SendMessageTimeout(HWND_BROADCAST, WM

我想禁用窗口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;
 }

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

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

  • 打开常规设备管理器
  • 找到您的触摸屏驱动程序**
  • 启动您下载的设备管理器
  • 找到要禁用的触摸屏驱动程序
  • 它的属性菜单
  • 将[设备实例ID]复制到记事本
  • 创建下载的设备管理器的快捷方式
  • 将以下内容添加到目标名称的末尾*
    • /启用“[设备实例ID]”+
    • /禁用“[设备实例ID]”+
  • 当然你两个都想要,所以要走两条捷径

    **(这将是一个人机界面驱动程序,一次禁用一个,直到您确定哪个是触摸屏为止。如果您不确定,请小心不要一次禁用多个,否则可能会被计算机锁定!!)

    ***不要添加+,只添加它们之间的内容

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

  • 完成了

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

    只在应用程序级别禁用它还是不错的,现在就像注册表黑客一样在系统范围内禁用它


    我现在会使用这个解决方案,但我会寻找更好的

    你为什么要花这么多精力来做这件事?你想解决的实际问题是什么?我想在不重新启动计算机的情况下立即禁用屏幕。非常感谢,现在我使用“devcon.exe”工具禁用所有HID,但我不知道这是否会导致其他问题