適当に日々あったこととか書いてます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
HWND GetWindow(
HWND hWnd, // 元ウィンドウのハンドル
UINT uCmd // 関係
);
指定されたウィンドウと指定された関係( またはオーナー)にあるウィンドウのハンドルを返します。
<パラメータ>
・hWnd
ウィンドウのハンドルを指定します。
このウィンドウを元に、uCmd パラメータの値に基づいてウィンドウが検索されます。
・uCmd
指定したウィンドウとハンドルを取得するウィンドウとの関係を指定します。
次の値のいずれかを指定できます。
<戻り値>
関数が成功すると、ウィンドウのハンドルが返ります。
指定した関係を持つウィンドウがない場合は、NULL が返ります。
拡張エラー情報を取得するには、 関数を使います。
<解説>
すべての子ウィンドウを取得する場合、EnumChildWindows 関数を使った方が GetWindow 関数をループ処理で呼び出すよりも信頼性の高い結果が得られます。
GetWindow 関数を呼び出してウィンドウを列挙すると、無限ループに陥ったり、すでに破棄されているウィンドウのハンドルを参照する危険性がでてきます。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364757.aspx
<使用メモ>
EnumWindowsのコールバックで取得したハンドルがオーナーウィンドウ無しかどうかの判定に使用。
if(GetWindow(hwnd, GW_OWNER) == NULL){
// オーナーウィンドウ無し
}
って感じ。
オーナーウィンドウ無し=このハンドルはオーナーウィンドウ、ってことかな・・・?
HWND hWnd, // 元ウィンドウのハンドル
UINT uCmd // 関係
);
指定されたウィンドウと指定された関係( またはオーナー)にあるウィンドウのハンドルを返します。
<パラメータ>
・hWnd
ウィンドウのハンドルを指定します。
このウィンドウを元に、uCmd パラメータの値に基づいてウィンドウが検索されます。
・uCmd
指定したウィンドウとハンドルを取得するウィンドウとの関係を指定します。
次の値のいずれかを指定できます。
GW_CHILD | |
指定したウィンドウが親ウィンドウの場合は、Z オーダーが一番上の子ウィンドウのハンドルを取得します。それ以外の場合は、NULL が返ります。 この関数は、指定されたウィンドウの子ウィンドウだけを調べます。それより下位の子孫は調べません。 | |
GW_ENABLEDPOPUP | |
Windows 2000:指定したウィンドウをオーナーとする有効なポップアップウィンドウのハンドルを取得します( この検索では、GW_HWNDNEXT で見つかる最初のウィンドウを使います)。 有効なポップアップウィンドウがない場合は、指定したウィンドウのハンドルが返ります。 | |
GW_HWNDFIRST | |
指定したウィンドウと同じ種類で最も高い Z オーダーを持つウィンドウのハンドルを取得します。 指定したウィンドウが最前面ウィンドウの場合は、最も高い Z オーダーを持つ最前面ウィンドウのハンドルが返ります。 指定したウィンドウがトップレベルウィンドウの場合は、最も高い Z オーダーを持つトップレベルウィンドウのハンドルが返ります。 指定したウィンドウが子ウィンドウの場合は、最も高い Z オーダーを持つ兄弟ウィンドウのハンドルが返ります。 | |
GW_HWNDLAST | |
指定したウィンドウと同じ種類で最も低い Z オーダーを持つウィンドウのハンドルを取得します。 指定したウィンドウが最前面ウィンドウの場合は、最も低い Z オーダーを持つ最前面ウィンドウのハンドルが返ります。 指定したウィンドウがトップレベルウィンドウの場合は、最も低い Z オーダーを持つトップレベルウィンドウのハンドルが返ります。 指定したウィンドウが子ウィンドウの場合は、最も低い Z オーダーを持つ兄弟ウィンドウのハンドルが返ります。 | |
GW_HWNDNEXT | |
指定したウィンドウより Z オーダーが 1 つ下のウィンドウのハンドルを取得します。指定したウィンドウが最前面ウィンドウの場合は、1 つ下の最前面ウィンドウのハンドルが返ります。 指定したウィンドウがトップレベルウィンドウの場合は、1 つ下のトップレベルウィンドウのハンドルが返ります。 指定したウィンドウが子ウィンドウの場合は、1 つ下の兄弟ウィンドウのハンドルが返ります。 | |
GW_HWNDPREV | |
指定したウィンドウより Z オーダーが 1 つ上のウィンドウのハンドルを取得します。 指定したウィンドウが最前面ウィンドウの場合は、1 つ上の最前面ウィンドウのハンドルが返ります。 指定したウィンドウがトップレベルウィンドウの場合は、1 つ上のトップレベルウィンドウのハンドルが返ります。 指定したウィンドウが子ウィンドウの場合は、1 つ上の兄弟ウィンドウのハンドルが返ります。 | |
GW_OWNER | |
指定したウィンドウのオーナーウィンドウのハンドルを取得します。 |
<戻り値>
関数が成功すると、ウィンドウのハンドルが返ります。
指定した関係を持つウィンドウがない場合は、NULL が返ります。
拡張エラー情報を取得するには、 関数を使います。
<解説>
すべての子ウィンドウを取得する場合、EnumChildWindows 関数を使った方が GetWindow 関数をループ処理で呼び出すよりも信頼性の高い結果が得られます。
GetWindow 関数を呼び出してウィンドウを列挙すると、無限ループに陥ったり、すでに破棄されているウィンドウのハンドルを参照する危険性がでてきます。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364757.aspx
<使用メモ>
EnumWindowsのコールバックで取得したハンドルがオーナーウィンドウ無しかどうかの判定に使用。
if(GetWindow(hwnd, GW_OWNER) == NULL){
// オーナーウィンドウ無し
}
って感じ。
オーナーウィンドウ無し=このハンドルはオーナーウィンドウ、ってことかな・・・?
PR
HWND GetForegroundWindow(VOID);
フォアグラウンドウィンドウ( 現在ユーザーが作業しているウィンドウ)のハンドルを返します。
Windows システムは、フォアグラウンドウィンドウを生成したスレッドに対して、他のスレッドよりも若干高い優先順位を割り当てます。
<パラメータ>
パラメータはありません。
<戻り値>
フォアグラウンドウィンドウのハンドルが返ります。
フォアグラウンドウィンドウのハンドルは、ウィンドウがフォーカスを失ったなどの特定の状況下で NULL になる場合もあります。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364732.aspx
<使用メモ>
アクティブウィンドウ(作業ウィンドウ?)のハンドル取得に使用。
フォアグラウンドウィンドウ( 現在ユーザーが作業しているウィンドウ)のハンドルを返します。
Windows システムは、フォアグラウンドウィンドウを生成したスレッドに対して、他のスレッドよりも若干高い優先順位を割り当てます。
<パラメータ>
パラメータはありません。
<戻り値>
フォアグラウンドウィンドウのハンドルが返ります。
フォアグラウンドウィンドウのハンドルは、ウィンドウがフォーカスを失ったなどの特定の状況下で NULL になる場合もあります。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364732.aspx
<使用メモ>
アクティブウィンドウ(作業ウィンドウ?)のハンドル取得に使用。
DWORD GetWindowThreadProcessId(
HWND hWnd, // ウィンドウのハンドル
LPDWORD lpdwProcessId // プロセス ID
);
指定されたウィンドウを作成したスレッドの ID を取得します。
必要であれば、ウィンドウを作成したプロセスの ID も取得できます。
<パラメータ>
・hWnd
ウィンドウのハンドルを指定します。
・lpdwProcessId
プロセス ID を受け取る変数へのポインタを指定します。
ポインタを指定すると、それが指す変数にプロセス ID がコピーされます。
NULL を指定した場合は、プロセス ID の取得は行われません。
<戻り値>
ウィンドウを作成したスレッドの ID が返ります。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364779.aspx
<使用メモ>
そのまんまプロセスID取得に使用。
が、使用しようとしたときに別の解決方法が見つかったので結局使わずに終了。
HWND hWnd, // ウィンドウのハンドル
LPDWORD lpdwProcessId // プロセス ID
);
指定されたウィンドウを作成したスレッドの ID を取得します。
必要であれば、ウィンドウを作成したプロセスの ID も取得できます。
<パラメータ>
・hWnd
ウィンドウのハンドルを指定します。
・lpdwProcessId
プロセス ID を受け取る変数へのポインタを指定します。
ポインタを指定すると、それが指す変数にプロセス ID がコピーされます。
NULL を指定した場合は、プロセス ID の取得は行われません。
<戻り値>
ウィンドウを作成したスレッドの ID が返ります。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364779.aspx
<使用メモ>
そのまんまプロセスID取得に使用。
が、使用しようとしたときに別の解決方法が見つかったので結局使わずに終了。
BOOL SetForegroundWindow(
HWND hWnd // ウィンドウのハンドル
);
指定されたウィンドウを作成したスレッドをフォアグラウンドにし、そのウィンドウをアクティブにします。
キーボード入力はこのウィンドウに直接送られるようになり、ユーザーにこれがわかるように画面でのさまざまな表示が変更されます。
Windows システムは、フォアグラウンドウィンドウを生成したスレッドに対して、他のスレッドよりも若干高い優先順位を割り当てます。
<パラメータ>
・hWnd
アクティブにし、フォアグラウンドにするウィンドウのハンドルを指定します。
<戻り値>
ウィンドウがフォアグラウンドになったら、0 以外の値が返ります。
ウィンドウがフォアグラウンドにならなかった場合は、0 が返ります。
<解説>
フォアグラウンドウィンドウは、 の最も高いウィンドウであり、現在ユーザーが作業しているウィンドウです。
プリエンプティブなマルチタスク環境では、一般的には、どのウィンドウをフォアグラウンドウィンドウにするかの決定はユーザーに委ねます。
Windows 98、Windows 2000:フォアグラウンドウィンドウを設定することができるプロセスは、システムにより制限されます。
次の条件が満たされていなければ、プロセスがフォアグラウンドウィンドウを設定することはできません。
•そのプロセスがフォアグラウンドプロセスである。
•そのプロセスはフォアグラウンドプロセスにより開始された。
•そのプロセスが最後の入力イベントを受け取った。
•フォアグラウンドプロセスがない。
•フォアグラウンドプロセスがデバッグ中である。
•フォアグラウンドがロックされていない(LockSetForegroundWindow 関数の説明を参照)。
•フォアグラウンドロックのタイムアウトが発生している( 関数の SPI_GETFOREGROUNDLOCKTIMEOUT の説明を参照)。
•Windows 2000:アクティブなメニューがない。
この旧バージョンからの変更により、アプリケーションは、ユーザーが他のウィンドウで作業しているときに強制的にフォアグラウンドウィンドウを設定することはできなくなりました。
その代わりに、SetForegroundWindow 関数は、ウィンドウをアクティブにし(SetActiveWindow 関数の説明を参照)、 関数を呼び出してユーザーに通知します。
フォアグラウンドウィンドウを設定できるプロセスは、AllowSetForegroundWindow 関数を呼び出すことにより、他のプロセスにフォアグラウンドウィンドウを設定する能力を与えることができます。
この関数の dwProcessId パラメータで指定されたプロセスは、次にユーザーがそのプロセス以外のプロセスに対して入力操作を行ったときか、または他のプロセスの指定された AllowSetForegroundWindow 関数の呼び出しがあったときに、フォアグラウンドウィンドウを設定する能力を失います。
フォアグラウンドプロセスは、LockSetForegroundWindow 関数を呼び出すことにより SetForegroundWindow 関数の呼び出しを無効化できます。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc411039.aspx
<使用メモ>
まぁそのまんま、指定したハンドルのアプリをアクティブにするために使用。
HWND hWnd // ウィンドウのハンドル
);
指定されたウィンドウを作成したスレッドをフォアグラウンドにし、そのウィンドウをアクティブにします。
キーボード入力はこのウィンドウに直接送られるようになり、ユーザーにこれがわかるように画面でのさまざまな表示が変更されます。
Windows システムは、フォアグラウンドウィンドウを生成したスレッドに対して、他のスレッドよりも若干高い優先順位を割り当てます。
<パラメータ>
・hWnd
アクティブにし、フォアグラウンドにするウィンドウのハンドルを指定します。
<戻り値>
ウィンドウがフォアグラウンドになったら、0 以外の値が返ります。
ウィンドウがフォアグラウンドにならなかった場合は、0 が返ります。
<解説>
フォアグラウンドウィンドウは、 の最も高いウィンドウであり、現在ユーザーが作業しているウィンドウです。
プリエンプティブなマルチタスク環境では、一般的には、どのウィンドウをフォアグラウンドウィンドウにするかの決定はユーザーに委ねます。
Windows 98、Windows 2000:フォアグラウンドウィンドウを設定することができるプロセスは、システムにより制限されます。
次の条件が満たされていなければ、プロセスがフォアグラウンドウィンドウを設定することはできません。
•そのプロセスがフォアグラウンドプロセスである。
•そのプロセスはフォアグラウンドプロセスにより開始された。
•そのプロセスが最後の入力イベントを受け取った。
•フォアグラウンドプロセスがない。
•フォアグラウンドプロセスがデバッグ中である。
•フォアグラウンドがロックされていない(LockSetForegroundWindow 関数の説明を参照)。
•フォアグラウンドロックのタイムアウトが発生している( 関数の SPI_GETFOREGROUNDLOCKTIMEOUT の説明を参照)。
•Windows 2000:アクティブなメニューがない。
この旧バージョンからの変更により、アプリケーションは、ユーザーが他のウィンドウで作業しているときに強制的にフォアグラウンドウィンドウを設定することはできなくなりました。
その代わりに、SetForegroundWindow 関数は、ウィンドウをアクティブにし(SetActiveWindow 関数の説明を参照)、 関数を呼び出してユーザーに通知します。
フォアグラウンドウィンドウを設定できるプロセスは、AllowSetForegroundWindow 関数を呼び出すことにより、他のプロセスにフォアグラウンドウィンドウを設定する能力を与えることができます。
この関数の dwProcessId パラメータで指定されたプロセスは、次にユーザーがそのプロセス以外のプロセスに対して入力操作を行ったときか、または他のプロセスの指定された AllowSetForegroundWindow 関数の呼び出しがあったときに、フォアグラウンドウィンドウを設定する能力を失います。
フォアグラウンドプロセスは、LockSetForegroundWindow 関数を呼び出すことにより SetForegroundWindow 関数の呼び出しを無効化できます。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc411039.aspx
<使用メモ>
まぁそのまんま、指定したハンドルのアプリをアクティブにするために使用。
HWND GetDesktopWindow(VOID);
デスクトップウィンドウのハンドルを取得します。
デスクトップウィンドウはスクリーン全体を覆っており、この上にアイコンやウィンドウなどが描画されます。
<パラメータ>
パラメータはありません。
<戻り値>
デスクトップウィンドウのハンドルが返ります。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364616.aspx
<使用メモ>
そのまんま、デスクトップのハンドル取得に使用。
デスクトップウィンドウのハンドルを取得します。
デスクトップウィンドウはスクリーン全体を覆っており、この上にアイコンやウィンドウなどが描画されます。
<パラメータ>
パラメータはありません。
<戻り値>
デスクトップウィンドウのハンドルが返ります。
<対応情報>
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
引用:ttp://msdn.microsoft.com/ja-jp/library/cc364616.aspx
<使用メモ>
そのまんま、デスクトップのハンドル取得に使用。