首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式更改Windows 11 TouchPad切换

以编程方式更改Windows 11 TouchPad切换
EN

Stack Overflow用户
提问于 2022-06-30 17:01:10
回答 1查看 78关注 0票数 0

虽然我搜索了这个站点和互联网,但我找不到任何方法来以编程方式为Windows11启用或禁用TouchPad。但是,在设置中,通过此页面可以轻松地实现这一点:

有人能告诉我如何以编程的方式实现这个目标吗?最好是通过C#.Net。

PS:,我需要立即影响到这一点。我的意思是没有重新启动或注销/登录。

EN

回答 1

Stack Overflow用户

发布于 2022-06-30 17:12:51

在对注册表进行更改之前先备份它

此注册表项是要更改的项(您可以使用c#更改该注册表项)。

Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\Status

您需要将Enabled REG_DWORD设置为0

代码语言:javascript
复制
const string userRoot = "HKEY_CURRENT_USER";
const string subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\PrecisionTouchPad\\Status";
const string keyName = userRoot + "\\" + subkey;
// ON
Registry.SetValue(keyName, "Enabled", 1, RegistryValueKind.DWord);
// OFF
Registry.SetValue(keyName, "Enabled", 0, RegistryValueKind.DWord);

然后,您需要广播一条消息来告诉Windows设置已更改。

这是c# (未经测试的对不起)。这些标志的文档可以在这里找到:https://learn.microsoft.com/en-us/dotnet/api/microsoft.crm.unifiedservicedesk.dynamics.controls.nativemethods.sendmessagetimeoutflags?view=dynamics-usd-3

代码语言:javascript
复制
[Flags]
public enum SendMessageTimeoutFlags : uint
{
    SMTO_NORMAL = 0x0,
    SMTO_BLOCK = 0x1,
    SMTO_ABORTIFHUNG = 0x2,
    SMTO_NOTIMEOUTIFNOTHUNG = 0x8
}

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

IntPtr HWND_BROADCAST = new IntPtr(0xffff);
const uint WM_SETTINGCHANGE  = 0x1A;
const int MSG_TIMEOUT = 15000;
UIntPtr RESULT;
string ENVIRONMENT = "Environment";

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, UIntPtr.Zero, (IntPtr)Marshal.StringToHGlobalAnsi(ENVIRONMENT), SendMessageTimeoutFlags.SMTO_ABORTIFHUNG, MSG_TIMEOUT, out RESULT);

这是powershell脚本

代码语言:javascript
复制
if (-not ("win32.nativemethods" -as [type])) {
    add-type -Namespace Win32 -Name NativeMethods -MemberDefinition @"
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
    IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam,
    uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);
"@
}

$HWND_BROADCAST = [intptr]0xffff;
$WM_SETTINGCHANGE = 0x1a;
$result = [uintptr]::zero

[win32.nativemethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE,[uintptr]::Zero, "Environment", 2, 5000, [ref]$result);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72819528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档