2

我有一个 winforms 应用程序,每次从外部应用程序返回时都必须执行一个操作(即我的应用程序已经失去焦点,alt-tabbing 到另一个程序然后返回)。

是否有为此的应用程序事件处理程序?

我已经查看了表单的激活和停用处理程序,但是当我的表单从自身接收到焦点时(关闭消息框或关闭子表单时),这些处理程序也会被触发。

4

2 回答 2

3

Windows 在窗口被激活和被停用时将WM_ACTIVATEAPP消息发送到窗口。所以这就是你想要处理的,特别是什么时候wParamTRUE表示激活)。

WinForms 不会将其包装为事件(至少我不知道),因此您需要手动将代码添加到表单的窗口过程:

public class MyForm : Form
{
    // other code

    protected override void WndProc(ref Message m)
    {
        const int WM_ACTIVATEAPP = 0x001C;
        switch (m.Msg)
        {
            case WM_ACTIVATEAPP:
            {
                if (m.WParam.ToInt32() != 0)
                {
                    // Your application's window is being activated, so
                    // do whatever it is you want. Or raise an event.
                    ...
                }
                break;
            }
        }
        base.WndProc(ref m);  // proceed with default processing
    }
}
于 2013-08-07T15:41:58.730 回答
0

我只想设置一个布尔值,您可以锁定读/写部分以确保该操作仅被调用一次。

于 2013-08-07T14:30:36.833 回答