Application Idle

M

MDB

Hello All, I am trying to create a timer using the OpenNetCf to find out
when the application is on idle and have been having some problems. I have
found some example code using VB
(http://wiki.opennetcf.org/ow.asp?AppIdleTimer) however I am using C#. Here
is what my code looks like. Does anyone see what I am doing wrong?
using IMessageFilter = MyApp.AppIdleTimer;

CLASS:

public class AppIdleTimer
{

public delegate void TimeoutDelegate();
public event TimeoutDelegate AppTimeOut;
private System.Windows.Forms.Timer m_timer = new
System.Windows.Forms.Timer();

public void New(int TimeoutInterval)
{
m_timer.Tick +=new EventHandler(m_timer_Tick);
m_timer.Interval = TimeoutInterval;
m_timer.Enabled = true;
}

private void m_timer_Tick(object sender,EventArgs e)
{
AppTimeOut();
Application.DoEvents();
}

private void Dispose()
{
m_timer.Enabled = false;
}

OpenNETCF.Windows.Forms.IMessageFilter.PreFilterMessage
public void PreFilterMessage(ref Microsoft.WindowsCE.Forms.Message m)
{
switch(m.Msg.ToString())
{
case "&H200":
case "&H201":
case "&H202":
case "&H203":
case "&H204":
case "&H205":
case "&H206":
case "&H207":
case "&H208":
case "&H209":
case "&H100":
case "&H101":
case "&H102":
case "&H103":
case "&H104":
case "&H105":
case "&H106":
case "&H107":
case "&H108":
{
m_timer.Enabled = false;
m_timer.Enabled = true;
break;
}
}
}
}


INSIDE THE MAIN

AppIdleTimer appIdle = new AppIdleTimer();
appIdle.New(10000);
appIdle.AppTimeOut += new
MyApp.AppIdleTimer.TimeoutDelegate(appIdle_AppTimeOut);

*** Getting This Error
***The best overloaded method match for
'OpenNETCF.Windows.Forms.ApplicationEx.AddMessageFilter(OpenNETCF.Windows.Fo
rms.IMessageFilter)' has some invalid arguments
***Here

ApplicationEx.AddMessageFilter(appIdle);
ApplicationEx.Run();




private void appIdle_AppTimeOut()
{
MessageBox.Show("TimeOut");
}
 
D

Daniel Bass

Hey there,

I've done something similar for a user logging in and out of a device, below
is the code I used:

//------------------------------------------------------------------------------------------
[MESSAGEFILTER.CS]

using System;
using System.Windows.Forms;
using OpenNETCF.Windows.Forms;
using Microsoft.WindowsCE.Forms;

namespace MyApp
{
/// <summary>
/// Summary description for MessageFilter.
/// </summary>
public class MessageFilter : IMessageFilter
{
// resst the time out for user log-ins
public bool PreFilterMessage(ref Message m)
{
if ( m.Msg != 275 ) // message of time out event
AppData.m_timeOfLastAction = DateTime.Now;

return false;
}
}
}


//------------------------------------------------------------------------------------------
[APPDATA.CS]

using System;

namespace MyApp
{
/// <summary>
/// Summary description for AppData.
/// </summary>
public class AppData
{

public static DateTime m_timeOfLastAction = DateTime.Now;

//
// other public global data and constants here

}
}

//------------------------------------------------------------------------------------------
[FORM1.CS - snippet]
static void Main()
{
try
{

MessageFilter msgFlter = new MessageFilter();
ApplicationEx.AddMessageFilter ( msgFlter );
ApplicationEx.Run(new FormMain());
}
catch ( Exception ex )
{
MessageBox.Show ( "Unhandled Exception occurred... " +
ex.Message, "Error" );
}
}

//
// other stuff
//

private System.Windows.Forms.Timer timerSessionExpires;

TimeSpan timeExpiry = TimeSpan.FromMinutes ( 30.0 );

private void timerSessionExpires_Tick(object sender,
System.EventArgs e)
{
if ( !AppData.m_bLoggedIn ) // flag in AppData
{
AppData.m_timeOfLastAction = DateTime.Now;
return;
}

if ( DateTime.Now.Subtract ( timeExpiry ) >
AppData.m_timeOfLastAction )
{
//
// current session has expired, user needs to log in again

AppData.LogOut(); // implemented in AppData

AppData.m_timeOfLastAction = DateTime.Now;
}

}

//
// other stuff
//

//------------------------------------------------------------------------------------------


The first main difference in you version and mine is your PreFilterMessage
is inclusive, where as mine is exclusive, since I know the event message
number of the timer that's checking my last action, I exclude it.
The second is my object for message filtering is minimul in content and I
leave the working out time bits to the main form.

Hope that helps.

Daniel.
 
M

MDB

