Winform Idle, 관련 유후시간체크
윈폼 만들때 일정 시간 입력이 없으면 뭔가 해야 할때... ( 화면 보호기, 로그아웃 같은... )
간단한 샘플코드이다.
5초간 가만히 두면 텍스트 박스가 잠긴다.
Idle 이벤트가 발생하면서 텍스트 박스에 시간(밀리초)이 표시된다.
단, 윈도우 전체 <--- 범위라서 ... 응용프로그램 밖에서 마우스나 키보드가 움직여도 값이 초기화 된다.
오늘 이걸로 윈폼 로그인 세션을 구현하기는 했는데... 사용환경 덕분에 고려사항은 아니어서
우선 패스... 응용프로그램 범위내에서라면 다른 방법을 찾아봐야 될 것 같다.
public partial class Form1 : Form
{
[DllImport("User32.dll")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
internal struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
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);
}
TimeSpan limitSessionTime = new TimeSpan(0, 0, 5);
public Form1()
{
InitializeComponent();
Application.Idle += Application_Idle;
isIdleReset = true;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
button1.PerformClick();
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
Application.Idle -= Application_Idle;
base.OnFormClosed(e);
}
private void Application_Idle(object sender, EventArgs e)
{
textBox1.Text = "" + GetIdleTime();
if (isIdleReset) return;
if (!isIdleReset && limitSessionTime.TotalMilliseconds < GetIdleTime())
{
isIdleReset = true;
this.textBox1.ReadOnly = true;
Application.DoEvents();
}
}
bool isIdleReset = true;
private void button1_Click(object sender, EventArgs e)
{
isIdleReset = false;
this.textBox1.ReadOnly = false;
Application.RaiseIdle(e);
}
}
'# 3) .Net ( Vs 2008 ) > C#' 카테고리의 다른 글
간만에... Hoons.net 질문글 보고... (0) | 2019.02.12 |
---|---|
오... 이상한 버그???? (0) | 2018.12.18 |
JSFW.Graffiti] 터치..스크린 막는거... 안되네... (0) | 2018.12.15 |
Flow 상세내용 입력하기... (0) | 2018.05.01 |
지연자동 조회 처리 (0) | 2016.03.10 |