PDA

View Full Version : سوال: مدت زمان بیکاری نرم افزار



forodo007
پنج شنبه 02 مرداد 1393, 18:48 عصر
سلام من یه برنامه میخوام بنویسم که محاسبه کته چقدر است که کاربر از نرم افزار (application ) استفاده نکرده (کلیک نکرده و یا به فرم دیگری نرفته است و ....)
میدونم با تایمر ممنون میشم کد بزارین واسم

juza66
پنج شنبه 02 مرداد 1393, 19:08 عصر
این تایپیک
http://barnamenevis.org/showthread.php?438401-Minimize-%D8%B4%D8%AF%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%A8%D8%B9%D8%AF-%D8%A7%D8%B2-%D9%85%D8%AF%D8%AA-%D8%B2%D9%85%D8%A7%D9%86-%D8%A8%DB%8C%DA%A9%D8%A7%D8%B1%DB%8C-%D9%85%D8%B9%DB%8C%D9%86%DB%8C

و این تایپیک
http://barnamenevis.org/showthread.php?462115-%D9%85%D8%AF%D8%AA-%D8%B2%D9%85%D8%A7%D9%86-%D8%A8%DB%8C%DA%A9%D8%A7%D8%B1%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1

کد ویبی دات نت بود خود دیگه تبدیلش کن


Public Class Form1
Implements IMessageFilter
Public Sub New()
InitializeComponent()
Application.AddMessageFilter(Me)
Timer1.Enabled = True
End Sub
Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage

If (m.Msg >= &H100 And m.Msg <= &H109) Or (m.Msg >= &H200 And m.Msg <= &H20E) Then
Timer1.Stop()
Timer1.Start()
End If
End Function
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Timer1.Stop()
Application.Exit()
End Sub
End Class

forodo007
پنج شنبه 02 مرداد 1393, 19:13 عصر
من که نفهمیدم

abbas.oveissi
پنج شنبه 02 مرداد 1393, 22:09 عصر
من که نفهمیدم
لینک تاپیک هایی را که آقای juza66 براتون قرارداده رو مطالعه کردید ؟؟ جواب توی همین لینک ها بود.
در کل اگر بخوام ساده بگم اینه توی ویندوز همه چی Window هست و هر Window یک Message Quere یا صف پیام ها داره که ویندوز برای تعامل با اون Message هارو توی صف این Window قرار میده تا پردازش بشوند.مثلا وقتی با موس روی فرم کلیک میکنید یک Message به صف پیام های اون Form ارسال میشه و برنامه متوجه میشه که بر روی آن کلیک شده.با اومدن هر Message وظیفه متد WndProc بررسی اون هست تا متناسب با اون عکس العمل نشون بده.حالا شما باید در هر فرم این متد را Override کنید تا بتونید به Messageهایی که میرسه دسترسی داشته باشه.
حالا اگر Message برسه یعنی اینکه کاربر داره با برنامه شما کار میکنه و اگر پیامی بعد 60 ثانیه نرسه میتونید به این عنوان حساب کنید که کاربر به برنامه شما کاری ندارد.

forodo007
جمعه 03 مرداد 1393, 15:08 عصر
نمیشه حالا یه کد سی شارپی بزارین تا متوجه بشم!!!!! اون سایت ها هم که خیلی به دردم نخورد

systam
جمعه 03 مرداد 1393, 15:31 عصر
نمیشه حالا یه کد سی شارپی بزارین تا متوجه بشم!!!!! اون سایت ها هم که خیلی به دردم نخورد
سلام برو توی سایت سایت کد برنامه رو تبدیل کن (http://www.carlosag.net/tools/codetranslator/)

forodo007
جمعه 03 مرداد 1393, 15:47 عصر
public Form1() {
InitializeComponent();
Application.AddMessageFilter(IMessageFilter);
timer1.Enabled = true;
}




public bool PreFilterMessage(ref Message m)
{
if ((((m.Msg >= 256)
&& (m.Msg <= 265))
|| ((m.Msg >= 512)
&& (m.Msg <= 526))))
{
timer2.Stop();
timer2.Start();
}
}
این تبدیلش بود ولی error داره

forodo007
جمعه 03 مرداد 1393, 15:49 عصر
خط 3 و 5 error داره

danialafshari
جمعه 03 مرداد 1393, 22:22 عصر
با سلام
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
[DllImport("User32.dll")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
public static uint GetIdleTime()
{
LASTINPUTINFO lastInPut = new LASTINPUTINFO();
lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeO f(lastInPut);
GetLastInputInfo(ref lastInPut);
return ((uint)Environment.TickCount - lastInPut.dwTime);
}


public Form1()
{
InitializeComponent();
}

private void timer1_Tick(object sender, EventArgs e)
{
label1.Text =(GetIdleTime()/1000).ToString();
}
}
}




موفق باشید

forodo007
یک شنبه 05 مرداد 1393, 23:50 عصر
این کد فقط خود برنامه رو چک نمیکنه یعنی اگه من تو برنامه word لاشم و از برنامه استفاده نکنم هم باید مدت زمان رو حساب کته در حالی که الان وقتی تو یه برنامه دیگه هسنم باز انگار برنامه فعاله؟؟؟//

abbas.oveissi
دوشنبه 06 مرداد 1393, 01:07 صبح
این کد فقط خود برنامه رو چک نمیکنه یعنی اگه من تو برنامه word لاشم و از برنامه استفاده نکنم هم باید مدت زمان رو حساب کته در حالی که الان وقتی تو یه برنامه دیگه هسنم باز انگار برنامه فعاله؟؟؟//

من یک نمونه پروژه درست کردم.اگر دوست داشتید یک نگاه بهش بندازید.یک تایمر گذاشتم که اگر مثلا 30 ثانیه هیچ کاری در برنامه انجام نشه بعد تازه شروع میکنه زمان رو حساب کنه.
شرط فیلتر هارو رو هم کلی گرفتم،اگر بخواید میتونید خودتون Rangeشو عوض کنید.

forodo007
دوشنبه 06 مرداد 1393, 01:20 صبح
کیشه یه توضیح راجبه 256 ,... این عددا چین؟

abbas.oveissi
دوشنبه 06 مرداد 1393, 01:36 صبح
کیشه یه توضیح راجبه 256 ,... این عددا چین؟
پیام های تو ویندوز هر کدوم یک ID دارند که میشه از این طریق تشخیص داد که این پیام چیست . در این لینک (http://msdn.microsoft.com/en-us/library/windows/desktop/ff468877(v=vs.85).aspx) اسم پیام های مختلف مرتبط با موس نوشته شده است.مثلا زمانی که روی فرم کلیک کنید یک پیام به اسم WM_LBUTTONDOWN به فرم ارسال میشه که ID اون 0x0201 هست.
برنامه درست کار کرد ؟

forodo007
دوشنبه 06 مرداد 1393, 01:54 صبح
بله مرسی کاش یه تاپیکش کنی که همه استفاده کنن

abbas.oveissi
دوشنبه 06 مرداد 1393, 02:32 صبح
بله مرسی کاش یه تاپیکش کنی که همه استفاده کنن
احتمالا پاکش میکنند، به دلیل تکراری بودن :لبخند:

یکم بهترش کردم ، اینم عکسش :
121630

forodo007
دوشنبه 06 مرداد 1393, 13:07 عصر
خیلی جالب بود این به در ده این میخوره که مسه وب سشن بزاری یعنی بعد 1 دقیقه یه فرم لاگین بیاد و از کاربر بخواد لاگین کنه