2012-02-27 9 views
0

アプリケーションのボタンをクリックするだけで、いくつかのウィンドウ(IEウィンドウ、Outlookメールウィンドウ、メモ帳ウィンドウ)を開きたいとします。別のアプリケーションの背後にあるウィンドウを開く

問題:ボタンをクリックすると、これらすべてのアプリケーションが順番に開きます。自分のアプリケーション(ユーザーがクリックした)はウィンドウの乱れで失われます。

アプリケーションの背後にあるこれらのウィンドウをすべて開きたいとします。助言がありますか ?この種の動作を実現するために使用できる標準APIはどれですか?

ロジック:ウィンドウのZ順にウィンドウ配置= 2の開いたウィンドウのようにしたい。この方法では、他のウィンドウが開いているときに、アクティブな私のウィンドウは常にトップ(zオーダー= 1)になります。

すべてのポインタが役立ちます。

おかげ

Karephul

UPDATE:私は最上位としての私のアプリケーションウィンドウを設定するには、こののPInvokeを使用 http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx 。他のすべてのウィンドウが自動的にその背後に開きます。完了したら、同じPInvokeを使用して一番上のウィンドウフラグを解除しました。私が投稿したリンクの詳細。

答えて

1

フォームのTopMostプロパティをTrueに設定できます。

ユーザーに迷惑をかけることがあるため、ユーザーがこれを変更できるようにするか、短期間のみ行うようにしてください。

0

あなたが好き以上に煩わしいかもしれませんが、オフィスアプリケーションやファイルを開いた後、あなたが

MessageBox.Show("All files have been opened.") 

を発行することができ、このアプリを持参する必要があること、いくつかのオフィスの相互運用をしながら、私が偶然発見(とメッセージボックス)。

+0

これは、デスクトップ上のすべてのウィンドウを点滅します。それは親切な迷惑なものです。 – karephul

1

win32コマンドのSetForgroundWindowを呼び出す方法と、最上位を切り替える方法の2つがあります。


トップトグルで切り替えるには、次の操作を行います。これはウィンドウを前面に持っていきますが、一番上に置かないでください。これはかなり面倒です。 Win32のコマンド

[DLLIMPORT( "user32.dllの")] を呼び出すために

// Launch applications (Process.Start(...)) 
TopMost = true; 
TopMost = false; 

[リターン:MarshalAs(UnmanagedType.Bool)] 静的にexternブールSetForegroundWindow(のIntPtr hWndは);

... 

// Launch applications (Process.Start(...)) 
SetForegroundWindow(this.Handle); 

... 
+0

私は "SetWindowPos" P/Invoke呼び出しを使用して終了します。 SetForeGroundWindowは私が使っていたものですが、その派手な効果があります。新しいウィンドウが始まります..それは先に来るでしょうし、あなたのアプリにSetForeGroundが来るでしょう。それが10人の未亡人のために起これば、上に来ます。混乱を想像してください。 – karephul

0

あなたはSystem.Diagnostics.ProcessクラスProcessStartInfoクラスを使用して、パラメータとして上書き方法Start(ProcessStartInfo startInfo)にそれを渡す立ち上げたときに、プロセスの状態のためのアプリケーション変数を設定することができStart方法を使用している場合。プロパティProcessStartInfoがあります。ウィンドウの種類はProcessWindowStyleで、値はNormal、Hidden、Minimized、Maximizedの4つです。値をMinimizedに設定すると、フォーカスを取り戻して前面に簡単に移動できます。

MSDN

からコード
// Uses the ProcessStartInfo class to start new processes, 
    // both in a minimized mode. 
    void OpenWithStartInfo() 
    { 
     ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe"); 
     startInfo.WindowStyle = ProcessWindowStyle.Minimized; 

     Process.Start(startInfo); 

     startInfo.Arguments = "www.northwindtraders.com"; 

     Process.Start(startInfo); 
    } 
+0

私たちはこのオプションを検討しましたが、それはユーザーがそこにあるものを見るためにすべてのウィンドウを復元しなければならないことを意味します。それで、私たちはそれに反対して決めました。 – karephul

関連する問題