سلام دوستان
من یه برنامه ویندوزی دارم. میخوام کاری کنم که اگه کاربر لاگین کرد و به مدت 5 دقیقه از زمان لاگینش گذشت و در برنامه کاری انجام نداد، برنامه بسته بشه و نیاز به لاگین مجدد باشه. ممنون میشم کمکم کنید.
سلام دوستان
من یه برنامه ویندوزی دارم. میخوام کاری کنم که اگه کاربر لاگین کرد و به مدت 5 دقیقه از زمان لاگینش گذشت و در برنامه کاری انجام نداد، برنامه بسته بشه و نیاز به لاگین مجدد باشه. ممنون میشم کمکم کنید.
تست کنید
private void Form3_Load(object sender, EventArgs e) {
minute = DateTime.Now.Minute;
total =minute +5;
timer1.Enabled = true;
}
private int minute;
private int total;
private void timer1_Tick(object sender, EventArgs e)
{
minute = DateTime.Now.Minute;
if (minute ==(total) )
{
timer1.Enabled = false;
MessageBox.Show("ّFail");
//یا
Application.ExitThread();
//یا
//دستورات مورد نظر شما
}
}
ممنون دوست گلم
این کد شما فقط یه تایمره که به 5 دقیقه که میرسه برنامه را میبنده. من این را نمیخوام. من میخوام اگر بعد از لاگین موفق کاربر، 5 دقیقه از آخرین حرکت موس یا کلیک کیبورد گذشته بود و کاربر اقدامی نکرده بود، برنامه به صفحه لاگین مجدد برگرده.
دوست عزیز تست کنید
private int minute; private int total;
private void timer1_Tick(object sender, EventArgs e)
{
minute = DateTime.Now.Minute;
if (minute == total & MousePosition.X == px & MousePosition.Y == py&cValue ==cTotal )
{
timer1.Enabled = false;
Application.ExitThread();
}
else if (MousePosition.X != px & MousePosition.Y != py)
{
timer1.Enabled = false;
}
}
private void Form3_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == ' ')
{
cValue = '0';
}else
cValue= e.KeyChar;
}
private int px;
private int py;
private char cValue;
private char cTotal;
private void Form3_MouseMove(object sender, MouseEventArgs e)
{
if (minute >= total)
timer1.Enabled = false;
Application.ExitThread();
}
private void btnLogin_Click(object sender, EventArgs e)
{
//کدهای مربوط به لوگین نوشته شود اگر لوگین شود کدهای زیر اجرا شوند در غیر این صورت کدهای مربوط به شما اجرا شوند
px = MousePosition.X;
py = MousePosition.Y;
cTotal = cValue;
minute = DateTime.Now.Minute;
total = minute +5;
timer1.Enabled = true;
}
با این کد می تونی زمان اخرین ورودی (input) کاربر رو تعیین کنی، یعنی چند ثانیه از اخرین کلیک، حرکت موس یا دکمه صفحه کلید گذشته
بعد توی تایمر چک کن، اگر بیشتر از 5 دقیقه (یعنی 300 ثانیه) بود، خودت می دونی چیکار کنی
[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
{
public uint cbSize;
public int dwTime;
}
/// <summary>
/// Idle Time in seconds
/// </summary>
/// <returns></returns>
internal static double GetIdleTime()
{
var lii = new LASTINPUTINFO() { cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO)) };
GetLastInputInfo(ref lii);
var res2 = (Environment.TickCount - lii.dwTime) / 1000.0;
return res2;
}
این رو هم یادت نره
using System;
using System.Runtime.InteropServices;
با تشکر از کاربر mrbm_2007
[DllImport("user32.dll")] private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
{
public uint cbSize;
public readonly int dwTime;
}
internal static double GetIdleTime()
{
var lii = new LASTINPUTINFO() { cbSize = (uint)Marshal.SizeOf(typeof(LASTINPUTINFO)) };
GetLastInputInfo(ref lii);
var res2 = (Environment.TickCount - lii.dwTime) / 1000.0;
return res2;
}
private void timer1_Tick(object sender, EventArgs e)
{
var d = GetIdleTime();
Text =d.ToString(CultureInfo.InvariantCulture);
if (!(d >= 60)) return;
timer1.Enabled = false;
Application.ExitThread();
}
private void btnLogin_Click(object sender, EventArgs e)
{
//کدهای مربوط به لوگین نوشته شود اگر لوگین شود کدهای زیر اجرا شوند در غیر این صورت کدهای مربوط به شما اجرا شوند
timer1.Enabled = true;
}
راستش من از کدهای آخر هیچی سر در نیاوردم
یه چیز دیگه. من eventهای mousemove و keypress ی که توش کدهای ریست تایمر را قرار دادم اصلا عمل نمیکنه. یعنی وقتی موس تکون میخوره یا کلیدی زده میشه، اصلا سراغ این رویدادها نمیره که تایمر را ریست کنه