我想实现当在目录窗口或资源管理器中选中文件时,得到此文件的文件名.和路径名

解决方案 »

  1.   

    在注冊表中設置文件關聯即可。
    如在注冊表中設置.ttv文件用a.exe打開。即可。參考vb代碼如下。
    注冊新文件類型<一>
    Private Declare Function SHFileExists Lib "shell32" Alias "#45" (ByVal szPath As String) As LongPublic Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As _
      Long, ByVal lpSubKey As String, phkResult As Long) As Long
    Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey _
      As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, _
      lpData As Any, ByVal cbData As Long) As LongPublic Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As _
      Long, ByVal lpSubKey As String) As Long
    Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal _
      hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData _
      As Any, lpcbData As Long) As Long
    Public Declare Function RegCloseKey& Lib "advapi32.dll" (ByVal hKey&)Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Function FileTypeRegister(SpreadName As String, CommandLine As String, Optional Description As String = "user-defined")
      Select Case Left(SpreadName, 1)
      Case "."
        If Len(SpreadName) <> 4 Then Exit Function
      Case Else
        If Len(SpreadName) = 3 Then Spreaname = "." & SpreadName Else Exit Function
      End Select
      If FileExist(CommandLine) = False Then Exit Function
      
      Dim hKey&, Rv&, subKey As String, Ico As String
      
      'Register SpreadName
      subKey = Right(SpreadName, 3) & "_Auto_File"
      
      Rv = RegCreateKey(HKEY_CLASSES_ROOT, SpreadName, hKey)
      If Rv = 0 Then
         RegSetValueEx hKey, vbNullString, O&, 1, ByVal subKey, Len(subKey)
         RegCloseKey hKey
      End If  'Register Description
      Rv = RegCreateKey(HKEY_CLASSES_ROOT, subKey, hKey)
      If Rv = 0 Then
         RegSetValueEx hKey, vbNullString, 0&, 1, ByVal Description, Len(Description)
         RegCloseKey hKey
      End If
      
      'Deuault Icon
      Rv = RegCreateKey(HKEY_CLASSES_ROOT, subKey & "\DefaultIcon", hKey)
      If Rv = 0 Then
         Ico = CommandLine & ",1"
         RegSetValueEx hKey, vbNullString, 0, 1, ByVal Ico, Len(Ico)
         RegCloseKey hKey
      End If
      
      'Default CommandLine
      Rv = RegCreateKey(HKEY_CLASSES_ROOT, subKey & "\Shell\Open\Command", hKey)
      If Rv = 0 Then
         CommandLine = CommandLine & " %1"
         RegSetValueEx hKey, vbNullString, 0, 1, ByVal CommandLine, Len(CommandLine)
         RegCloseKey hKey
      End If
      
    End FunctionPublic Function FileExist(ByVal CommandLine As String) As Boolean
      If Str$(SHFileExists(CommandLine)) = 0 Then
         FileExist = False
      Else
         If (GetAttr(CommandLine) And vbDirectory) = vbDirectory Then
            FileExist = False
         Else
            FileExist = True
         End If
      End If
    End FunctionPublic Function UNFileTypeRegister(SpreadName As String)
      Select Case Left(SpreadName, 1)
      Case "."
        If Len(SpreadName) <> 4 Then Exit Function
      Case Else
        If Len(SpreadName) = 3 Then Spreaname = "." & SpreadName Else Exit Function
      End Select
      
      Dim KeyIdA As Long, KeyIdB As Long, KeyValue As String
      
      Call RegCreateKey(HKEY_CLASSES_ROOT, SpreadName, KeyIdA)
      Call RegQueryValueEx(KeyIdA, vbNullString, 0&, 1, 0&, Bufsize)
      KeyValue = String(Bufsize + 1, " ")
      Call RegQueryValueEx(KeyIdA, vbNullString, 0&, 1, ByVal KeyValue, Bufsize)
      KeyValue = Left$(KeyValue, Bufsize - 1)
      
      
      Call RegCreateKey(HKEY_CLASSES_ROOT, "aaa_Auto_File", KeyIdB)
      RegDeleteKey KeyIdB, ""
      RegDeleteKey KeyIdA, ""
    End FunctionSub test()
        FileTypeRegister ".lir", "c:\windows\Notepad.exe"
    End Sub