Top / JUNK / 10秒未入力ならフォームを閉じる

10 秒間未入力ならフォームを閉じるサンプル。

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        [StructLayout(LayoutKind.Sequential)]
        class LASTINPUTINFO
        {
            public int cbSize;
            public uint dwTime;
            public LASTINPUTINFO() {
                cbSize = Marshal.SizeOf(typeof(LASTINPUTINFO));
            }
        }

        [DllImport("user32.dll")]
        static extern bool GetLastInputInfo(LASTINPUTINFO plii);

        [DllImport("kernel32.dll")]
        static extern uint GetTickCount();
        private Timer timer;

        public Form1() {
            InitializeComponent();
        }

        protected override void OnShown(EventArgs e) {
            base.OnShown(e);
            timer = new Timer {
                Interval = 100,
                Enabled = true
            };
            timer.Tick += Timer_Tick;
        }

        private void Timer_Tick(object sender, EventArgs e) {
            var lii = new LASTINPUTINFO();
            if (GetLastInputInfo(lii)) {
                long pastTickCount = GetTickCount() - lii.dwTime;
                var span = new TimeSpan(pastTickCount * TimeSpan.TicksPerMillisecond);
                System.Diagnostics.Debug.Print($"{span}");
                if (span.TotalSeconds > 10) {
                    this.Close();
                }
            }
        }
    }
}

キー入力やマウス入力など与えるツールが常駐していると、うまく動かない可能性があります。
Windows10における、GetLastInputInfo関数(User32API)について
この場合はワイヤレスイヤホンだったそうですが

Raw Input で対応できるようです。




トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2019-08-10 (土) 16:24:23 (74d)