3

私の .NET アプリはバックグラウンドで実行されており、時々フォームを作成して表示します。フォームは他のすべてのウィンドウの上に表示されますが、フォーカスはありません。

私の最初のアプローチは、フォームの TopMost プロパティを設定することでしたが、多くの場合、説明できない理由で失敗します。

次に、Shown イベント ハンドラーで BringToFront を呼び出してみましたが、何もしませんでした。

また、BringWindowToTop API を試してみたところ、true (= 成功) が返されましたが、結果はありませんでした。

今、私は SetForegroundWindow で立ち往生しています。

任意の提案をいただければ幸いです。

(また、問題なくフォーカスを盗むことができるのは普通ですか?)

4

1 に答える 1

2

これはあなたを助けるかもしれません:

[DllImport("user32.dll")]
public static extern bool SetWindowPos (IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
void Exmpl() {
    IntPtr HWND_TOPMOST = new IntPtr(-1);
    uint SWP_NOACTIVATE = 0x0010;
    uint SWP_NOMOVE = 0x0002;
    uint SWP_NOSIZE = 0x0001;
    SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
于 2012-08-22T17:40:19.633 に答える