アプリケーションにWPFウィンドウがあり、特定のシナリオMainView.Activate();
でMainView.BringIntoView();
メソッドを呼び出してアクティブにします。また、この「MainView」ウィンドウにフォーカスを設定します。
しかし、私の要件は、このウィンドウがフォーカスされないようにすることです。つまり、カーソルは以前のアプリケーション (メモ帳、単語など) に残るはずです。
使ってみMainView.ShowActivated="False"
ましたがダメでした。ここで述べたように HwndSource を使用する必要がありますか?
ケントの助けの後に使用したコード(ウィンドウが最小化されている場合にのみ機能します):
IntPtr HWND_TOPMOST = new IntPtr(-1);
const short SWP_NOMOVE = 0X2;
const short SWP_NOSIZE = 1;
const short SWP_NOZORDER = 0X4;
const int SWP_SHOWWINDOW = 0x0040;
Process[] processes = Process.GetProcesses(".");
foreach (var process in processes)
{
IntPtr handle = process.MainWindowHandle;
if (handle != IntPtr.Zero)
{
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
}
}