C# 查找EXE窗口是否处于活动状态

C# 查找EXE窗口是否处于活动状态,c#,winforms,c#-2.0,C#,Winforms,C# 2.0,在我的一个项目中,当我运行exe并使其空闲时,我有一个不同的要求 (即不点击、最小、最大),一段时间(计时器)后应自动关闭。如果有人在特定时间之前单击,计时器必须在同一时间段内重置。 如何确定exe是否空闲?您可能需要查看该事件(注意:据我所知,仅适用于WinForms应用程序) 如果您将它与一个计时器结合使用,每当应用程序接收到输入时停止/重置计时器,这将为您提供所需的信息。公共类GlobalMouseHandler:IMessageFilter { public delegate

在我的一个项目中,当我运行exe并使其空闲时,我有一个不同的要求 (即不点击、最小、最大),一段时间(计时器)后应自动关闭。如果有人在特定时间之前单击,计时器必须在同一时间段内重置。
如何确定exe是否空闲?

您可能需要查看该事件(注意:据我所知,仅适用于WinForms应用程序)


如果您将它与一个计时器结合使用,每当应用程序接收到输入时停止/重置计时器,这将为您提供所需的信息。

公共类GlobalMouseHandler:IMessageFilter

{

    public delegate void EventHandlerForActiveState();

    public event EventHandlerForActiveState onActive;

    public event EventHandlerForActiveState onStateChanged;

    private const int WM_KEYDOWN = 0x100;

    //private const int WM_HSCROLL = 0x114;

    //private const int WM_VSCROLL = 0x115;        

    private const int WM_LBUTTONDOWN = 0x201;

    private const int WM_LBUTTONUP = 0x202;

    private const int WM_RBUTTONDOWN = 0x204;

    private const int WM_RBUTTONUP = 0x205;

    //private const int WM_MBUTTONDBLCLK = 0x209;

    private const int WM_MOUSEWHEEL = 0x20A;

    private const int WM_GETMINMAXINFO = 0x024;

    public bool PreFilterMessage(ref Message m)

    {

        if (m.Msg == 275)

        {

            return false;

        }

        switch (m.Msg)

        {

            case WM_LBUTTONDOWN:

                if (onActive != null)

                    onActive();

                break;

            case WM_LBUTTONUP:

                if (onActive != null)

                    onActive();

                break;

            case WM_RBUTTONDOWN:

                if (onActive != null)

                    onActive();

                break;

            case WM_RBUTTONUP:

                if (onActive != null)

                    onActive();

                break;

            case WM_MOUSEWHEEL:

                if (onActive != null)

                    onActive();

                break;

            //case WM_ACTIVATE:

            //    if (onActive != null)

            //        onActive();

            //    break;

            case WM_KEYDOWN:

                if (onActive != null)

                    onActive();

                break;

            case WM_GETMINMAXINFO:

                if (onStateChanged != null)

                    onStateChanged();

                break;



            //case WM_HSCROLL:

            //    if (onActive != null)

            //        onActive();

            //    break;

            //case WM_VSCROLL:

            //    if (onActive != null)

            //        onActive();

            //    break;

        }

        return false;

    }

}
GlobalMouseHandler handle=新的GlobalMouseHandler(); handle.onActive+=新的GlobalMouseHandler.EventHandlerForActiveState(handle\u onActive); Application.AddMessageFilter(句柄);
我使用了这个类并完成了此操作。

嗨,rob,谢谢你的回复,实际上我使用了一些非托管代码并实现了它。我将在这里发布它。谢谢,我刚刚更改了你的编辑,你在问题主体中添加了“winforms”,改为将其添加为标记。它更有用地放在那里,并将帮助其他人找到这个问题和它的答案=)错过了一些。检查