Alt+Tabに出てくるウィンドウの列挙
Alt+Tabを拡張するにあたって、Alt+Tabのときに出てくるウィンドウだけを列挙したかったのだけど、EnumWindowsだと全プロセスが列挙されてしまってIMEが(゚Д゚)ウゼェェェ
調べてみたけどないみたいなので、ガリっと書きました。Alt+Tab以外のを除去するプログラム。というわけで、自分メモ用や参考にしていただければということで。お約束で毎度のことだけど、このプログラムをつかって起きた障害等に私は責任を負いません。あしからず。
BOOL CALLBACK EnumWindowsProc(HWND hWnd , LPARAM lParam) {
HWND hParent , hOwner;
LONG iWndLong , iExtLong;
TCHAR sClassName[128] , sCaption[128] , sCaptionPattern[128];
BOOL fDisabled;
RECT uRect;// 情報の取得
//親ウィンドウ
hParent = ::GetParent( hWnd );
//オーナーウィンドウ
hOwner = ::GetWindow( hWnd , GW_OWNER );
//スタイル
iWndLong = ::GetWindowLong( hWnd , GWL_STYLE );
//拡張スタイル
iExtLong = ::GetWindowLong( hWnd , GWL_EXSTYLE );
//クラス名
::GetClassName( hWnd , sClassName , 128 );
//キャプション
::GetWindowText( hWnd , sCaption , 128 );//Alt+Tabで表示されないものを除外する
//クラス名・キャプション名の取得ができない
if( sClassName[0] == 0 )
return TRUE;
if( sCaption[0] == 0 )
return TRUE;
//非表示
if( ::IsWindowVisible( hWnd ) == FALSE )
return TRUE;
//親が存在する(デスクトップならかまわない)
if( hParent != NULL && hParent != ::GetDesktopWindow() )
return TRUE;
//オーナーが存在しちゃう
if( hOwner != NULL )
return TRUE;
//アプリケーションウィンドウじゃない
if( iExtLong & WS_EX_TOOLWINDOW )
return TRUE;TRACE("%d/[%s]/\n",g_wndnum,sCaption);
g_wndnum++;
return TRUE;
}
これをEnumWindowsから呼び出しちゃってください。g_wndnumっていうのは単に何個あるかカウントしたかっただけの大域変数です。使う前に0に初期化するといいかも。つかうなら。
| 固定リンク


コメント