Shellで C:\tmp\test.txt を開いているのですが、すでにtest.txtがひらかれていれば無処理としたいのです。test.txtのファイルをダブルクリックして開く操作はしませんので、VB6から開く時にだけの処理で良いです。Shell PathName:="NOTEPAD.EXE C:\tmp\test.txt", WindowStyle:=vbNormalFocus
Microsoft Excel が既に起動されているかどうかを調べる(その2)http://hanatyan.sakura.ne.jp/vbhlp/excel03.htmを利用し、APIを使う方法が確実かと '参考キャプション名を与えてハンドルを取得する場合 ' CaptionTitle = "Microsoft Excel - Book1" '電卓の場合 "電卓"の例でいかが?
notepad は、ファイルの内容を表示させるために、指定されたファイルを読み取りモード(SYNCHRONIZE | FILE_READ_ATTRIBUTES)で開きますが、読み込み完了後には、そのファイルを即座に閉じています。エクセル Excel.exe などは、編集中もファイルを開き続ける仕様になっていますが、少なくともメモ帳 notepad.exe はそうではありません。メモ帳に表示されたテキストを、ユーザーが閲覧・編集している最中というのは、そのファイルは既に閉じられており、開かれた状態にはなっていません。ゆえに、起動したメモ帳を閉じずに開きっぱなしにしておいたとしても、> すでにtest.txtがひらかれていればという状態にはなりえません。もちろん、ファイルを読み込むその瞬間には、ファイルが開かれた状態になりますが、通常それはごく短時間の事ですので、事前判定しても、あまり役に立たないかと思います。> test.txtのファイルをダブルクリックして開く操作はしませんので、VB6から開く時にだけの処理で良いです。呼び出し元である VB 自身にて、同ファイルを開いているかどうかについては、御自身のプログラム上での Open 処理の事なので、ご自身で管理できますよね。一方、もしも他のアプリがそのファイルを排他(読取非共有)で開く事があるとすれば、呼び出された notepad.exe 自体は、排他オープンされたファイルを開く際に---------------------------プロセスはファイルにアクセスできません。別のプロセスが使用中です。---------------------------のメッセージを表示する可能性があります。(ただし、それを呼び出す Shell 関数自体はエラーなく完了するはずです)とはいえ、他のアプリで開く事があるかどうかという話については、> test.txtのファイルをダブルクリックして開く操作はしませんので、なので、気にする必要は無いはずですよね。
どうも返事遅くなりご迷惑をおかけします。この件は私には難しいので、wordpadで開く様に変更する方向で考えようとしています。いろんなご意見頂いたのに大変もうしわけございません。