通过代码在Windows 10上启用Tablet模式?

时间:2015-08-06 20:24:30

标签: c# .net windows

我已经阅读了各种方法来了解如何检测Windows 10设备是否处于平板电脑模式,最明显的是下面的主题;

How can I detect when Window 10 enters tablet mode in a Windows Forms application?

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

我也尝试过使用Spy ++风格的应用程序,但无法看到正在发送的消息。

是否存在执行此操作的方法?

2 个答案:

答案 0 :(得分:3)

在C#中没有真正的方法可以做到这一点。当然,您可以更改注册表项,但是需要注销/启用才能从平板电脑模式更改为平板电脑模式。

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\ImmersiveShell\TabletMode

启用:1或禁用0

由于我的问题是我的WPF-App在平板电脑模式启动时不会出现,我使用的是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   

答案 1 :(得分:1)

here中徘徊 - 您需要关注用户互动模式的示例。

注意:这适用于UWP(通用Windows平台),即Windows 10+,如果您不仅仅针对Win 10,则需要其他版本Windows的代码。