Трансляция WM_SETTINGCHANGE не обновляет настройки в приложении «Настройки».C#

Место общения программистов C#
Anonymous
Трансляция WM_SETTINGCHANGE не обновляет настройки в приложении «Настройки».

Сообщение Anonymous »

Я пытаюсь написать код для программного отключения и повторного включения сенсорной панели. Я написал код для обновления раздела реестра SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\Status\Enabled, который работает нормально. Затем мне нужно передать WM_SETTINGCHANGE, что я и сделал с помощью следующего кода:

Код: Выделить всё

    private const int HWND_BROADCAST = 0xFFFF;
private const uint WM_SETTINGCHANGE = 0x1A;
private const int MSG_TIMEOUT = 15000;

// Enum for SendMessageTimeout flags
[Flags]
private enum SendMessageTimeoutFlags : uint
{
SMTO_NORMAL = 0x0000,
SMTO_BLOCK = 0x0001,
SMTO_ABORTIFHUNG = 0x0002,
SMTO_NOTIMEOUTIFNOTHUNG = 0x0008,
SMTO_ERRORONEXIT = 0x0020
}

// PInvoke declaration
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr SendMessageTimeout(
IntPtr hWnd,
uint Msg,
UIntPtr wParam,
IntPtr lParam,
SendMessageTimeoutFlags fuFlags,
uint uTimeout,
out UIntPtr lpdwResult);

private static void BroadcastChange()
{
IntPtr hwndBroadcast = new IntPtr(HWND_BROADCAST);
string environment = "Environment";

// Allocate memory for the string parameter
IntPtr lParam = Marshal.StringToHGlobalAuto(environment);

try
{
UIntPtr result;
SendMessageTimeout(
hwndBroadcast,
WM_SETTINGCHANGE,
UIntPtr.Zero,
lParam,
SendMessageTimeoutFlags.SMTO_ABORTIFHUNG,
MSG_TIMEOUT,
out result);

Console.WriteLine("Broadcast message sent successfully.");
}
finally
{
// Free the allocated memory
Marshal.FreeHGlobal(lParam);
}
}
Когда этот код выполняется (после изменения значения ключа), я ожидаю, что тачпад перестанет работать, но он продолжает работать. Кроме того, я ожидаю, что изменится следующий переключатель приложения «Настройки», но это не так:
[img]https://i.sstatic. net/oTUZ4ldA.png[/img]

Что я делаю не так?
Это консольное приложение .net 8.Изменить:
Ссылка на репозиторий с полной копией кода:
https://github.com/IanPNewson/AutoDisableTouchpad

Подробнее здесь: https://stackoverflow.com/questions/787 ... ttings-app

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