LockSetForegroundWindow

LockSetForegroundWindow

本文介绍了Win32 :: SetForegroundWindow()一直不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用通讯工具。消息传递窗口是整个应用程序的一部分。收到一些消息时,我需要将窗口转到最前面。我正在使用此代码:

I'm working on a messenging tool. The messaging window is part of a whole application. I need the window to go to the front when there are some messages coming. I'am using this code :

    if( m_hwnd == NULL || !::IsWindow(m_hwnd) )
        return E_UNEXPECTED;

    if(::IsIconic(m_hwnd))
    {
        ::ShowWindowAsync( m_hwnd, SW_RESTORE );
    }
    ::SetWindowPos(m_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_ASYNCWINDOWPOS | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
    ::SetForegroundWindow(m_hwnd);
    if( pvbProcessed != NULL )
        *pvbProcessed = VARIANT_TRUE;

    return S_OK;

我什至尝试进行TOPMOST,但在某些情况下仍然无法正常工作。
我也尝试了:: BringToFront()。

I even tried to do a TOPMOST but still in some cases it does not work.I also Tried a ::BringToFront().

任何人都可以帮助或解释为什么它不起作用?这是已知的Microsoft限制吗?

Anyone can help or give an explanation on why it doen not work ? Is it a known microsoft limitation.

推荐答案


  • 该进程为

  • 该过程由前台过程启动。

  • 该过程收到了最后一个输入事件。

  • 没有前台进程。

  • 正在调试前台进程。

  • 前台未锁定(请参见LockSetForegroundWindow)。

  • 前台锁定超时已到期(请参见SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT)。

  • 没有菜单处于活动状态。

  • The process is the foreground process.
  • The process was started by the foreground process.
  • The process received the last input event.
  • There is no foreground process.
  • The foreground process is being debugged.
  • The foreground is not locked (see LockSetForegroundWindow).
  • The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
  • No menus are active.

请参见。

这篇关于Win32 :: SetForegroundWindow()一直不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-03 16:54