0

バックグラウンドでウィンドウを最大化する必要があります。つまり、ウィンドウをアクティブ化(フォーカス)せずに実行する必要があります。SetWindowPlacement関数はこれを提供しません。何かアイデアはありますか?

        WINDOWPLACEMENT wp = new WINDOWPLACEMENT();
        GetWindowPlacement(hwnd, ref wp);

        wp.showCmd = 3;
        SetWindowPlacement(hwnd, ref wp);
4

3 に答える 3

1

これを行うための最良の方法は (VB 申し訳ありません!) でした。

longForeHWnd = GetForegroundWindow
Call ShowWindow(longBackHWnd, SW_SHOWMAXIMIZED)
SetForegroundWindow (longForeHWnd)

バックグラウンド ウィンドウが (短時間) アクティブになり、Z オーダーが昇格されるため、これは単なる回避策です。

于 2013-11-11T21:47:29.983 に答える
1

http://www.pinvoke.netの定義を使用してこれを試してください:

WINDOWPLACEMENT placement;
if (GetWindowPlacement(hWnd, out placement))
{
    if ((GetWindowLong(hWnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) == 0)
    {
        var l = GetWindowLong(hWnd, GWL_STYLE);
        SetWindowLong(hWnd, GWL_STYLE, (l | WS_MAXIMIZE) & (~WS_MINIMIZE));
        var maxPos = placement.MaxPosition;
        SetWindowPos(hWnd, IntPtr.Zero, maxPos.X, maxPos.Y, 0, 0, SetWindowPosFlags.AsynchronousWindowPosition | SetWindowPosFlags.DoNotActivate | SetWindowPosFlags.FrameChanged | SetWindowPosFlags.IgnoreResize | SetWindowPosFlags.IgnoreZOrder);
    }
}

コツは、SetWindowLong でウィンドウの状態を変更し、SetWindowPosFlags.FrameChanged で再描画することです。あなたの場合、SetWindowPosFlags.DoNotActivate を使用します。

于 2014-04-27T08:58:55.360 に答える
-1

Windowsロード時に以下のコードを使用してください

    private void Form1_Load(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Maximized;

    }

これにより、ウィンドウが最大化されます

于 2012-11-17T14:42:17.550 に答える