私は例えば働きます。Firefoxで、私のC#.NETアプリはそのウィンドウを前面に表示します。それは問題ありませんが、SendToBack()を使用してフォームを非表示にすると、Firefoxのウィンドウがアクティブ化されないため、Firefoxがフォアグラウンドにある場合でも、ウィンドウをクリックしてスクロールできるようにする必要があります。 C#で以前にフォーカスされたウィンドウ?
私はこれらを試しました:
[DllImport("User32")]
private static extern int SetForegroundWindow(IntPtr hwnd);
[DllImport("user32.dll")]
static extern bool AllowSetForegroundWindow(int dwProcessId);
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[...]
AllowSetForegroundWindow(System.Diagnostics.Process.GetCurrentProcess().Id);
SendToBack();
SetForegroundWindow(GetForegroundWindow());
ウィンドウを返送した後、前のウィンドウがGetForegroundWindowによって返されることを期待していましたが、機能しません。
次に、WndProcをオーバーライドし、WM_ACTIVATEメッセージを処理してlParamから前のウィンドウを取得しようとしましたが、このハンドルでSetForegroundWindow()を使用しても機能しません。
protected override void WndProc(ref Message msg) {
if (msg.Msg == 0x0006) {
prevWindow = msg.LParam;
}
base.WndProc(ref msg);
}
[...]
SetForegroundWindow(prevWindow);