如何检查是否覆盖了外部窗口的一部分

时间:2012-08-03 03:39:18

标签: c# windows winapi

我正在为Pokerstars建立一个HUD以显示一些相关的统计数据。

Overlay是一个UserControl:Form,我将其隐藏在状态栏中,并通过winapi隐藏Alt + T. 实际上它有一个TopMost,总是超过Pokertable,但这会导致一些副作用:

我附上一个screnshot来表明我的问题

  • 1:一切都好。
  • 2:我的网页浏览器只覆盖了Pokertable的一部分,在这种情况下,HUD出现了(OK!)
  • 3:浏览器覆盖了放置HUD的Pokertable区域。在这种情况下,我的HUD不应该是TopMost;

我有数据:

  • IntPtr Handle(PokerTable)
  • 点位置(在屏幕上)
  • 点大小(来自窗口)

哪个WinAPI功能可以帮助ne?谁知道一些例子? 我确定,它有可能,有Porgrams(PokerTracker,HoldemManager)解决了这个挑战。

使用TopMost即可始终位于PokerTable之上。因此,如果用户点击它,则可能不会覆盖HUD。

3 Cases


//修改

我现在用1ms的intervalls定时器,它的工作率为60%,有一些副作用。更好的没有什么

   if (GetForegroundWindow() == TableHandle) {
            this.TopMost = true;
        } else {
            this.TopMost = false;
        }

1 个答案:

答案 0 :(得分:0)

自己想出来 - 我们走了!

public class WinAPI {
    [DllImport("user32.dll")]
    public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, uint dwNewLong);

    public const int GWL_HWNDPARENT = -8;
}


WinAPI.SetWindowLong(this.Handle, WinAPI.GWL_HWNDPARENT, (uint)this.ObservedHandle);