関数SetForegroundWindow(HWND hWnD)
を使用しようとしています。いくつかのハンドルがありますが、上記の関数のパラメーターとして機能していません。私のハンドルはスレッドであり、フォアグラウンドで実行したい。
HWNDとハンドルの違いは何ですか?
これらは単なる abstract data types です。
[〜#〜] msdn [〜#〜] によると、HANDLE
およびHWND
は次のように定義されます。
HANDLE
は、オブジェクトへの ハンドル です。HWND
はウィンドウのハンドルです。したがって、HWND
はHANDLE
ですが、すべてのHANDLE
sがHWND
であるわけではありません。実際には:
typedef void *PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;
何をしているのかわからない限り、HWND
をSetForegroundWindow
に渡すだけです。
HWND hWnd = FindWindow(NULL, "Calculator");
SetForegroundWindow(hWnd);
これは、最初にFindWindow
で「Calculator」というタイトルのウィンドウのハンドルを取得し、次にそのウィンドウを前面に表示します。
「ハンドル」は、システム上のリソース(メニュー、DLLモジュール、メモリブロックなど)を識別するトークンを指すために使用される一般的な用語です。多くの場合、 「マジッククッキー」は、通常、最初にリソースを作成したときに返され、そのハンドルをリソースの処理を担当するAPIの他の関数に渡します。通常、ハンドルが何であるかを知る必要はありません。 、場合によっては数字、おそらく構造体など何でもあります。だからこそ、ウィンドウを識別するために使用される単なるハンドルであるHWND(API関数「CreateWindow()」によって返される)のような名前を使用して非表示にします。 「ハンドル」をHWNDに変換し、HWNDはすでに「ハンドル」(作成したウィンドウを単に識別するもの)であるため、再び元に戻します。
ここにあります http://forums.codeguru.com/showthread.php?135438-Handle-and-HWND
FindWindowを使用して、アプリケーションからhwndを取得できます http://msdn.Microsoft.com/en-us/library/windows/desktop/ms633499(v = vs.85).aspx
これにより、探しているものへのハンドルがあればHWNDを取得できます C++ Handle as HWND?
HWNDもハンドルですが、グローバルなハンドルです。つまり1つのプロセスのコンテキストで有効なHWNDは、別のプロセスのコンテキストでも有効です。
http://forum.sysinternals.com/internal-wnd-structure-in-win7_topic24988.html に文書化されていない情報がいくつかあります。