2009-08-21 13 views
3

Windows C#アプリケーションを使用して、他のすべてのアプリケーションの前面にフォームを強制的に押し込む強力な方法は何ですか?真フォームを強制的に前面に移動させる強力な方法は何ですか?

+2

私はあなたの「パワフルな」使用に興味を持っています...「強力な」持ち運びが必要な理由を推測できますか? – jrista

+8

私はあなたのアプリケーションが自分自身を前面に持って来ることを望んでいません。それは窓の中で私の第1位のペットです。あなたが望むすべてのタスクバーを点滅させますが、もしあなたがフォーカスを取れば... –

+0

@prista、私はすでにTopmost = trueを使っているので、powefullという言葉を使いました。しかし、まだいくつかのサードパーティのアプリケーションがこのフォームをオーバーライドしているため、このフォームが遅れています。 – Anuya

答えて

1

利用SetWindowsPos()API関数ここ

7

設定Form.TopMostは力強く、タスクバーでアプリケーションウィンドウのアイコンをクリックして、ユーザーを強制します。

+0

既にTopmost = trueを使用して試してみました。しかし、まだいくつかのサードパーティのアプリケーションがこのフォームをオーバーライドしているため、このフォームが遅れています。 このフォームを使用する目的は、ユーザーが他のアプリケーションを表示するのをブロックすることです。 – Anuya

+1

さて、フォームをオーバーライドする他のアプリについてのそのステートメントへの応答として。おそらく、 "Topmost = true"をオーバーライドする方法や "this.bringToFront();をオーバーライドする方法" C#で...おそらく、これらのサードパーティのアプリケーションがそれを行う方法です。 私のロジックは...あなたと同じようにすれば、フォームを前面に持っていくことができるはずです。自分のフォームも上書きするからです。 –

15

+0

いいえ、フォームは自動的にユーザーをブロックするために表示されるので、クリックすることなく単独で行うことができます – Anuya

+0

+1ユーザーフレンドリーな教え#1! :D – jrista

+0

+69私たちは何時間もこれを修正しようとしていました。ありがとうございました。 –

5

this.BringToFront();

いいです。

+0

これはコード化する必要があります(マークアップの意味)。 –

+0

リマインダーに感謝します。完了しました。 –

6

は私のために働いていたコードです:

using System; 
using System.Runtime.InteropServices; 
using System.Windows.Forms; 

namespace LicenseManager { 

    public static class WinApi { 

    [DllImport("user32.dll")] 
    static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); 

    static private IntPtr HWND_TOPMOST = new IntPtr(-1); 

    private const uint SWP_NOSIZE = 0x0001; 
    private const uint SWP_NOMOVE = 0x0002; 

    static public void MakeTopMost(Form f) { 
     SetWindowPos(f.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 
    } 

    } 
} 
+1

明らかに、名前空間の名前を変更します。 –

+0

これは、実際に指のかぶりに応答するのではなく、書かれた質問に実際に答える数少ない回答の1つと思われる。 –

1

は有用である可能性があるこれについてのいくつかのより多くの情報。私は、form.loadイベントハンドラの "MakeTopMost"関数を呼び出すことで、私のwinformsアプリケーションを最上位にするためにCharles Jenkinsの答えを使用しました。 winformsアプリケーションがMSIインストールで起動され、Windowsインストーラのプログレスバーが上に表示されるので、この関数が必要でした。

ただし、メインフォームを表示する他のサブフォームの上部にメインフォームを配置します。これを回避するには、Form.shownイベントハンドラで関数MakeWindowNormalを呼び出して、メインフォームを通常のウィンドウとして戻し、ロードしてアクティブ化したWindowsインストーラの進行状況バーの前に表示します(イベントの場合はhttp://msdn.microsoft.com/en-us/library/86faxx0d(v=vs.110).aspxを参照)。注文)。これにより、サブフォーム(およびユーザーが移動する場合は他のウィンドウ)がメインフォームの前に移動できるようになります。

static public void MakeWindowNormal(Form f) 
{ 
    SetWindowPos(f.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 
} 
関連する問題