EnumWindows()でタスクバーにあるアプリケーションを列挙するには? – プログラミング – Home

EnumWindows()でタスクバー...
 
通知
すべてクリア

[解決済] EnumWindows()でタスクバーにあるアプリケーションを列挙するには?


nsf
 nsf
(@nsf)
ゲスト
結合: 15年前
投稿: 9
Topic starter  

vc++2008 Express Edition
Vista SP1

Alt+Tabでタスクバーにあるアプリケーションが表示されますが、
その中から、デスクトップを除いたアプリケーションのハンドルを
取得したいです。
EnumWindows()を使えばできると思うのですが、どうすればいいのでしょうか?


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

わからないのは、列挙の方法そのものですか?
それとも、その中からデスクトップを除く方法ですか?


返信引用
nfs
 nfs
(@nfs)
ゲスト
結合: 16年前
投稿: 48
 

aetosさん、お返事ありがとうございます。
返信遅くなり申し訳ありません。

一応、下記のようにすれば、まあまあ期待通りの動きをするのですが、
PStart.exe( http://www.pegtop.net/start/)を起動している状態だと、
PStartを2回拾ってしまいます。
タスクバーにあるアプリケーションのみを列挙する一般的な方法があれば、
教えてください。

BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM LParam)
{
char szWindow[260];
char szClass[260];
if(IsWindowVisible(hWnd))
{
GetWindowText(hWnd, szWindow, 259);
GetClassName(hWnd, szClass, 259);
if(strcmp(szClass, Button) // スタートを排除
&& strcmp(szClass, Shell_TrayWnd) // タスクバーを排除
&& strcmp(szClass, Progman)) // プログラムマネージャーを排除
{// ここで、外部アプリのハンドルを取得する
}
}
return TRUE;
}


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

オーナーウィンドウがいるウィンドウはタスクバーに載らない。
例えばAboutダイアログや何とかのプロパティ

WS_EX_TOOLWINDOWがあるときはタスクバーに載らない。


返信引用
nsf
 nsf
(@nsf)
ゲスト
結合: 15年前
投稿: 9
Topic starter  

返事が遅れてすみません。
オーナーウィンドウがいるいないはどうやって判断するのでしょうか?


返信引用
Bull
 Bull
(@Bull)
ゲスト
結合: 15年前
投稿: 5
 

GetWindow(hWnd, GW_OWNER);
でオーナーウィンドウのハンドルが取得できます。
NULL が返ってくれば、オーナーがいないということです。


返信引用
金魚ちゃん
 金魚ちゃん
(@金魚ちゃん)
ゲスト
結合: 16年前
投稿: 52
 

2010年の新年。
あけましておめでとう。
最初の回答をするぞ。

・指定ウインドウの状態
http://blog.goo.ne.jp/masaki_goo_2006/e/b5d91ab7568499da2c1aefb85b44fc24

・トップレベル・ウインドウの列挙
http://blog.goo.ne.jp/masaki_goo_2006/e/c620ad58b0d818c530d09d5ce361189d

・可視ウインドウの列挙
http://blog.goo.ne.jp/masaki_goo_2006/e/e6586cd582874300c0e97e12a1056415

・特定アプリケーションの列挙
http://blog.goo.ne.jp/masaki_goo_2006/e/f4a960eba4c54fb573428acd57d61a44

[補足]
上記のブログでは WS_EX_TOOLWINDOW フラグを調査していないので調査したり、
Windows Vista ではダイアログも列挙されるため上記のブログ記事のようにします。

> タスクバーにあるアプリケーションのみを列挙する一般的な方法があれば、
> 教えてください。
たぶん。一発列挙はないと思う。
だから上記のブログ記事のように頑張って実装。
でも Windows のバージョンによって挙動が違うから。
どこまで対応するかは作り手の問題。

じゃあ nfs さん。
頑張ってね。


返信引用
nsf
 nsf
(@nsf)
ゲスト
結合: 15年前
投稿: 9
Topic starter  

金魚ちゃんさんのリンク先から、一応解決できました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました