忍者ブログ
適当に日々あったこととか書いてます。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // コールバック関数
LPARAM lParam // アプリケーション定義の値
);

画面上のすべてのトップレベルウィンドウを列挙します。
この関数を呼び出すと、各ウィンドウのハンドルが順々にアプリケーション定義のコールバック関数に渡されます。
EnumWindows 関数は、すべてのトップレベルリンドウを列挙し終えるか、またはアプリケーション定義のコールバック関数から 0(FALSE)が返されるまで処理を続けます。

<パラメータ>
・lpEnumFunc
アプリケーション定義のコールバック関数へのポインタを指定します。詳細については、EnumWindowsProc 関数の説明を参照してください。

・lParam
コールバック関数に渡すアプリケーション定義の値を指定します。

<戻り値>
・関数が成功すると、0 以外の値が返ります。
・関数が失敗すると、0 が返ります。
 拡張エラー情報を取得するには、 関数を使います。
・EnumWindowsProc 関数が 0 を返すと、戻り値は 0 になります。

<解説>
EnumWindows 関数は、子ウィンドウは列挙しません。
ただし、WS_CHILD スタイルを持つ、システムにより所有されたいくつかのトップレベルウィンドウは例外です。

この関数を呼び出すと、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/cc410851.aspx

<使用メモ>
while文で永久ループで使用。
VCのアプリで以下の記述で使用。

class aaaa {
public:
 void bbbb();
private:
 static BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
}

void aaaa::bbbb(){
 EnumWindows(&aaaa::EnumWindowsProc, (LPARAM)this);
}

static入れないとコンパイル通らんかった気がするけどよくわからん。つかEnumWindowsProcにaaaaはいらなかったのか・・・?
そしてEnumWindowsは::EnumWindowsにすべきなんだろうか。
オブジェクト云々?このへんの知識が足りない・・・。

クラス無しメイン直呼びだと

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
EnumWindows(&EnumWindowsProc, (LPARAM)this);

で通る。
あと、while文で回してれば、特にPCに触ってなければいつでも同じ順番でハンドルが取得されるもんだと思ってたらどうやら違うらしい。
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
フリーエリア
最新CM
[06/02 Sai]
[04/23 Sai]
[02/02 tuku]
[11/06 sai]
[10/13 Sai]
最新TB
プロフィール
HN:
なりゆき流
性別:
非公開
趣味:
ネトゲ、読書(漫画とか漫画とか漫画とか)
自己紹介:
日々をだらだらと生きております。
バーコード
ブログ内検索
アクセス解析

HTML & CSS Designed by ittuan

忍者ブログ │ [PR]