3

WinXP 用の SetForegroundWindow API を使用して、カーソルの下のウィンドウを前面に表示するコードがあります。Vista 用にテストしてきましたが、API が正しく機能しなくなったようです。

AllowSetForeground は役に立ちませんでした。私のプロセスはバックグラウンド プロセスです。

これを達成するために何を使用できますか?

4

7 に答える 7

7

次のコードを試して、うまくいくかどうかを確認してください。

SetWindowPos(WndHandle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);
SetWindowPos(WndHandle,HWND_NOTOPMOST,0,0,0,0,SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE);
于 2009-02-10T21:24:12.327 に答える
1

現在のスレッドをスリープ状態に設定することで、前に非最上位に設定するとともに、私のためにそれを行いました:

OS.SetWindowPos(handle, OS.HWND_NOTOPMOST, 0, 0, 0, 0, OS.SWP_NOMOVE | OS.SWP_NOSIZE);
try {
    Thread.sleep(100);
} catch (InterruptedException e) {
    LOG.error("sleeping thread was interrupted", e);
}
OS.SetWindowPos(handle, OS.HWND_TOPMOST, 0, 0, 0, 0, OS.SWP_NOMOVE | OS.SWP_NOSIZE);
于 2014-04-02T06:41:05.883 に答える
1

MFC を使用している場合、これは Windows 7 x64 で機能しました。

    RECT rc;
    m_pMainWnd->GetWindowRect(&rc);

    int nBoxWidth = rc.left-rc.right;
    int nBoxHeight = rc.bottom-rc.top;
    int nBoxTop = rc.top;
    int nBoxLeft = rc.left;

    SetWindowPos(m_pMainWnd->GetSafeHwnd(), HWND_TOPMOST,
                    nBoxLeft, nBoxTop, nBoxWidth, nBoxHeight,
                    SWP_NOMOVE || SWP_NOSIZE);
    SetWindowPos(m_pMainWnd->GetSafeHwnd(), HWND_NOTOPMOST,
                    nBoxLeft, nBoxTop, nBoxWidth, nBoxHeight,
                    SWP_SHOWWINDOW || SWP_NOMOVE || SWP_NOSIZE);
于 2010-09-16T07:02:28.333 に答える
1

SetForegroundWindow()失敗した場合は、ウィンドウWS_EX_TOPMOSTを設定してから、呼び出した直後に一番上以外を試しましたSetForegroundWindow()か?

これは、思いがけないときにアプリケーションがいたるところに飛び出していることに正当に不満を言う人々と関係があるかもしれません。

于 2009-02-10T21:25:01.840 に答える
0

警告:それを行うためのパブリックAPI(SetForegroundWindow)がありましたが、ウィンドウがフォアグラウンドに表示されなくなりました。

これで、ウィンドウが点滅します。

しかし、これには理由がありました。これを行うアプリケーションは、現在のウィンドウからフォーカスを「盗み」(多くの場合、正当な理由がない場合)、あらゆる種類の問題を引き起こす可能性があります。

したがって、この種の動作に対するOSによる保護を回避する前に、ユーザーを煩わせないようにしてください。自問してみてください。「アプリケーションがバックグラウンドにある場合でも、本当にユーザーの顔に飛びつく必要がありますか?」

于 2009-02-11T09:28:25.923 に答える
0
VOID SwitchToThisWindow(HWND hWnd, BOOL fAltTab);

XP から Windows 7 で動作 http://msdn.microsoft.com/en-us/library/ms633553.aspx

于 2009-02-10T21:33:22.430 に答える
-3

Windows Powertoys Tweakuiプログラムを使用して、フォーカスの許可の状態を変更します。

[一般]、[フォーカス]の順に選択し、チェックボックスをオフにして、他のプログラムがフォーカスを取得できるようにします。

これは、全員の提案が機能していないように見える場合に機能します(実際にはすべて機能します)。

マイクロソフトは、無限の知恵で、setforegrondwindowなどへの呼び出しからの応答がnullになることを決定しました。

彼らはあなたがまだtweakuiによって元に戻ることができるtjatと言うことを気にしませんでした!!!!

楽しい.....

于 2011-04-14T07:09:27.500 に答える