2012-08-03 82 views
0

我正在爲Pokerstars建立一個HUD以顯示一些相關的統計信息。如何檢查部分外部窗口是否覆蓋

Overlay是一個UserControl:窗體,我將它從狀態欄和Alt + T中的winapi中隱藏起來。 實際上可以有最頂層,在Pokertable爲始終,但是這會導致一些副作用:

我連着screnshot顯示我的問題

  • 1:一切OK
  • 2:只是一個部分Pokertable被我的網頁瀏覽器覆蓋,在這種情況下,HUD顯示(OK!)
  • 3:瀏覽器覆蓋放置HUD的Pokertable區域。在這種情況下,我的HUD不應該是TopMost;

數據我有:

  • IntPtr的手柄
  • 點位置(在屏幕上)
  • 點尺寸(從窗口)

其中WinAPI的函數(的PokerTable)可以幫助ne?誰知道一些例子? 當然,它的可能,有Porgram(撲克追蹤器,HoldemManager)解決了這個挑戰。

使用TopMost將永遠在PokerTable的頂端。所以如果用戶點擊它,HUD可能不會被覆蓋。

3 Cases


//編輯

我與1毫秒intervalls定時器做到了現在,它的工作60%,具有一定的sideffects。因爲沒有更好的

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

回答

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);