vb 打开文件的问题

在windows环境下拖动文件至编写的exe文件上即可通过刚刚编写的exe打开,如何实现?

首先设置你的窗体的OleDropMode属性为1-manual
然后再窗体中输入下列代码
Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim N As Integer, I As Integer, S As String
N = Data.Files.Count '拖动到窗体上的文件数目
For I = 1 To N
S = Data.Files(I) '文件的路径
'打开文件语句
'----------
Next I
End Sub

上面的代码就是逐一获取你拖动到窗体上的文件的路径,然后有了路径,你在用你的方法打开就是了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-13
用函数Cammand读取命令行参数就行了。如:
dim s as string
s=cammand
msgbox s
s即为你拖入的文件的路径
第2个回答  2011-04-13
给50分我把代码全部贴上来!
第3个回答  2011-04-17
楼主说的是:【拖动文件至所编写的exe文件“图标”上(前提是这个exe之前未提前打开)】

即:例如编写了一个名为“文本编辑器.EXE”的程序,这个程序生成的文件个性扩展名是“.ttt”,但要求将扩展名为“.ttt”的文本类型的文件拖至“文本编辑器.EXE图标”上就直接能用这个“文本编辑器.EXE“打开。
第4个回答  2011-04-18
直接复制到窗体中 代码如下
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Private Type LNKHEAD
dwID As Long
dwGUID(3) As Long
dwFlags As Long
dwFileAttributes As Long
dwCreationTime As FILETIME
dwModificationTime As FILETIME
dwLastaccessTime As FILETIME
dwFileLen As Long
dwIconNum As Long
dwWinStyle As Long
dwHotkey As Long
dwReserved1 As Long
dwReserved2 As Long
End Type

Private Type FILELOCATIONINFO
dwSize As Long
dwFirstOffset As Long
dwFlags As Long
dwOffsetOfVolume As Long
dwOffsetOfBasePath As Long
dwOffsetOfNetworkVolume As Long
dwOffsetOfRemainingPath As Long
End Type

Private Type LOCALVOLUMETAB
dwSize As Long
dwTypeOfVolume As Long
dwVolumeSerialNumber As Long
dwOffsetOfVolumeName As Long
strVolumeName As Byte
End Type

Private Type NETWORKVOLUMETAB
dwSize As Long
dwUnknown1 As Long
dwOffsetOfNetSharename As Long
dwUnknown2 As Long
dwUnknown3 As Long
strNetSharename As Byte
End Type

Private Const LNK_HASIDLIST = &H1
Private Const LNK_FILEDIR = &H2
Private Const LNK_HASDES = &H4
Private Const LNK_HASPATH = &H8
Private Const LNK_HASWORKDIR = &H10
Private Const LNK_HASCMD = &H20

Private Const LNK_LOCALVOLUME = &H1
Private Const LNK_NETSHARE = &H2

Public Function GetLinkPath(ByVal strShortCut As String) As String
Dim objLinked As LNKHEAD
Dim intNo As Integer, intTmp As Integer
Dim objInfo As FILELOCATIONINFO
Dim intSeek As Integer
Dim bytBuffer() As Byte
intNo = FreeFile
Open strShortCut For Binary As #intNo
Get #intNo, , objLinked
intSeek = Len(objLinked)
If objLinked.dwFlags And LNK_HASIDLIST Then
Get #intNo, , intTmp
Else
Close #intNo
Exit Function
End If
intSeek = Seek(intNo)
intSeek = intSeek + intTmp
Seek #intNo, intSeek
Get #intNo, , objInfo
Seek #intNo, objInfo.dwOffsetOfBasePath + intSeek
If objInfo.dwFlags And LNK_NETSHARE Then
intSeek = objInfo.dwOffsetOfNetworkVolume - objInfo.dwOffsetOfBasePath
Else
intSeek = objInfo.dwOffsetOfRemainingPath - objInfo.dwOffsetOfBasePath
End If
ReDim bytBuffer(intSeek - 1)
Get #intNo, , bytBuffer
Close #intNo
GetLinkPath = StrConv(bytBuffer, vbUnicode)
End Function

