0

アプリケーションがいつビジーか、いつアイドル状態かを確認する簡単な方法が必要です。いくつかの検索を行った後、人々が提案した2つの方法を見つけました。1 つは GetLastInputInfo 関数で、もう 1 つは Application.Idle です。

システムの非アクティブではなく、アプリケーションの非アクティブを検出したいだけです。そこで、Application.Idle を使用する予定です。しかし、アプリケーションが再びアクティブになったときにイベントをトリガーするにはどうすればよいでしょうか? Idle イベントでタイマーを開始していますが、他の関数でそれをリセットしたいと考えています。

どんな助けでも大歓迎です。

私のイベントハンドラ:

void Application_Idle(object sender, EventArgs e)
{
    System.Timers.Timer aTimer = new System.Timers.Timer(5000);
    aTimer.Elapsed += aTimer_Elapsed;
    aTimer.Enabled = true;
}
4

1 に答える 1

1

IMessageFilter.PreFilterMessage メソッドを使用して、アプリケーションをアイドル状態から「復帰」させる UI イベントを探すことを検討してください。以下の例は、私が VB で書いたアプリケーションのものですが、原理は同じです。

メッセージをフィルタリングして、「ウェイク」を意味するアクションを判断することもできます。たとえば、マウスオーバーはカウントされますか? それとも、マウスのクリックとキーの押下のみですか?

Dim mf As New MessageFilter
Application.AddMessageFilter(mf)

...

Imports System.Security.Permissions

Public Class MessageFilter
    Implements IMessageFilter

    <SecurityPermission(SecurityAction.LinkDemand, Flags:=SecurityPermissionFlag.UnmanagedCode)>
    Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean Implements IMessageFilter.PreFilterMessage

        ' optional code here determine which events mean wake

        ' code here to turn timer off

        ' return false to allow message to pass
        Return False

    End Function

End Class

参照: https://msdn.microsoft.com/en-us/library/system.windows.forms.imessagefilter.prefiltermessage(v=vs.100).aspx

于 2015-12-02T16:02:24.417 に答える