PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
13686 00/10/24 12:36:55 RE(5):PB5.0.03: 他のアプリケーションの起動チェック(資源ゴミレス) By M.M
13682 00/10/24 10:04:41 RE(4):PB5.0.03: 他のアプリケーションの起動チェック(ただしFindWindowA以外で) By マルボロB
13656 00/10/20 18:42:36 RE(3):起動中プロセスとモジュール名を列挙する方法 (WinNT編) By Taka
13655 00/10/20 18:41:56 RE(2):起動中プロセスとモジュール名を列挙する方法 (Win95/98編) By Taka
13654 00/10/20 18:37:03 RE(1):PB5.0.03: 他のアプリケーションの起動チェック(ただしFindWindowA以外で) By Taka
13635 00/10/19 17:43:46 PB5.0.03: 他のアプリケーションの起動チェック(ただしFindWindowA以外で) By マルボロB

カテゴリ:スクリプトの記述
日付:2000年10月20日 18:42 発信者:Taka
題名:RE(3):起動中プロセスとモジュール名を列挙する方法 (WinNT編)

【事前準備について】
WinNT4では前述の方法はできません。DLLもAPIも全く別の方法をとります。
PSAPI.DLLというモジュールが必要になりますが、このDLLは WinNT4本体やサービスパックでは提供されません。
SDKを持っている場合はその中から、ない場合は MSDNのライブラリからダウンロードできるようです。

【外部関数宣言】
// プロセス情報の列挙
function long EnumProcesses( ref long idProcess[], long cb, ref long cbNeeded ) library \"psapi.dll\"
function long OpenProcess( long DesiredAccess, long InheritHandle, long ProcessId ) 
library \"kernel32.dll\"
function long EnumProcessModules( long hProcess, ref long hModules[], long cb, ref long cbNeeded ) 
library \"psapi.dll\"
function long GetModuleFileNameEx( long hProcess, long hModule, ref string FileName, long sz ) 
library \"psapi.dll\" alias for \"GetModuleFileNameExA\"

【スクリプト】
// リセット
lb_1.Reset()

// 定数
constant long PROCESS_VM_READ           =   16 //0x0010
constant long PROCESS_QUERY_INFORMATION = 1024 //0x0400

// 変数
long idProc[], ProcCount, p#, hProc
string exe

// プロセスIDの列挙(配列に代入される)
idProc[1000] = 0
EnumProcesses( idProc, 4000, ProcCount ) // 4000はidProc[1?1000]の総バイト数
ProcCount = ProcCount / 4

// モジュール名の取得
for p# = 1 to ProcCount

 // プロセスIDからハンドルを求める
 hProc = OpenProcess( PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, 0, idProc[p#] )

 // ベースモジュール名の取得
 exe = Space(260)
 GetModuleFileNameEx( hProc, 0, exe, 261 ) // ゼロを指定するとベースモジュールになる
 lb_1.AddItem( \"#\" + String(idProc[p#]) + \" \" + exe )

 // プロセスハンドルを閉じる
 CloseHandle(hProc)

next

【メモ】
プロセスだけでなく、ロード済みのモジュール名の列挙も可能です。
この場合、EnumProcessModules というAPIを使ってモジュールハンドルの配列を取得し、
それを GetModuleFileNameEx に渡します。

付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows95
DBMS Oracle SQL*Net 8
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS Oracle 7.3
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.