web-dev-qa-db-ja.com

FindWindowとSetForegroundWindowの代替手段?

FindWindow()SetForegroundWindow()を使用して、異なるアプリケーションに切り替える古い_User32.dll_バージョンの代替を探しています。

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

_User32.dll_でold方法を使用せずにそれを行う方法はありますか?

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

[〜#〜] edit [〜#〜]

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

16
fdomig

回答:いいえ。

しかし、次の不思議な人がウィンドウを見つけて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()メソッド

32
noelicus

SetActiveWindowの代わりに SetForeGroundWindow を使用できます。 Windows Manipulation Api Functions をすべて実行して、見逃しているものがあるかどうかを確認する必要があります。

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

3
Chibueze Opata

SetForeGroundWindowに代わるものは、VisualBasicのAppActivateです。

このように呼ぶ

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

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

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

2
Mark Arnott

同等のFindWindowにSystem.Diagnostics.Process Objectを使用できます。現在、SetForegroundWindowに相当するものはありません。 SetvgroundWindowでPinvokeを使用する必要があります。

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