タイトル 拡張子で関連付けされているアプリケーションのパスを取得する
対象言語 VB4.0, Access95以降
動作確認OS Windows95,98,NT4.0
使用関数 FindExecutable
改築日 1999/04/21(1998/01/05)
Source Download

拡張子で関連付けされているアプリケーション
のパスを取得します。





1. フォームを作成しテキストボックス(Text1,Text2)とコマンドボタン(Command1)を貼り付けてください。


Option Explicit

Private Sub Command1_Click()

   Me!Text2 = Y_GetExecPath(Me!Text1)

End Sub



3.モジュールウインドウを作成し、下のソースを入力してください。


'拡張子に関連付けされているアプリケーションのフルパスを取得する。
Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, _
ByVal lpResult As String) As Long

Public Const MAX_PATH = 260

Public Const ERROR_FILE_NOT_FOUND = 2& 'ファイルが見つからない
Public Const ERROR_PATH_NOT_FOUND = 3& 'パス名が見つからない
Public Const ERROR_BAD_FORMAT = 11& 'Win32用EXEではないか EXE内にエラーがある


Public Function Y_GetExecPath(FilePath As String) As String
'*******************************************************************
'機能 : FindExecutable関数を呼び出し、ファイルの拡張子に関連付け
'    されているアプリケーションのフルパスを取得する
'引数 : FilePath  = 取得したいファイルのフルパス名
'*******************************************************************

   Dim strbuf As String
   Dim longret As Long
   Dim msg As String

'アプリケーション名のフルパスを取得する
   strbuf = String$(MAX_PATH, Chr$(0))
   longret = FindExecutable(FilePath, vbNullString, strbuf)
   If longret < 32 Then
     Select Case longret
       Case 0
         msg = "メモリ不足です。"
       Case ERROR_FILE_NOT_FOUND
         msg = "ファイルが見つかりません。"
       Case ERROR_PATH_NOT_FOUND
         msg = "ファイルのパスが見つかりません。"
       Case 31
         msg = "関連付けされていないファイルです。"
       Case Else
         msg = Str$(longret) + ":エラー ファイルのパスを確認してください。 "
     End Select
     Call MsgBox(msg, 16)
     Y_GetExecPath = vbNullString
   Else
     Y_GetExecPath = EditBuf(strbuf)
   End If

End Function


Public Function EditBuf(Buf As String) As String
'***********************************************************
'機能 : 引数 Bufの文字列中の Nullコードを検索し、Nullコードを
' 除いた文字列を返す
'引数 : Buf = Nullコードを含む文字列
'戻り値: Nullコードを除いた文字列
'***********************************************************

   Dim i As Long
   Dim strbuf As String

   i = InStr(Buf, vbNullChar)
   If i <> 0 Then
     If Mid$(Buf, i + 1, 1) <> vbNullChar Then
       Mid$(Buf, i, 1) = " "
     End If
     strbuf = RTrim$(Buf)
     If Right$(strbuf, 1) = Chr$(34) Then
       EditBuf = RTrim$(Left$(strbuf, Len(strbuf) - 1))
     Else
       EditBuf = strbuf
     End If
   Else
     EditBuf = Buf
   End If

End Function





Copyright (C)1997-2001 空耳工房 MY2Project All rights reserved.