通过代码在Windows 10上启用平板模式

本文关键字:启用 模式 代码 Windows | 更新日期: 2023-09-27 18:06:41

关于如何检测Windows 10设备是否处于平板模式,我读过各种方法,最值得注意的是下面的主题;

如何在Windows窗体应用程序中检测Windows 10进入平板模式?

我想通过代码启用/禁用平板电脑模式(。Net c#),但我找不到任何资源来实现这一点。我试过更改注册表项并发送一个HWND_BROADCAST,表示发生了更改,但这并没有启动到平板电脑模式的更改。

我也试过使用spy++风格的应用程序,但是看不到正在发送的消息。

是否存在这样的方法?

通过代码在Windows 10上启用平板模式

在c#中没有真正的方法来做到这一点。当然你可以更改注册表项,但你需要注销/登录才能从平板电脑模式切换到平板电脑模式。

HKEY_CURRENT_USER'SOFTWARE'Microsoft'Windows'CurrentVersion'ImmersiveShell'TabletMode

启用:1或禁用0

因为我有一个问题,我的wpf应用程序不会出现在平板电脑模式启动,我使用了一个AutoHotKey脚本。你也可以创建一个。exe文件。来源:https://autohotkey.com/boards/viewtopic.php?t=15619

#NoEnv
SetBatchLines -1
ListLines Off
#NoTrayIcon 

TABLETMODESTATE_DESKTOPMODE := 0x0
TABLETMODESTATE_TABLETMODE := 0x1
TabletModeController_GetMode(TabletModeController, ByRef mode) {
    return DllCall(NumGet(NumGet(TabletModeController+0),3*A_PtrSize), "Ptr", TabletModeController, "UInt*", mode)
}
TabletModeController_SetMode(TabletModeController, _TABLETMODESTATE, _TMCTRIGGER := 4) {
    return DllCall(NumGet(NumGet(TabletModeController+0),4*A_PtrSize), "Ptr", TabletModeController, "UInt", _TABLETMODESTATE, "UInt", _TMCTRIGGER)  
}
ImmersiveShell := ComObjCreate("{C2F03A33-21F5-47FA-B4BB-156362A2F239}", "{00000000-0000-0000-C000-000000000046}")
TabletModeController := ComObjQuery(ImmersiveShell, "{4fda780a-acd2-41f7-b4f2-ebe674c9bf2a}", "{4fda780a-acd2-41f7-b4f2-ebe674c9bf2a}")
if (TabletModeController_GetMode(TabletModeController, mode) == 0)
    TabletModeController_SetMode(TabletModeController, mode == TABLETMODESTATE_DESKTOPMODE ? TABLETMODESTATE_TABLETMODE : TABLETMODESTATE_DESKTOPMODE)
ObjRelease(TabletModeController), TabletModeController := 0
ObjRelease(ImmersiveShell), ImmersiveShell := 0 ; Can be freed after TabletModeController is created, instead   

查看这里-您将需要关注用户交互模式的示例。

注意:这是UWP(通用Windows平台),也就是Windows 10+,如果你不是只针对win10,你将需要其他版本的Windows代码。