人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VisualBasic6について質問です。ファイルを削除したいのですが、まったく無関係なシステムが
ファイルをOpenしており命令が実行できないことがあります。この時に、ファイルフルパスを用いて、
現在ファイルを扱っているプロセスを特定することはできますか?
アドバイスいただきたく宜しくお願いします。

●質問者: harunoharuno
●カテゴリ:コンピュータ
✍キーワード:open アドバイス システム パス ファイル
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b19901108
●100ポイント

openfilesでプロセスとファイルを取得してみてはどうでしょう?

http://www.atmarkit.co.jp/fwin2k/win2ktips/306openfiles/openfile...

◎質問者からの返答

回答ありがとうございます。


2 ● ardarim
●100ポイント ベストアンサー

APIを駆使することで、ファイルをオープンしているプロセスを特定することは可能です。ただし、VBで実装するのは難しいと思います。実現するとしたら、C言語でDLLを作ってそれを呼び出すような形になると思います。


こちらにプログラムサンプルがあります。

Listing Used Files - CodeProject

やり方を要約すると、NtQuerySystemInformation APIで、システム内に存在するすべてのハンドルをリストアップすることができます。このAPIでハンドルをリストアップした上で、一つ一つのハンドルに対してファイル名を取得し、調べたいファイル名と一致するかを確認する作業が必要となります。ただ、ハンドルからファイル名を取得するにはカーネルメモリ空間へのアクセスが必要となる為、ドライバを介す必要があります。


要するに面倒くさいです。簡単に、このAPIを1つ呼べば特定できる、というような類の話ではありません。


より簡易な代替案として、handleを使うことは可能かもしれません。handleはコマンドラインユーティリティです。ファイル名を指定すると、そのファイル名をオープンしているプロセスを列挙して出力します。なので、ファイル名をパラメータに指定した上でVBから呼び出し、標準出力への実行結果を受け取って解析することでPID(プロセスID)を特定することは可能だと思います。

◎質問者からの返答

回答どうもありがとうございます。

方法にとどまらず考え方までお答えいただきありがとうございました。

ardarim様にご回答いただいた内容を見て作業量を考える必要を感じました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