Настройки → Bluetooth и устройства → Сенсорная панель → Касания → «Нажмите одним пальцем для одного щелчка»
При переключении вручную через настройки Windows эффект проявляется немедленно.
Однако при изменении соответствующих ключей реестра под:
HKCU\Software\Microsoft\Windows\CurrentVersion\PrecisionTouchPad
изменение применяется только после полной перезагрузки системы.
Я уже пробовал:
- Перезапуск Проводника (explorer.exe)
- Перезапуск служб, связанных с вводом (например, hidserv, TabletInputService)
- Повторное перечисление устройств (pnputil /scan-devices)
- Перезапуск драйверов (HID/тачпад)
- Завершение работы и повторное открытие SystemSettings.exe
Есть ли способ чтобы:
- заставить Windows перезагрузить настройки Precision Touchpad без перезагрузки, или
- Имитировать действие переключения программно (например, через API, PowerShell или автоматизацию пользовательского интерфейса), чтобы эффект применялся мгновенно?
(20260414_204100) – в вопрос добавлен минимальный воспроизводимый пример."
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace ttpd
{
public partial class Form1 : Form
{
// SystemParametersInfo constants
private const uint SPI_GETTOUCHPADPARAMETERS = 0x00AE;
private const uint SPI_SETTOUCHPADPARAMETERS = 0x00AF;
private const uint SPIF_UPDATEINIFILE = 0x01; // Save config to user .ini
private const uint SPIF_SENDCHANGE = 0x02; // Notify system change
// Stores current Tap to Click state
private bool touchpadClickEnabled;
// UI controls (assumed from designer)
private Label lblStatus;
[StructLayout(LayoutKind.Sequential)]
public struct TOUCHPAD_PARAMETERS_V1
{
public uint versionNumber;
public uint maxSupportedContacts;
public uint legacyTouchpadFeatures;
public uint flags1;
public uint flags2;
public uint sensitivityLevel;
public uint cursorSpeed;
public uint feedbackIntensity;
public uint clickForceSensitivity;
public uint rightClickZoneWidth;
public uint rightClickZoneHeight;
// Access tapEnabled (bit 2 of flags2)
public bool TapEnabled
{
get => ((flags2 >> 2) & 1) == 1;
set
{
if (value)
flags2 |= (1u