我有一个winforms应用程序,每次从外部应用程序返回时都必须执行操作(即焦点已从我的应用程序丢失,alt-tabbing到另一个程序然后返回)。
是否有应用程序事件处理程序?
我已经查看了Form的activate和deactive处理程序,但是当我的表单从自身获得焦点时(关闭消息框或关闭子表单时),这些处理程序也会被触发。
答案 0 :(得分:3)
Windows在激活窗口时将WM_ACTIVATEAPP
message发送到窗口,并在其停用时发送。所以这就是你想要处理的,特别是当wParam
为TRUE
时(表示激活)。
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
}
}
答案 1 :(得分:0)
我只想设置一个bool值,你可以锁定读/写部分,以确保只调用一次动作。