起動中のタスク(アプリケーション)の取得方法 – プログラミング – Home

起動中のタスク(アプリケーション)の取...
 
通知
すべてクリア

[解決済] 起動中のタスク(アプリケーション)の取得方法


ヒサ
 ヒサ
(@ヒサ)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

はじめまして。ヒサと申します。
Win2000/VC++6.0を使って、MFCで開発しています。
Windowsタスクマネージャのアプリケーション画面に出ているような
アプリケーション(タスク)の一覧を取得するには、
どのような方法があるでしょうか?
どなたかご教授願いますでしょうか。
よろしくお願いします。


引用未解決
トピックタグ
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

EnumWindows で過去のログを検索してみましょう。

概要はMSDNを参照してください。


返信引用
ヒサ
 ヒサ
(@ヒサ)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

Bunさんありがとうございます。
もう少し教えてください。
EnumWindowsパラメータのコールバック関数内で
アプリケーション(タスク)の一覧を取得するのでしょうか?
どのような方法で行うのでしょうか?
単純にコールバック関数をカウントすると大きな値になってしまいます。
よろしくお願いします。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

EnumProcesses()、 EnumProcessModules()、 GetModuleFileNameEx()、
GetModuleBaseName()

このあたりを使うようです。
やったことがないので、できるかどうかわかりませんが(自信なし)
NTの例が下記のページで紹介されています。

http://www.microsoft.com/japan/support/kb/articles/J041/6/32.htm


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

>EnumWindowsパラメータのコールバック関数内で
>アプリケーション(タスク)の一覧を取得するのでしょうか?

EnumWindowsは,トップレベルウィンドウを列挙するAPIです。
疑似コードを書くと,
BOOL EnumWindows(WNDENUMPROC ep, LPARAM lp)
{
for (全てのトップレベルウィンドウについて) {
if (!(*ep)(あるトップレベルウィンドウのハンドル, lp)) return FALSE;
}
return TRUE;
}
ということを行っています。

タスクというのは,
・OWNERがいない(GetWindow(hWnd, GW_OWNER) == NULL))
・可視(IsWindowVisible(hWnd) == TRUE)
・タイトル有り(GetWindowTextLength(hWnd) > 0)
の条件を満たす物ですから,それを満たすウィンドウをコールバック中で記録してやれば
よいです。

>単純にコールバック関数をカウントすると大きな値になってしまいます。

何をやったのでしょう……?

>NTの例が下記のページで紹介されています。

えーっと,KB JP175030(旧 J041632)では,タスクの列挙はほとんど扱っていないんです
よね……。
ここのコードはGetVersionExでプラットフォームをチェックしているので,95系・NT系ど
ちらでも動きます。
ちなみに,ToolHelp APIはNT系でもWindows 2000からサポートされるようになったので,
NT 4.0及びそれ以前のOSを切り捨てればToolHelpのみで列挙可能です。


返信引用
ヒサ
 ヒサ
(@ヒサ)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

Bunさん、YuOさんありがとうございました。
YuOさんの方法でうまく動作しました。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>ToolHelp APIはNT系でもWindows 2000からサポートされるようになったので,
>NT 4.0及びそれ以前のOSを切り捨てればToolHelpのみで列挙可能です。

ふーん、そうなんですか。

解決後ですけど

このような情報はどちらから取得されているのでしょうか?


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

>このような情報はどちらから取得されているのでしょうか?

どこかの掲示板かMLでみかけたのだと思います。
すでにどこから,などの事は忘れましたが,確認はMSDN引けばできますし。

CreateToolhelp32Snapshot
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/perfmon/toolhelp_5450.asp
> Windows NT/2000/XP: Included in Windows 2000 and later.
> Windows 95/98/Me: Included in Windows 95 and later.


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

Yu0さん

>どこかの掲示板かMLでみかけたのだと思います。

そういうことですね。

>> Windows NT/2000/XP: Included in Windows 2000 and later.

了解です。
情報ありがとうございました。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>タスクというのは,
>・OWNERがいない(GetWindow(hWnd, GW_OWNER) == NULL))
>・可視(IsWindowVisible(hWnd) == TRUE)
>・タイトル有り(GetWindowTextLength(hWnd) > 0)
>の条件を満たす物ですから

すみません、もーいっちょ。m(__)m

この条件はどこで見つけられたのでしょうか?


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

>この条件はどこで見つけられたのでしょうか?

こっちは書籍です。

Win32 プログラミングテクニック VC++5.0対応
油谷実紀・平見知久著 秀和システム ISBN4-87966-752-8

Knowledge Base等の公式の物は探したんですが,見つかりませんでした。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>Knowledge Base等の公式の物は探したんですが,見つかりませんでした。

わざわざ、すみません。
ありがとうございました。m(__)m


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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