外部プロセスの起動(U)          <TOP>


ShellExecute 拡張子に関連付けられたプログラムを実行

 

 
'================================================================
'= 外部プロセスの起動(U)
'=    (ShellExecute4.bas)
'================================================================
#include "Windows.bi"

' 拡張子に関連付けられたプログラムを実行
Declare Function Api_ShellExecute& Lib "shell32" Alias "ShellExecuteA" (ByVal hWnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&)

#define SW_HIDE 0                       '指定のウィンドウを非表示にし他のウィンドウをアクティブ化
#define SW_MAXIMIZE 3                   '最大化
#define SW_MINIMIZE 6                   '指定のウィンドウをアイコン化しタスクリスト内のトップレベルウィンドウをアクティブ化
#define SW_RESTORE 9                    'ウィンドウをアクティブ化し表示。ウィンドウがアイコン化または最大化されているときは元の位置とサイズに
#define SW_SHOW 5                       'ウィンドウをアクティブ化し現在の位置とサイズで表示
#define SW_SHOWDEFAULT 10               '
#define SW_SHOWMAXIMIZED 3              'ウィンドウをアクティブ化し最大表示
#define SW_SHOWMINIMIZED 2              'ウィンドウをアクティブ化しアイコン化
#define SW_SHOWMINNOACTIVE 7            'ウィンドウをアイコン化する。現在アクティブなウィンドウはアクティブなままにする
#define SW_SHOWNA 8                     'ウィンドウを表示する現在アクティブなウィンドウはアクティブなままにする
#define SW_SHOWNOACTIVATE 4             '以前に表示された位置とサイズで表示する。現在アクティブなウィンドウはアクティブなままにする。
#define SW_SHOWNORMAL 1                 '起動時に通常のウィンドウとして表示

#define ERROR_FILE_NOT_FOUND 2          'ファイルが見つからない
#define ERROR_PATH_NOT_FOUND 3          'パスが見つからない
#define ERROR_BAD_FORMAT 11             '不正な形式の実行ファイル
#define SE_ERR_ACCESSDENIED 5           'OSが指定したファイルへのアクセスを拒否
#define SE_ERR_ASSOCINCOMPLETE 27       'ファイルに関連づけられた物が不完全かまたは無効
#define SE_ERR_DDEBUSY 30               '他のDDEプロセスが通信中だったので、DDE通信が完了できなかった
#define SE_ERR_DDEFAIL 29               'DDE通信が失敗
#define SE_ERR_DDETIMEOUT 28            'DDE通信でタイムアウトが発生
#define SE_ERR_DLLNOTFOUND 32           '指定したDLLファイルが見つからなかった
#define SE_ERR_FNF 2                    'ファイルが見つからなかった
#define SE_ERR_NOASSOC 31               '指定したファイルに関連づけられたアプリケーションが見つからなかった
#define SE_ERR_OOM 8                    '処理を完了するのに十分なメモリがなかった
#define SE_ERR_PNF 3                    '指定したパスが見つからなかった
#define SE_ERR_SHARE 26                 '共有違反が発生

Var Shared Button1 As Object
Var SHared Radio(5) As Object

For i = 0 To 5
    Radio(i).Attach GetDlgItem("Radio" & Trim$(Str$(i + 1))) : Radio(i).SetFontSize 14
Next i
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14

Var Shared Operation(5) As String

'================================================================
'=
'================================================================
Declare Function Index bdecl () As Integer
Function Index()
    Index = Val(Mid$(GetDlgRadioSelect("Radio1"), 6)) -1
End Function

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Operation(0) = "edit"
    Operation(1) = "explore"
    Operation(2) = "open"
    Operation(3) = "print"
    Operation(4) = "properties"
    Operation(5) = "find"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Ret As Long

    If Index = 0 Or Index = 3 Then
        Ret = Api_ShellExecute(GethWnd, Operation(Index), "scrolldc.txt", ByVal 0, ByVal 0, SW_SHOWNORMAL)
    Else
        Ret = Api_ShellExecute(GethWnd, Operation(Index), "c:\fbasicv63", ByVal 0, ByVal 0, SW_SHOWNORMAL)
    End if

    If Ret <= 32 Then
        A% = MessageBox("Err", Str$(Ret), 0, 2)
    End If
End Sub

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