FindWindow()
とSetForegroundWindow()
を使用して、異なるアプリケーションに切り替える古い_User32.dll
_バージョンの代替を探しています。
Process.GetProcessesByName()
を使用して最初の代替を見つけましたが、そのアプリケーションに切り替える(アクティブ/フォアグラウンドを設定する)対応するメソッドが見つかりません。
_User32.dll
_でold方法を使用せずにそれを行う方法はありますか?
ご協力ありがとうございました。
[〜#〜] edit [〜#〜]
@Sorceriの答えを受け入れましたが、それは私が探していた答えではありません。
回答:いいえ。
しかし、次の不思議な人がウィンドウを見つけて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()メソッド 。
SetActiveWindow
の代わりに SetForeGroundWindow
を使用できます。 Windows Manipulation Api Functions をすべて実行して、見逃しているものがあるかどうかを確認する必要があります。
また、System.Diagnostics.Process
プロパティを介してProcess.Handle
オブジェクトのハンドルを取得できることに注意してください。
SetForeGroundWindowに代わるものは、VisualBasicのAppActivateです。
このように呼ぶ
Microsoft.VisualBasic.Interaction.AppActivate("WindowTitle")
VisualBasic名前空間にあるからといって、C#で使用できないわけではありません。
完全なドキュメント こちら
同等のFindWindowにSystem.Diagnostics.Process Object
を使用できます。現在、SetForegroundWindowに相当するものはありません。 SetvgroundWindowでPinvokeを使用する必要があります。
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);