tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルファイルが開いているか
記事No14108
投稿日: 2009/09/24(Thu) 13:32
投稿者どっこい
Shellで C:\tmp\test.txt を開いているのですが、すでにtest.txtがひらかれていれば無処理としたいのです。
test.txtのファイルをダブルクリックして開く操作はしませんので、VB6から開く時にだけの処理で良いです。

Shell PathName:="NOTEPAD.EXE C:\tmp\test.txt", WindowStyle:=vbNormalFocus

[ツリー表示へ]
タイトルRe: ファイルが開いているか
記事No14109
投稿日: 2009/09/24(Thu) 15:58
投稿者いな
Microsoft Excel が既に起動されているかどうかを調べる(その2)
http://hanatyan.sakura.ne.jp/vbhlp/excel03.htm

を利用し、APIを使う方法が確実かと

  '参考キャプション名を与えてハンドルを取得する場合
  ' CaptionTitle = "Microsoft Excel - Book1" '電卓の場合 "電卓"

の例でいかが?

[ツリー表示へ]
タイトルRe: ファイルが開いているか
記事No14110
投稿日: 2009/09/24(Thu) 16:08
投稿者魔界の仮面弁士
notepad は、ファイルの内容を表示させるために、指定されたファイルを
読み取りモード(SYNCHRONIZE | FILE_READ_ATTRIBUTES)で開きますが、
読み込み完了後には、そのファイルを即座に閉じています。

エクセル Excel.exe などは、編集中もファイルを開き続ける仕様になっていますが、
少なくともメモ帳 notepad.exe はそうではありません。
メモ帳に表示されたテキストを、ユーザーが閲覧・編集している最中というのは、
そのファイルは既に閉じられており、開かれた状態にはなっていません。

ゆえに、起動したメモ帳を閉じずに開きっぱなしにしておいたとしても、
> すでにtest.txtがひらかれていれば
という状態にはなりえません。
もちろん、ファイルを読み込むその瞬間には、ファイルが開かれた状態になりますが、
通常それはごく短時間の事ですので、事前判定しても、あまり役に立たないかと思います。


> test.txtのファイルをダブルクリックして開く操作はしませんので、VB6から開く時にだけの処理で良いです。
呼び出し元である VB 自身にて、同ファイルを開いているかどうかについては、
御自身のプログラム上での Open 処理の事なので、ご自身で管理できますよね。


一方、もしも他のアプリがそのファイルを排他(読取非共有)で開く事があるとすれば、
呼び出された notepad.exe 自体は、排他オープンされたファイルを開く際に
---------------------------
プロセスはファイルにアクセスできません。別のプロセスが使用中です。
---------------------------
のメッセージを表示する可能性があります。
(ただし、それを呼び出す Shell 関数自体はエラーなく完了するはずです)

とはいえ、他のアプリで開く事があるかどうかという話については、
> test.txtのファイルをダブルクリックして開く操作はしませんので、
なので、気にする必要は無いはずですよね。

[ツリー表示へ]
タイトルRe: ファイルが開いているか
記事No14125
投稿日: 2009/10/01(Thu) 13:03
投稿者どっこい
どうも返事遅くなりご迷惑をおかけします。
この件は私には難しいので、wordpadで開く様に変更する方向で考えようとしています。
いろんなご意見頂いたのに大変もうしわけございません。

[ツリー表示へ]