private GetClassName ( int hWnd, StringBuilder lpClassName, int nMaxCount ) : int | ||
hWnd | int | |
lpClassName | StringBuilder | |
nMaxCount | int | |
Résultat | int |
/// <summary> /// キャプチャのコア処理。 /// </summary> /// <param name="target">キャプチャ対象</param> /// <returns>キャプチャ画像</returns> protected override Bitmap CaptureCore(IntPtr?target) { var handle = target.Value; // IE判定 var className = InteropHelper.GetClassName(handle); if (className == ClassNameIe) { // ウェブページ全体をキャプチャ return(InternetExplorerCapture(handle)); } else { // 選択コントロールをキャプチャ return(ScreenHelper.CaptureScreen(handle)); } }
/// <summary> /// 表示順にソートしたウィンドウハンドルを取得します。 /// </summary> /// <returns>ウィンドウハンドルリスト</returns> private List <IntPtr> GetHandles() { List <IntPtr> list = new List <IntPtr>(); // 一番手前のウィンドウを取得 IntPtr handle = User32.GetForegroundWindow(); IntPtr hWndPrev; while ((hWndPrev = User32.GetWindow(handle, GW.HWNDPREV)) != IntPtr.Zero) { handle = hWndPrev; } do { // 対象ウィンドウか判定 if (this.IsValidWindow(handle)) { // 子ウィンドウ判定 IntPtr hWndChild = User32.GetWindow(handle, GW.CHILD); if (hWndChild != IntPtr.Zero) { this.GetHandles(hWndChild, ref list); } list.Add(handle); } } while ((handle = User32.GetWindow(handle, GW.HWNDNEXT)) != IntPtr.Zero); // 除外対象のクラス名のハンドルを除外する list.RemoveAll(x => { var className = InteropHelper.GetClassName(x); return(className.IndexOf(ProductInfo.Product) >= 0 || this.ignoreClassNames.Contains(className)); }); return(list); }
/// <summary> /// コントロール情報を設定します。 /// </summary> /// <param name="handle">コントロールのハンドル</param> /// <param name="bounds">コントロールの範囲</param> public void UpdateInfo(IntPtr handle, Rectangle bounds) { this.ClassName = InteropHelper.GetClassName(handle); this.ControlLocation = bounds.Location; this.ControlSize = bounds.Size; }