private static void WatchDesktop()
{
while (true)
{
try
{
using (var inputDesktop = new Desktop())
{
inputDesktop.OpenInput();
if (!inputDesktop.DesktopName.Equals(_lastDesktop))
{
if (inputDesktop.Show() && Desktop.SetCurrent(inputDesktop))
{
Console.WriteLine($"Desktop switched from {_lastDesktop} to {inputDesktop.DesktopName} on thread {Desktop.GetCurrentThreadId()}");
_lastDesktop = inputDesktop.DesktopName;
_lastDesktopInput = inputDesktop;
CurrentDesktop = inputDesktop;
}
else
{
var errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message;
Console.WriteLine(errorMessage);
_lastDesktopInput?.Close();
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message, ex);
}
Thread.Sleep(1000);
}
}