相关疑难解决方法(0)

Win32 :: SetForegroundWindow()不能一直工作

我正在研究一种消息传递工具.消息传递窗口是整个应用程序的一部分.当有一些消息传来时,我需要窗口转到前面.我正在使用这段代码:

    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;
Run Code Online (Sandbox Code Playgroud)

我甚至试图做一个TOPMOST但仍然在某些情况下它不起作用.我还尝试了:: BringToFront().

任何人都可以帮助或解释为什么它不起作用?这是一个已知的微软限制.

c++ windows winapi visual-studio-2010

6
推荐指数
2
解决办法
4579
查看次数

始终位于顶部的批处理脚本

我创建了一个简单的批处理脚本来使用以下代码伪锁定计算机:

@ECHO OFF & setlocal ENABLEDELAYEDEXPANSION
setlocal EnableDelayedExpansion
color a
TITLE Lock
if not "%1" == "max" (
powershell -command "& { $x = New-Object -ComObject Shell.Application; $x.minimizeall() }"
start /MAX cmd /c %0 max & exit/b
)
:Lock 
echo Please enter a password to lock your computer . . .
powershell -Command $pword = read-host "Enter password" -AsSecureString ; $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword) ; [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) > EOFlock.txt & set /p Pass1=<EOFlock.txt & del EOFlock.txt
TITLE Lock
taskkill /IM explorer.exe /F >nul
cls …
Run Code Online (Sandbox Code Playgroud)

powershell batch-file

1
推荐指数
1
解决办法
5153
查看次数