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 (記載なし)
Copyright © 2013 Power Future Co., Ltd.