К сожалению, ни один такой API на платформе UWP не может использоваться для обнаружения заблокированного экрана. После проверки ссылки на упомянутые случаи, я думаю, что вы можете использовать расширение рабочего стола для подхода, и основная теория заключается в том, чтобы прослушивать поведение блокировки экрана по событию SystemEvents.SessionSwitch
в расширении рабочего стола и отправлять сообщение о флаге клиенту UWP с AppSerivce
. И у меня есть пример кода для вас, пожалуйста, проверьте эту ссылку . Этот пример кода сделан на основе блога @ Stefan. Для более подробной информации, пожалуйста, ищите Глобальная регистрация горячих клавиш в блоге UWP .
class LockScreenAppContext : ApplicationContext
{
private Process process = null;
private bool LockScreenInProgress = false;
public LockScreenAppContext()
{
int processId = (int)ApplicationData.Current.LocalSettings.Values["processId"];
process = Process.GetProcessById(processId);
process.EnableRaisingEvents = true;
process.Exited += DesktopExtensionAppContext_Exited;
SystemEvents.SessionSwitch += new SessionSwitchEventHandler(SystemEvents_SessionSwitch);
}
private void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
switch (e.Reason)
{
case SessionSwitchReason.SessionLock:
SentMessage(true);
break;
case SessionSwitchReason.SessionUnlock:
SentMessage(false);
break;
}
}
private async void SentMessage(bool isLocked)
{
ValueSet ScreebLocked = new ValueSet();
ScreebLocked.Add("Lock", isLocked);
AppServiceConnection connection = new AppServiceConnection();
connection.PackageFamilyName = Package.Current.Id.FamilyName;
connection.AppServiceName = "LockScreenConnection";
AppServiceConnectionStatus status = await connection.OpenAsync();
if (status != AppServiceConnectionStatus.Success)
{
Debug.WriteLine(status);
Application.Exit();
}
connection.ServiceClosed += Connection_ServiceClosed;
AppServiceResponse response = await connection.SendMessageAsync(ScreebLocked);
}
private void DesktopExtensionAppContext_Exited(object sender, EventArgs e)
{
Application.Exit();
}
private void Connection_ServiceClosed(AppServiceConnection sender, AppServiceClosedEventArgs args)
{
Debug.WriteLine("Connection_ServiceClosed");
LockScreenInProgress = false;
}
}