vb里面怎么打开自动关联的文件,即双击一个文件怎么自动调用我的程序打开?

coyer 2003-12-02 09:21:41
文件关联我已经设置好,可是我不知道怎么更改我的程序,让我的程序自动打开这个文件.

比如我已经将txt格式的文件打开方式设置成我的一个vb程序了,双击之后会打开我的程序,可是我的程序不会自动打开这个文件啊。vb里面有没有像C中一样的启动参数?

还有,如果我的程序已经启动了的话,如果用户双击一个关联文件,我不希望再启动一个,而是直接用这个打开的程序再打开一个文件。

不知道我表述清楚了没有?我以前搞vc的,希望大家帮帮我。谢谢
...全文
315 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
featherfly 2003-12-09
  • 打赏
  • 举报
回复
学习一下
boydgmx 2003-12-09
  • 打赏
  • 举报
回复
学习。。
coyer 2003-12-09
  • 打赏
  • 举报
回复
如果我的程序已经启动了呢?这个时候双击关联文件会怎么样?
我需要这个时候自动获得第一个程序并且显示出来,然后自动打开这个文件。

这个问题还是没有解决。
建立文件关联是很简单的事情,我知道怎么做,我要的是打开文件,并且不能启动两个实例打开文件的这种功能。
imur 2003-12-02
  • 打赏
  • 举报
回复
学习
rainstormmaster 2003-12-02
  • 打赏
  • 举报
回复
用DDE实现,现在我这里网速很慢,没法贴代码
  • 打赏
  • 举报
回复
lxcc 2003-12-02
  • 打赏
  • 举报
回复
注册表里面修改文件关联
SoHo_Andy 2003-12-02
  • 打赏
  • 举报
回复
如果你的程序已经启动,这时候双击关联文件会重复和第一次打开文件一样的动作
如果想实现你的目标,要使用消息传递了
即在第二次双击打开文件时,检测到已经有实例运行了,则发送一个消息到打开的应用
程序,同时把新的文件名作为参数传递过去

在你的应用程序中就要加上消息反应的事件,处理这个传递重新打开文件的消息

具体我没有代码,按照这个思路试试看

coyer 2003-12-02
  • 打赏
  • 举报
回复
谢谢楼上两位的回答,懂了不少。

如果我的程序已经启动了呢?这个时候双击关联文件会怎么样?
我需要这个时候自动获得第一个程序并且显示出来,然后自动打开这个文件。
SoHo_Andy 2003-12-02
  • 打赏
  • 举报
回复
问题1、VB中是有启动参数的,你可以在你的程序里接收并处理

Command 函数示例
本示例在某个函数中用 Command 函数获得命令行参数,并将命令行参数以 Variant 类型之数组返回。
Function GetCommandLine(Optional MaxArgs)
'声明变量。
Dim C, CmdLine, CmdLnLen, InArg, I, NumArgs
'检查是否提供了 MaxArgs 参数。
If IsMissing(MaxArgs) Then MaxArgs = 10
' 使数组的大小合适。
ReDim ArgArray(MaxArgs)
NumArgs = 0: InArg = False
'取得命令行参数。
CmdLine = Command()
CmdLnLen = Len(CmdLine)
'以一次一个字符的方式取出命令行参数。
For I = 1 To CmdLnLen
C = Mid(CmdLine, I, 1)
'检测是否为 space 或 tab。
If (C <> " " And C <> vbTab) Then
'若既不是 space 键,也不是 tab 键,
'则检测是否为参数内含之字符。
If Not InArg Then
'新的参数。
'检测参数是否过多。
If NumArgs = MaxArgs Then Exit For
NumArgs = NumArgs + 1
InArg = True
End If
'将字符连接到当前参数中。
ArgArray(NumArgs) = ArgArray(NumArgs) & C
Else
'找到 space 或 tab。
'将 InArg 标志设置成 False。
InArg = False
End If
Next I
'调整数组大小使其刚好符合参数个数。
ReDim Preserve ArgArray(NumArgs)
'将数组返回。
GetCommandLine = ArgArray()
End Function

问题2、在你的应用程序的sub Main中加入
if App.PrevInstance then
msgbox "已经有个实例运行了"
end if
dysqw 2003-12-02
  • 打赏
  • 举报
回复
比如你的程序是1.exe
已经关联好后,双击文件会传一个参数给1.exe
如1.exe text.txt
这个参数可以在command中取出
测试
Private Sub Form_Load()
MsgBox Command
End Sub
online 2003-12-02
  • 打赏
  • 举报
回复
通过注册表操作
如何使你的程序同文件扩展名建立关联?
------------------------------------------------------------------------
--------
如果你的程序是同文件操作有关,比如说你自定义了一个文件类型,用你的程序才
能打开它并查看其中的内容。你有没有想过在你的文件同你的程序之间建立关联,
这样不必每次都要先启动程序,再打开文件了。用户可直接点选你的文件,而不必
每次都要面对一个“打开方式”对话框。其实要做到这一点,只须调用API函数就
行了。下面的代码向你演示如何实现这一功能。


首先在窗体的通用声明段中加入下面的代码:


Option Explicit

Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "
RegCreateKeyA" (ByVal hKey As Long, _
ByVal lpSubKey As String, phkResult As Long) As
Long
Private Declare Function RegSetValue Lib "advapi32.dll" Alias "
RegSetValueA" (ByVal hKey As Long, _
ByVal lpSubKey As String, ByVal dwType As Long, ByVal
lpData As String, ByVal cbData As Long) As Long

' Return codes from Registration functions.
Const ERROR_SUCCESS = 0&
Const ERROR_BADDB = 1&
Const ERROR_BADKEY = 2&
Const ERROR_CANTOPEN = 3&
Const ERROR_CANTREAD = 4&
Const ERROR_CANTWRITE = 5&
Const ERROR_OUTOFMEMORY = 6&
Const ERROR_INVALID_PARAMETER = 7&
Const ERROR_ACCESS_DENIED = 8&

Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const MAX_PATH = 260&
Private Const REG_SZ = 1


在窗体的Click事件中加入下面的代码
Private Sub Form_Click()

Dim sKeyName As String 'Holds Key Name in registry.
Dim sKeyValue As String 'Holds Key Value in registry.
Dim ret& 'Holds error status if any from API calls.
Dim lphKey& 'Holds created key handle from RegCreateKey.

'This creates a Root entry called "MyApp".
sKeyName = "MyApp"
sKeyValue = "My Application"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)

'This creates a Root entry called .BAR associated with "MyApp".
sKeyName = ".BAR"
sKeyValue = "MyApp"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)

'This sets the command line for "MyApp".
sKeyName = "MyApp"
sKeyValue = "c:\mydir\my.exe %1"
ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)
ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, _
sKeyValue, MAX_PATH)
End Sub
按F5运行程序并在窗体上点击一下鼠标,然后退出程序.


从开始菜单中运行REGEDIT,你可在HKEY_CLASSES_ROOT下找到.bar和MyApp两个子
项,结构如下所示:

.bar = MyApp
MyApp = My Application
|
-- Shell
|
-- open
|
-- command = c:\mydir\my.exe %1

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