gpt4 book ai didi

c# - 如何检测 Windows 10 何时在 Windows 窗体应用程序中进入平板电脑模式?

转载 作者:IT王子 更新时间:2023-10-29 04:11:33 25 4
gpt4 key购买 nike

更新

虽然这不是最优雅的解决方案,但似乎可行的一种方法是查看相关的注册表值。下面是使用 WMI 执行此操作的示例。如果有比这更好的解决方案,我很乐意听取任何人的意见。

using System;
using System.Management;
using System.Security.Principal;
using System.Windows.Forms;
using Microsoft.Win32;

public partial class MainForm : Form
{
public MainForm()
{
this.InitializeComponent();
this.UpdateModeFromRegistry();

var currentUser = WindowsIdentity.GetCurrent();
if (currentUser != null && currentUser.User != null)
{
var wqlEventQuery = new EventQuery(string.Format(@"SELECT * FROM RegistryValueChangeEvent WHERE Hive='HKEY_USERS' AND KeyPath='{0}\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ImmersiveShell' AND ValueName='TabletMode'", currentUser.User.Value));
var managementEventWatcher = new ManagementEventWatcher(wqlEventQuery);
managementEventWatcher.EventArrived += this.ManagementEventWatcher_EventArrived;
managementEventWatcher.Start();
}
}

private void ManagementEventWatcher_EventArrived(object sender, EventArrivedEventArgs e)
{
this.UpdateModeFromRegistry();
}

private void UpdateModeFromRegistry()
{
var tabletMode = (int)Registry.GetValue("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ImmersiveShell", "TabletMode", 0);
if (tabletMode == 1)
{
Console.Write(@"Tablet mode is enabled");
}
else
{
Console.Write(@"Tablet mode is disabled");
}
}
}

原始问题

我有兴趣根据用户是否处于“平板电脑模式”(或不处于)使用新的 Windows 10 Continuum 功能对我的 Windows 窗体应用程序进行一些优化。

关于如何在 UWP 项目中执行此操作的一些指导位于 https://msdn.microsoft.com/en-us/library/windows/hardware/dn917883(v=vs.85).aspx (即检查当前 View 的 UserInteractionMode 以查看它是 UserInteractionMode.Mouse 还是 UserInteractionMode.Touch),但是我不确定是否或如何在 Windows 窗体中执行相同的操作。

是否有任何方法可以从我的 Windows 窗体应用程序调用必要的 UWP API,或者是否有一些我可以使用的等效 Windows 窗体?

最佳答案

要了解系统是否处于平板电脑模式,请像这样查询系统指标 ConvertibleSlateMode(未测试,但它应该可以在 XP 中正常工作):

public static class TabletPCSupport
{
private static readonly int SM_CONVERTIBLESLATEMODE = 0x2003;
private static readonly int SM_TABLETPC = 0x56;

private static Boolean isTabletPC = false;

public static Boolean SupportsTabletMode { get { return isTabletPC; }}

public static Boolean IsTabletMode
{
get
{
return QueryTabletMode();
}
}

static TabletPCSupport ()
{
isTabletPC = (GetSystemMetrics(SM_TABLETPC) != 0);
}

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "GetSystemMetrics")]
private static extern int GetSystemMetrics (int nIndex);

private static Boolean QueryTabletMode ()
{
int state = GetSystemMetrics(SM_CONVERTIBLESLATEMODE);
return (state == 0) && isTabletPC;
}
}

(文档 here)

关于c# - 如何检测 Windows 10 何时在 Windows 窗体应用程序中进入平板电脑模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31153664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com