C# как получить последнее время ввода данных пользователем
Я пытаюсь сделать заставку, которая будет включаться, когда пользователь ничего не делает в течение 5 минут.
Но я должен определить последний ввод пользователя и получить время этого ввода. Я долго искал, но нашел только одну вещь.
GetLastInputInfoфункция для С++
Я надеюсь, что кто - то сможет помочь мне с моей проблемой.
Что я уже пробовал:
/// <summary> /// Helps to find the idle time, (in milliseconds) spent since the last user input /// </summary> public class IdleTimeFinder { [DllImport("User32.dll")] private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii); [DllImport("Kernel32.dll")] private static extern uint GetLastError(); public static uint GetIdleTime() { LASTINPUTINFO lastInPut = new LASTINPUTINFO(); lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut); GetLastInputInfo(ref lastInPut); return ((uint)Environment.TickCount - lastInPut.dwTime); } /// <summary> /// Get the Last input time in milliseconds /// </summary> /// <returns></returns> public static long GetLastInputTime() { LASTINPUTINFO lastInPut = new LASTINPUTINFO(); lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut); if (!GetLastInputInfo(ref lastInPut)) { throw new Exception(GetLastError().ToString()); } return lastInPut.dwTime; } }
0x01AA
И в чем же проблема? Вы все уже показываете, что вы пытаетесь это сделать с pinvoke. Теперь вам нужно объяснить, где вы столкнулись с проблемой ;)
F-ES Sitecore
Если это то, как работают заставки экрана, что произойдет, если я буду запускать 10 приложений, которые все пытались это сделать? Неужели после 5 минут бездействия все они будут работать одновременно? Как это будет работать?
Windows имеет встроенный фреймворк экранной заставки, вы просто пишете свое приложение, называете его соответствующим образом, пользователь устанавливает его, и Windows делает все остальное за вас.