2012-02-10 24 views

答えて

2

これらは完全に異なる値を返すため、互換性はありません。

GetDesktopWindowHWNDを返し、ウィンドウへのハンドルです:

HWND WINAPI GetDesktopWindow(void); 

OpenInputDesktopしばらく戻っHDESK、ハンドルがにあるあなただけのドキュメントでその関数のシグネチャを見ることによって伝えることができますデスクトップ:

HDESK WINAPI OpenInputDesktop(
    __in DWORD dwFlags, 
    __in BOOL fInherit, 
    __in ACCESS_MASK dwDesiredAccess 
); 

したがって、どちらを使用するかは、明らかに必要な値の種類に依存します。 Desktop functionsには、すべてHDESKのパラメータが必要です。すべてのウィンドウ操作関数は、ウィンドウ(HWND)へのハンドルを必要とします。

すべてのことは、GetDesktopWindow機能によって返されたように、デスクトップウィンドウを悪用することに対してあなたに注意を払わなかった場合、私は黙っています。彼らは何をすべきかについてはThe desktop window is very special.

16

GetDesktopWindow()は「ルート」呼び出し元のスレッドが現在関連付けられている方のデスクトップのHWNDを返します。 "HWND"と思う方がいいでしょう。デスクトップの他のすべてのウィンドウ/ HWNDは何とかこの子孫です。トップレベルのウィンドウは直接の子です。 (メッセージ専用ウィンドウは特別なケースですが、HWNDツリーには表示されませんが、依然としてデスクトップに属しています)。これは、すべてのファイルとアイコンを持つ背景にあるウィンドウと同じではありませんそれはおそらく適切に「シェルデスクトップ」ウィンドウと呼ばれ、GetShellWindow()を使用して取得することができます。これは特別なタイプのトップレベルウィンドウです。

OpenInputDesktop()は、現在アクティブなデスクトップとユーザー入力を受け取ったデスクトップのうちいずれもHDESKを返します。各デスクトップにはルートウィンドウまたは「デスクトップ」ウィンドウをルートとする独自のツリーHWNDがあります。

これらはどのように関連しているのですか?HDESKを取得すると、SetThreadDesktopを使用してそのデスクトップをスレッドのデフォルトデスクトップに設定できます。 GetDesktopWindowを呼び出すと、そのデスクトップのルートHWNDが返されます。 (あなたが入力デスクトップとは、例えば、ロックされたデスクトップの場合は通常の場合ではありません最初の場所でそのHDESKを使用する権限を持っている必要があることに注意してください。)また、現在のスレッドのHDESKを取得するためにGetThreadDesktop()を使用することができます。スパイ++ - - あなたはあなたのアプリケーションがオンになっているデスクトップ用HWNDツリーを走査したい場合

あなたはGetDesktopWindow()を使用することがありますタイプのアプリは、おそらく、GetWindow()または類似を使用して、そこからルートウィンドウとトラバースを取得するために、これを使用する場合があります。しかし、ほとんどのアプリは自分自身を幸せにしているので、他のウィンドウが何であるかを意識する必要はありません。おそらく、一つの共通の使用は、任意のウィンドウがトップレベルであるかどうかをチェックするためのものです:戻り値はGetDesktopWindow()と一致した場合にGetAncestor(hwnd, GA_PARENT)を使用して、確認してください。

OpenInputDesktop()は、おそらく多くのほとんど使用されません。ほとんどのアプリは起動したデスクトップに座ってそこにとどまります。おそらく、ユーザーが切り替えることができる複数のデスクトップを作成したデスクトップ切り替えユーティリティを作成した場合、そのアプリケーションや他のアプリは、UIを表示する前に現在のものになっていることを確認するためにこれを使用できますまったく。ある段階では、拡大鏡やスクリーンリーダーなどのUIやデスクトップを切り替えるときに「ユーザーに従う」UIを備えた他のアプリを書くことは可能ですが、ロックされたデスクトップは安全ではありません。これらのタイプのアプリは、代わりに別の方法でそのケースを操作する必要があります。

+0

私が探していたものの正確な詳細。私は彼らがお互いにどのように関係しているか知りたいと思っていました。ありがとう、相棒! – Quest

関連する問題