Winapi 如何在windows 8中禁用触摸屏?
我想禁用窗口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
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]”+
完成了 多亏了matscol,他在这里回答了自己类似的问题: 只在应用程序级别禁用它还是不错的,现在就像注册表黑客一样在系统范围内禁用它
我现在会使用这个解决方案,但我会寻找更好的 你为什么要花这么多精力来做这件事?你想解决的实际问题是什么?我想在不重新启动计算机的情况下立即禁用屏幕。非常感谢,现在我使用“devcon.exe”工具禁用所有HID,但我不知道这是否会导致其他问题