関連付けされた実行可能ファイル取得(T)          <TOP>


関連付けされた実行可能ファイルを取得します。

FindExecutable ファイル名に関連付けられている実行可能ファイル名とハンドルを取得

 

例では、ディレクトリc:\testFunction.csvm2.jtdjw_cad.docを用意してテストしています。

 

 

 

'================================================================
'= 関連付けされた実行可能ファイル取得
'=    (FindExecutable.bas)
'================================================================
#include "Windows.bi"

#define OUT_OF_MEMORY_OR_RESOURCES 0    'メモリまたはリソースが足りない
#define ERROR_FILE_NOT_FOUND 2          'ファイルが見つからない
#define ERROR_PATH_NOT_FOUND 3          'パスが見つからない
#define ERROR_BAD_ForMAT 11             '不正な形式の実行ファイル
#define NO_ASSOCIATION 31               '関連付けを取得できない

' ファイル名に関連付けられている実行可能ファイル名とハンドルを取得
Declare Function Api_FindExecutable& Lib "Shell32" Alias "FindExecutableA" (ByVal lpFile$, ByVal lpDirectory$, ByVal lpResult$)

Var Shared Edit1 As Object
Var Shared Edit2 As Object
Var Shared Text(3) As Object
Var Shared Button1 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Edit2.Attach GetDlgItem("Edit2") : Edit2.SetFontSize 14
For i = 0 To 3
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1)))
    Text(i).SetFontSize 14
Next
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()

'    Edit1.SetWindowText environ$("windir") & "\win.ini"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var FileName As String
    Var DefaultDir As String
    Var ExeFileName As String * 516
    Var ExeInst As Long

    'デフォルトディレクトリを指定
    DefaultDir = GetDlgItemText("Edit1")

    'ファイル名を指定
    FileName = GetDlgItemText("Edit2")

    '関連付けられている実行可能ファイル名を取得
    ExeInst = Api_FindExecutable(FileName, DefaultDir, ExeFileName)

    'インスタンスハンドルにより分岐
    Select Case ExeInst
        Case is > 32
            '実行可能ファイル名を表示
            Text(3).SetWindowText Left$(ExeFileName, InStr(ExeFileName, Chr$(0)) - 1)

        Case OUT_OF_MEMORY_OR_RESOURCES
            Text(3).SetWindowText "メモリまたはリソースが足りません。"

        Case ERROR_FILE_NOT_FOUND
            Text(3).SetWindowText "ファイルが見つかりません。"

        Case ERROR_PATH_NOT_FOUND
            Text(3).SetWindowText "パスが見つかりません。"

        Case ERROR_BAD_ForMAT
            Text(3).SetWindowText "不正な形式の実行ファイルです。"

        Case NO_ASSOCIATION
            Text(3).SetWindowText "関連付けが指定されていません。"

        Case Else
            Text(3).SetWindowText "関連付けを取得できません。"
    End Select
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End