Private Sub Form_Load()
Me.OLEDropMode = 1
End Sub

Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim thisfile As Variant
Dim b As String, c As String
For Each thisfile In Data.Files

b = Len(thisfile)
c = Right(thisfile, b - (b - 3))
If c <> "lnk" And c <> "txt" Then
Shell thisfile, 1
ElseIf c = "lnk" Then
a = GetLinkPath(thisfile)
Shell a, 1
ElseIf c = "txt" Then
Shell "notepad " & thisfile, 1
End If
Next
End Sub

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~``下面是图标打开文件
Dim a
Dim b
Dim c
Dim d
Dim f
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Private Type LNKHEAD
dwID As Long
dwGUID(3) As Long
dwFlags As Long
dwFileAttributes As Long
dwCreationTime As FILETIME
dwModificationTime As FILETIME
dwLastaccessTime As FILETIME
dwFileLen As Long
dwIconNum As Long
dwWinStyle As Long
dwHotkey As Long
dwReserved1 As Long
dwReserved2 As Long
End Type

Private Type FILELOCATIONINFO
dwSize As Long
dwFirstOffset As Long
dwFlags As Long
dwOffsetOfVolume As Long
dwOffsetOfBasePath As Long
dwOffsetOfNetworkVolume As Long
dwOffsetOfRemainingPath As Long
End Type

Private Type LOCALVOLUMETAB
dwSize As Long
dwTypeOfVolume As Long
dwVolumeSerialNumber As Long
dwOffsetOfVolumeName As Long
strVolumeName As Byte
End Type

Private Type NETWORKVOLUMETAB
dwSize As Long
dwUnknown1 As Long
dwOffsetOfNetSharename As Long
dwUnknown2 As Long
dwUnknown3 As Long
strNetSharename As Byte
End Type

Private Const LNK_HASIDLIST = &H1
Private Const LNK_FILEDIR = &H2
Private Const LNK_HASDES = &H4
Private Const LNK_HASPATH = &H8
Private Const LNK_HASWORKDIR = &H10
Private Const LNK_HASCMD = &H20

Private Const LNK_LOCALVOLUME = &H1
Private Const LNK_NETSHARE = &H2

Public Function GetLinkPath(ByVal strShortCut As String) As String
Dim objLinked As LNKHEAD
Dim intNo As Integer, intTmp As Integer
Dim objInfo As FILELOCATIONINFO
Dim intSeek As Integer
Dim bytBuffer() As Byte
intNo = FreeFile
Open strShortCut For Binary As #intNo
Get #intNo, , objLinked
intSeek = Len(objLinked)
If objLinked.dwFlags And LNK_HASIDLIST Then
Get #intNo, , intTmp
Else
Close #intNo
Exit Function
End If
intSeek = Seek(intNo)
intSeek = intSeek + intTmp
Seek #intNo, intSeek
Get #intNo, , objInfo
Seek #intNo, objInfo.dwOffsetOfBasePath + intSeek
If objInfo.dwFlags And LNK_NETSHARE Then
intSeek = objInfo.dwOffsetOfNetworkVolume - objInfo.dwOffsetOfBasePath
Else
intSeek = objInfo.dwOffsetOfRemainingPath - objInfo.dwOffsetOfBasePath
End If
ReDim bytBuffer(intSeek - 1)
Get #intNo, , bytBuffer
Close #intNo
GetLinkPath = StrConv(bytBuffer, vbUnicode)
End Function

Private Sub Form_Load()
On Error GoTo m
Me.Show
a = Command

c = Len(a)
b = Replace(a, """", "")
f = Right(b, c - (c - 3))

If f <> "lnk" And f <> "txt" Then
Shell b, 1
ElseIf f = "lnk" Then
d = GetLinkPath(b)
Shell d
ElseIf f = "txt" Then
Shell "notepad " & b, 1
End If
m:

End Sub
相似回答