Обновление
Хотя это не самое элегантное решение, один из методов, который, кажется, работает, - это посмотреть соответствующее значение реестра. Вот пример использования 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 Forms на основе того, находится ли пользователь в режиме "Tablet Mode" (или нет) с помощью новой функции Windows 10. Continuum.
Есть несколько рекомендаций относительно того, как это сделать в проекте UWP в https://msdn.microsoft.com/en-us/library/windows/hardware/dn917883(v=vs.85).aspx (т.е. проверьте текущий вид UserInteractionMode, чтобы узнать, UserInteractionMode.Mouse или UserInteractionMode.Touch), однако я не уверен, что и как я могу сделать то же самое в Windows Forms.
Можно ли каким-либо образом вызывать необходимые API UWP из моего приложения Windows Forms или есть ли эквивалент Windows Forms, который я могу использовать?