Thanks, I will try it out.


Daniel Bass said:
Hey there,

I've done something similar for a user logging in and out of a device, below
is the code I used:

//--------------------------------------------------------------------------
----------------
[MESSAGEFILTER.CS]

using System;
using System.Windows.Forms;
using OpenNETCF.Windows.Forms;
using Microsoft.WindowsCE.Forms;

namespace MyApp
{
/// <summary>
/// Summary description for MessageFilter.
/// </summary>
public class MessageFilter : IMessageFilter
{
// resst the time out for user log-ins
public bool PreFilterMessage(ref Message m)
{
if ( m.Msg != 275 ) // message of time out event
AppData.m_timeOfLastAction = DateTime.Now;

return false;
}
}
}


//--------------------------------------------------------------------------
----------------
[APPDATA.CS]

using System;

namespace MyApp
{
/// <summary>
/// Summary description for AppData.
/// </summary>
public class AppData
{

public static DateTime m_timeOfLastAction = DateTime.Now;

//
// other public global data and constants here

}
}

//--------------------------------------------------------------------------
----------------
[FORM1.CS - snippet]
static void Main()
{
try
{

MessageFilter msgFlter = new MessageFilter();
ApplicationEx.AddMessageFilter ( msgFlter );
ApplicationEx.Run(new FormMain());
}
catch ( Exception ex )
{
MessageBox.Show ( "Unhandled Exception occurred... " +
ex.Message, "Error" );
}
}

//
// other stuff
//

private System.Windows.Forms.Timer timerSessionExpires;

TimeSpan timeExpiry = TimeSpan.FromMinutes ( 30.0 );

private void timerSessionExpires_Tick(object sender,
System.EventArgs e)
{
if ( !AppData.m_bLoggedIn ) // flag in AppData
{
AppData.m_timeOfLastAction = DateTime.Now;
return;
}

if ( DateTime.Now.Subtract ( timeExpiry ) >
AppData.m_timeOfLastAction )
{
//
// current session has expired, user needs to log in again

AppData.LogOut(); // implemented in AppData

AppData.m_timeOfLastAction = DateTime.Now;
}

}

//
// other stuff
//

//--------------------------------------------------------------------------
----------------


The first main difference in you version and mine is your PreFilterMessage
is inclusive, where as mine is exclusive, since I know the event message
number of the timer that's checking my last action, I exclude it.
The second is my object for message filtering is minimul in content and I
leave the working out time bits to the main form.

Hope that helps.

Daniel.



MDB said:
Hello All, I am trying to create a timer using the OpenNetCf to find out
when the application is on idle and have been having some problems. I
have
found some example code using VB
(http://wiki.opennetcf.org/ow.asp?AppIdleTimer) however I am using C#.
Here
is what my code looks like. Does anyone see what I am doing wrong?
using IMessageFilter = MyApp.AppIdleTimer;

CLASS:

public class AppIdleTimer
{

public delegate void TimeoutDelegate();
public event TimeoutDelegate AppTimeOut;
private System.Windows.Forms.Timer m_timer = new
System.Windows.Forms.Timer();

public void New(int TimeoutInterval)
{
m_timer.Tick +=new EventHandler(m_timer_Tick);
m_timer.Interval = TimeoutInterval;
m_timer.Enabled = true;
}

private void m_timer_Tick(object sender,EventArgs e)
{
AppTimeOut();
Application.DoEvents();
}

private void Dispose()
{
m_timer.Enabled = false;
}

OpenNETCF.Windows.Forms.IMessageFilter.PreFilterMessage
public void PreFilterMessage(ref Microsoft.WindowsCE.Forms.Message m)
{
switch(m.Msg.ToString())
{
case "&H200":
case "&H201":
case "&H202":
case "&H203":
case "&H204":
case "&H205":
case "&H206":
case "&H207":
case "&H208":
case "&H209":
case "&H100":
case "&H101":
case "&H102":
case "&H103":
case "&H104":
case "&H105":
case "&H106":
case "&H107":
case "&H108":
{
m_timer.Enabled = false;
m_timer.Enabled = true;
break;
}
}
}
}


INSIDE THE MAIN

AppIdleTimer appIdle = new AppIdleTimer();
appIdle.New(10000);
appIdle.AppTimeOut += new
MyApp.AppIdleTimer.TimeoutDelegate(appIdle_AppTimeOut);

*** Getting This Error
***The best overloaded method match for
'OpenNETCF.Windows.Forms.ApplicationEx.AddMessageFilter(OpenNETCF.Windows.Fo
rms.IMessageFilter)' has some invalid arguments
***Here

ApplicationEx.AddMessageFilter(appIdle);
ApplicationEx.Run();




private void appIdle_AppTimeOut()
{
MessageBox.Show("TimeOut");
}
 
Top