2011-03-01 2 views
0

Windows APIにはGetForegroundWindowというメソッドがあります。 しかし、デスクトップをクリックすると、フォアグラウンドウィンドウと見なされます。 以前のフォアグラウンドウィンドウが重なっていないことがわかっています。 実際のフォアグラウンドウィンドウハンドルを取得する方法は?ユーザーは(メニューなどを使用して、周りのTab'ing)「働く」ことかもしれないどこWindowsでフォアグラウンドウィンドウを取得する方法は?

+3

デスクトップ上に2つの目に見えるウィンドウがあるとします。デスクトップをクリックした後、どれが「真の」フォアグラウンドウィンドウですか? –

+1

あなたが達成しようとしていることを知ることは役に立ちます。あなたの質問は、書かれているように意味がありません。 –

+0

これは確かに正常な動作ではなく、私のマシンでこれを見たことはありません。デスクトップをエミュレートしようとする「アドオン」に注意してください。 –

答えて

3

あなたはあなたのソリューションを大きく強化していると思います。アプリケーションウィンドウが更新を受け取ったときにフォアグラウンドウィンドウでない場合は、ウィンドウをフラッシュします。点滅のポイントは、ユーザーの注意を捉えることであり、プログラムで注意を喚起しているかどうかを判断する方法はありません。

あなたが本当に知りたいと思うように思えます。「私のウィンドウのうち、現在変更されている部分がユーザーに表示されていますか?これは非常に複雑な質問ですが、正しく答えても、ユーザーが変更に気づくかどうかを知る方法はありません。

+0

私は別のアプリケーション(Googleトーク)をテストしたので、実装したいと思います。 –

+0

@Jader:あなたがこれを行うことに決めたとしても、 "前景"のウィンドウを見つけることは方法ではありません - あなたの質問に対するコメントでPeterが指摘したように、複数のものがあるかもしれません(そして、とにかくあなたの*窓を隠す)。ユーザーがあなたのウィンドウを見ることができるかどうかを知りたければ、クリッピング領域(**あなたの**ウィンドウ)を調べることが道のりだと思われますが、それは別の質問のトピックです。 – Shog9

1

「デスクトップ」(本物のデスクトップ・ウィンドウの上部にある探検デスクトップListViewコントロール)とタスクバーの両方が本当のウィンドウです

の場合あなたはそれを自分で見つける必要があり、悪い「本物の」最前面ウィンドウを見つけたい、あなたの最善の策は、zオーダーの最上部にある窓のために起こっている、多分何か:

... enumfunc(hwnd,...) 
{ 
    if (GetClassName(hwnd)!= "Shell_TrayWnd") 
    { 
     if (IsWindowEnabled(hwnd) && IsWindowVisible(hwnd) && GetWindow(hwnd,GW_OWNER)==NULL) 
     { 
      DoSomethingWithRealForegroundWindow(hwnd) 
      return FALSE 
     } 
    } 
} 

EnumWindows(enumfunc,0) 

TaskSwitchXPが開いていますソースalt-tabの置き換え、おそらくあなたが使用できるより良いアルゴリズムを持っています...

関連する問題