// -------------------------------------------------------------------- // ウィンドウを最前面に出す(必要に応じて) // -------------------------------------------------------------------- private void TopMostIfNeeded() { if (!Visible) { return; } lock (mCommentInfosLock) { if (mCommentInfos.Count == 0) { return; } } // MPC-BE のフルスクリーンは通常の最大化とは異なり、このフォームの TopMost が効かない // MPC-BE が最前面に来ている時は、このフォームを最前面に持って行く必要がある // GetForegroundWindow() はマルチディスプレイに関係なく最前面を報告するので、 // ディスプレイ 2 の最前面が MPC-BE でも、ディスプレイ 1 に他のアプリがあってそれが最前面ならそれを報告する // 従って、MPC-BE が当該ディスプレイで最前面かどうか判定不能 // そこで、このフォームが最前面でない場合は常に最前面に出すことにする // タスクスイッチなどシステム系が最前面になっている場合にこのフォームを最前面にしても、今のところ問題ない模様 IntPtr aFGHandle = WindowsApi.GetForegroundWindow(); if (aFGHandle != Handle) { WindowsApi.BringWindowToTop(Handle); } }
public virtual Bitmap Capture(IntPtr handle) { WindowsApi.BringWindowToTop(handle); CaptureHandleDelegateHandler dlg = this.CaptureHandle; IAsyncResult result = dlg.BeginInvoke(handle, null, null); return(dlg.EndInvoke(result)); }
public virtual Bitmap Capture(IntPtr handle) { if (Kohl.Framework.Info.MachineInfo.IsUnixOrMac) { Log.Fatal("Screen caputure is only supported on Windows at the moment."); return(new Bitmap(0, 0)); } WindowsApi.BringWindowToTop(handle); CaptureHandleDelegateHandler dlg = this.CaptureHandle; IAsyncResult result = dlg.BeginInvoke(handle, null, null); return(dlg.EndInvoke(result)); }