Тачпад Windows одним щелчком мышиC#

Место общения программистов C#
Anonymous
Тачпад Windows одним щелчком мыши

Сообщение Anonymous »

Я пытаюсь программно включить/отключить эту опцию:

Настройки → 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

Вернуться в «C#»