適当に日々あったこととか書いてます。
×
[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に触ってなければいつでも同じ順番でハンドルが取得されるもんだと思ってたらどうやら違うらしい。
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
この記事にコメントする