Убедитесь, что приложение не работает в течение определенного периода времени и блокирует его

В моем проекте мне нужна блокировка приложения (такая же, как блокировка Windows). Если приложение не используется в течение определенного периода времени, приложение должно быть заблокировано, то есть появится окно входа в приложение. Как это сделать в приложении WPF C #?

Вы можете использовать эти функции

  • LockWorkStation
  • GetLastInputInfo

см. этот код, вы должны добавить таймер в свою форму и установить this.timer1.Enabled = true;

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace WindowsFormsApplication9 { internal struct LASTINPUTINFO { public uint cbSize; public uint dwTime; } public partial class Form1 : Form { [DllImport("User32.dll")] public static extern bool LockWorkStation(); [DllImport("User32.dll")] private static extern bool GetLastInputInfo(ref LASTINPUTINFO Dummy); [DllImport("Kernel32.dll")] private static extern uint GetLastError(); public static uint GetIdleTime() { LASTINPUTINFO LastUserAction = new LASTINPUTINFO(); LastUserAction.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(LastUserAction); GetLastInputInfo(ref LastUserAction); return ((uint)Environment.TickCount - LastUserAction.dwTime); } public static long GetTickCount() { return Environment.TickCount; } public static long GetLastInputTime() { LASTINPUTINFO LastUserAction = new LASTINPUTINFO(); LastUserAction.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(LastUserAction); if (!GetLastInputInfo(ref LastUserAction)) { throw new Exception(GetLastError().ToString()); } return LastUserAction.dwTime; } public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { if (GetIdleTime() > 10000) //10 secs, Time to wait before locking LockWorkStation(); } private void Form1_Load(object sender, EventArgs e) { timer1.Start(); } } } 

ИМО принятый ответ не так хорош, как этот метод:

http://www.codeproject.com/Articles/30345/Application-Idle

В статье CodeProject используются сообщения Windows, которые заставят компонент учитывать, что приложение не работает , например

 public enum ActivityMessages : int { ///  /// Cursor moved while within the nonclient area. ///  WM_NCMOUSEMOVE = 0x00A0, ///  /// Mouse left button pressed while the cursor was within the nonclient area. ///  WM_NCLBUTTONDOWN = 0x00A1, ///  /// Mouse left button released while the cursor was within the nonclient area. ///  WM_NCLBUTTONUP = 0x00A2, ///  

Установите время ожидания при загрузке, и каждый раз, когда происходит «активное» действие (вам нужно подключиться к ним), верните таймер обратно в начало.

  • Блокировки повторного входа в C #
  • Может ли x86 переупорядочить узкий магазин с более широкой нагрузкой, которая полностью его содержит?
  • Как заблокировать одну строку
  • Почему объект блокировки должен быть статическим?
  • Как разрешить декларацию с двойной проверкой блокировки в Java?
  • Любой способ выбрать, не вызывая блокировки в MySQL?
  • Создание пользовательского LockScreen в android
  • Как заблокировать файл в Perl?
  • Как можно программно настроить блокировку экрана с помощью пароля?
  • Блокируется ли заблокированный объект, если в нем возникает исключение?
  • Как файловые системы обрабатывают одновременное чтение / запись?
  • Interesting Posts

    Цепочка RxJS Наблюдаемые данные http в Angular2 с использованием TypeScript

    Включен ли MySQL в MAMP без файла конфигурации?

    Изменение размера окон после изменения разрешения экрана

    Java: как преобразовать цвет RGB в CIE Lab

    Угловой фильтр точно по объектной клавише

    RewriteRule, который сохраняет параметры GET

    AudioTrack, SoundPool или MediaPlayer, которым я должен пользоваться?

    Получение значения RGB из-под курсора мыши

    Пример: связь между активностью и службой с использованием сообщений

    Разрешаем целочисленные переполнения со знаком в C / C ++

    Напишите программу, чтобы найти 100 самых больших чисел из массива из 1 миллиарда чисел

    rsync: как я могу настроить его для создания целевого каталога на сервере?

    Как отключить прозрачность панели задач в рабочем столе Windows 8?

    Есть ли LAME c ++ wraper \ simplifier (работает на Linux Mac и Win из чистого кода)?

    Выбор элементов с определенным цветом фона

    Давайте будем гением компьютера.