AktualizacjaJak mogę wykryć, kiedy Window 10 wchodzi w tryb tabletu w aplikacji Windows Forms?
Choć nie jest to najbardziej eleganckie rozwiązanie, jedna metoda, która wydaje się działać to oglądać odpowiednią wartość rejestru. Oto przykład korzystania z usługi WMI. Z przyjemnością usłyszę od kogoś, czy jest lepsze rozwiązanie niż to.
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");
}
}
}
oryginalne pytanie
Jestem zainteresowany poczynić pewne optymalizacje w moim Windows Forms aplikacji opartej o tym, czy użytkownik znajduje się w „trybie tabletu” (lub nie) za pomocą nowej funkcji systemu Windows 10 Continuum .
Istnieje kilka wskazówek, jak to zrobić w projekcie UWP pod numerem https://msdn.microsoft.com/en-us/library/windows/hardware/dn917883(v=vs.85).aspx (tzn. Sprawdź UserInteractionMode bieżącego widoku, aby zobaczyć, czy jest to UserInteractionMode.Mouse lub UserInteractionMode.Touch), jednak nie jestem pewien, czy lub jak mogę zrób to samo w Windows Forms.
Czy istnieje sposób, w jaki mogę wywołać niezbędne interfejsy API UWP z mojej aplikacji Windows Forms lub czy istnieje odpowiednik Windows Forms, którego mogę użyć?
Masz powiadomienie w wiadomości wm_settingchange. –
Powinieneś przenieść "Update" powyżej do odpowiedzi. –
Więcej informacji znajdziesz tutaj https://social.msdn.microsoft.com/Forums/pl-PL/0610868f-8c30-4749-beac-510063b73913/about-windows-10-tablet-mode-api?forum=windowsuidevelopment –