【问题标题】:Enable Tablet Mode on Windows 10 through Code?通过代码在 Windows 10 上启用平板电脑模式?
【发布时间】:2015-08-06 20:24:30
【问题描述】:

我已经阅读了有关如何检测 Windows 10 设备是否处于平板电脑模式的各种方法,尤其是以下主题;

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

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

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

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

【问题讨论】:

  • 我很确定这个方法不存在。
  • @DavidLeitner 必须有一些事件,因为微软已经在他们的应用程序中利用了它。它可能不会暴露在 .NET Framework 中,但它会存在于 WinAPI 的某个地方。
  • @GregoryABeamer 感谢 cmets。是的,我希望它隐藏在某个地方的 WinAPI 中。我已经搜索过 UWP 示例,其中大多数都与处理平板电脑模式的更改有关,而不是启动它。
  • @gdbgeek 你想强制某人进入平板模式?
  • @GregoryABeamer 几乎是正确的。我有一个二合一设备,当我松开键盘时它不会自动切换到平板电脑模式。我可以检测到键盘何时被移除。发生这种情况时,我想启用平板电脑模式。

标签: c# .net windows


【解决方案1】:

在 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   

【讨论】:

    【解决方案2】:

    在here 中四处寻找 - 您需要专注于用户交互模式的示例。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多