17

と を使用して別のアプリケーションにUser32.dll切り替える古いバージョンに代わるものを探しています。FindWindow()SetForegroundWindow()

を使用して最初の代替手段を見つけましたが、Process.GetProcessesByName()そのアプリケーションに切り替える (アクティブ/フォアグラウンドを設定する) 対応する方法がわかりません。

で古い方法を使用せずにそれを行う方法はありUser32.dllますか?

ご協力ありがとうございました。

編集

私が探していた答えではありませんが、@Sorceriの答えを受け入れました。

4

4 に答える 4

39

回答:いいえ。

しかし、ウィンドウを見つけてC#からアクティブ化しようとしている次の不思議な人を助けるために、あなたがしなければならないことは次のとおりです。

[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);

void ActivateApp(string processName)
{
    Process[] p = Process.GetProcessesByName(processName);

    // Activate the first application we find with this name
    if (p.Count() > 0)
        SetForegroundWindow(p[0].MainWindowHandle);
}

たとえば、メモ帳を前面に表示するには、次のように呼び出します。

ActivateApp("notepad");

補足として、アプリケーション内のウィンドウをフォアグラウンドにしようとしている人は、 Activate()メソッドを呼び出すだけです。

于 2012-10-06T10:30:07.620 に答える
3

SetForeGroundWindow の代替は、VisualBasic の AppActivate です。

このように呼びます

Microsoft.VisualBasic.Interaction.AppActivate("WindowTitle")

VisualBasic 名前空間にあるからといって、C# で使用できないわけではありません。

完全なドキュメントはこちら

于 2016-06-26T19:11:26.277 に答える
3

SetActiveWindowの代替として使用できますSetForeGroundWindow。すべてのWindows Manipulation Api 関数を調べて、見逃しているものがないかどうかを確認する必要があります。

また、プロパティSystem.Diagnostics.Processを介してオブジェクトのハンドルを取得できることに注意してください。Process.Handle

于 2012-07-16T21:32:10.007 に答える
1

System.Diagnostics.Process Object同等のFindWindowに使用できます。現在、SetForegroundWindowに相当するものはありません。SetForgroundWindowでPinvokeを使用することをお勧めします。

[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
于 2012-07-16T21:18:10.627 に答える