Const SEE_MASK_CLASSKEY = &H3
Const SEE_MASK_CLASSNAME = &H1
Const SEE_MASK_CONNECTNETDRV = &H80
Const SEE_MASK_DOENVSUBST = &H200
Const SEE_MASK_FLAG_DDEWAIT = &H100
Const SEE_MASK_FLAG_NO_UI = &H400
Const SEE_MASK_HOTKEY = &H20
Const SEE_MASK_ICON = &H10
Const SEE_MASK_IDLIST = &H4
Const SEE_MASK_INVOKEIDLIST = &HC
Const SEE_MASK_NOCLOSEPROCESS = &H40
Private Type SHELLEXECUTEINFO
    cbSize As Long
    fMask As Long
    hwnd As Long
    lpVerb As String
    lpFile As String
    lpParameters As String
    lpDirectory As String
    nShow As Long
    hInstApp As Long
    lpIDList As Long
    lpClass As String
    hkeyClass As Long
    dwHotKey As Long
    hIcon As Long
    hProcess As Long
End Type
Private Declare Function ShellExecuteEx Lib "shell32.dll" (SEI As SHELLEXECUTEINFO) As Long
Sub ShowProps(FileName As String, OwnerhWnd As Long)
    Dim SEI As SHELLEXECUTEINFO
    Dim r As Long
    With SEI
        'Set the structure's size
        .cbSize = Len(SEI)
        'Seet the mask
        .fMask = SEE_MASK_NOCLOSEPROCESS Or _
         SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
        'Set the owner window
        .hwnd = OwnerhWnd
        'Show the properties
        .lpVerb = "properties"
        'Set the filename
        .lpFile = FileName
        .lpParameters = vbNullChar
        .lpDirectory = vbNullChar
        .nShow = 0
        .hInstApp = 0
        .lpIDList = 0
    End With
    r = ShellExecuteEx(SEI)
End Sub
Private Sub Form_Load()
    ShowProps "c:\config.sys", Me.hwnd
End Sub

解决方案 »

  1.   

    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    '窗口显示方式枚举
    Public Enum EShellShowConstants
         essSW_HIDE = 0
         essSW_MAXIMIZE = 3
         essSW_MINIMIZE = 6
         essSW_SHOWMAXIMIZED = 3
         essSW_SHOWMINIMIZED = 2
         essSW_SHOWNORMAL = 1
         essSW_SHOWNOACTIVATE = 4
         essSW_SHOWNA = 8
         essSW_SHOWMINNOACTIVE = 7
         essSW_SHOWDEFAULT = 10
         essSW_RESTORE = 9
         essSW_SHOW = 5
    End EnumPublic Function ShellEx( _
            ByVal sFile As String, _
            Optional ByVal eShowCmd As EShellShowConstants = essSW_SHOWDEFAULT, _
            Optional ByVal sParameters As String = "", _
            Optional ByVal sDefaultDir As String = "", _
            Optional sOperation As String = "open", _
            Optional Owner As Long = 0 _
        ) As Boolean
        Dim lR As Long
        Dim lErr As Long, sErr As Long
        If (InStr(UCase$(sFile), ".EXE") <> 0) Then
            eShowCmd = 0
        End If
        On Error Resume Next
        If (sParameters = "") And (sDefaultDir = "") Then
            lR = ShellExecuteForExplore(Owner, sOperation, sFile, 0, 0, essSW_SHOWNORMAL)
        Else
            lR = ShellExecute(Owner, sOperation, sFile, sParameters, sDefaultDir, eShowCmd)
        End If
        If (lR < 0) Or (lR > 32) Then
            ShellEx = True
        Else
            ShellEx = False
        End If
    End Function
      

  2.   

    这是第二个例子Const SEE_MASK_INVOKEIDLIST = &HC
    Const SEE_MASK_NOCLOSEPROCESS = &H40
    Const SEE_MASK_FLAG_NO_UI = &H400
    Private Type SHELLEXECUTEINFO
        cbSize As Long
        fMask As Long
        hwnd As Long
        lpVerb As String
        lpFile As String
        lpParameters As String
        lpDirectory As String
        nShow As Long
        hInstApp As Long
        lpIDList As Long
        lpClass As String
        hkeyClass As Long
        dwHotKey As Long
        hIcon As Long
        hProcess As Long
    End Type
    Private Declare Function ShellExecuteEx Lib "shell32.dll" (SEI As SHELLEXECUTEINFO) As Long
    Sub ShowProps(FileName As String, OwnerhWnd As Long)
        Dim SEI As SHELLEXECUTEINFO
        Dim r As Long
        With SEI
            'Set the structure's size
            .cbSize = Len(SEI)
            'Seet the mask
            '.fMask = SEE_MASK_INVOKEIDLIST
            .fMask = 0
            'Set the owner window
            .hwnd = OwnerhWnd
            'Show the properties
            .lpVerb = "OpenAs"
            'Set the filename
            .lpFile = FileName
            .lpParameters = vbNullChar
            .lpDirectory = vbNullChar
            .nShow = 0
            .hInstApp = 0
            .lpIDList = 0
        End With
        r = ShellExecuteEx(SEI)
    End Sub
    Private Sub Form_Load()
        ShowProps "c:\05150642.LOG", Me.hwnd
    End Sub
      

  3.   

    在98里fmask = 0 会报错 ,应设为fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI 就可以了。不过先要用"open"打开,如果返回SE_ERR_NOASSOC再用"openas"打开。