说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请教高手:如何当一个程序被反复调用时利用command$?

编辑:说三道四文库 发布时间:2018-02-20 02:12
HTML文档下载 WORD文档下载 PDF文档下载
请教高手:如何当一个程序被反复调用时利用command$?

设:用VB开发的程序Myprg.exe被以myprg command$的方式调用(如在另一个VB开发的程序中用shell "myprg"+command$),当myprg已经在运行时,如果用户再一次以myprg command$的方式调用, 如何获取command$?

非常感谢!


                          Pingping
gz
不能再次获得command$?我的程序能够啊。
form code
Option Explicit

Private Sub Command1_Click()
    Shell App.Path & "\" & App.EXEName & " " & mycommand
End Sub

module code
Option Explicit
Public mycommand As String
Sub Main()
    Form1.Show
    If Len(Command$) Then
        MsgBox Command$
    End If
    mycommand = Command$ & "x"
End Sub
up
能搞定

我的“超级记事本”    就有这功能
http://yoya2000.myetang.com/zbx/index.htm

请参照“两个程序间的通讯”  
在www.21code.com有源代码   

我的问题是:
设我用VB开发了一个图形浏览程序,用户执行myprg a.bmp,myprg会启动并显示a.bmp, 当用户又一次执行myprg b.bmp时, myprg会显示b.bmp ...当用户又一次执行myprg c.bmp时, myprg会显示c.bmp ...
我知道你的意思,不过还是那样回答你。

因为第一个程序是不能获得第二个程序中的command参数的

所以只能用子类消息处理
感谢,
什麽叫"子类消息处理"?
可以用DDE技术实现的,给你个例子
Option Explicit

Const COMMANDLINE = "CommandLine="    '   注释:  还是为了省事,定义一个常量

Private Sub Form_LinkExecute(CmdStr As String, Cancel As Integer)
Static lngCount As Long
Dim Info As String

Info = txtInfo.Text     '注释:      保留原有信息

Select Case CmdStr        ' 注释:    CmdStr 是DDE程序传送过来的参数
  Case "Max"
    Me.WindowState = 2
    Info = Info + vbNewLine + "窗体已被最大化"
  Case "ShowTime"
    Info = Info + vbNewLine + "最后一次运行这个程序的时间是:" + Str(Now)
  Case "Count"
    lngCount = lngCount + 1
    Info = Info + vbNewLine + "你已经第" + Str(lngCount) + "次重复调用这个程序。" _
            + vbNewLine + "但怕您不多给工资,所以只运行了一个 ^_^"
End Select

If Left(CmdStr, Len(COMMANDLINE)) = COMMANDLINE Then
  Info = Info + vbNewLine + "新程序曾以命令行形式运行" + vbNewLine + "命令行为:" _
         + vbNewLine + Right(CmdStr, Len(CmdStr) - Len(COMMANDLINE))
End If

txtInfo.Text = Info    ' 注释:    把信息显示出来
'MsgBox Info
Cancel = False
End Sub

Private Sub LinkAndSendMessage(ByVal Msg As String)
Dim t As Long
PICDDE.LinkMode = 0              '注释:--
PICDDE.LinkTopic = "P1|FormDDE"  ' 注释:  |______连接DDE程序并发送数据/参数
PICDDE.LinkMode = 2            '   注释:  |      “|”为管道符,是“退格键”旁边的竖线,
PICDDE.LinkExecute Msg         '   注释:--        不是字母或数字!

t = PICDDE.LinkTimeout    ' 注释:--
PICDDE.LinkTimeout = 1    ' 注释:  |______终止DDE通道。当然,也可以用别的方法
PICDDE.LinkMode = 0      '  注释:  |      这里用的是超时强制终止的方法
PICDDE.LinkTimeout = t   ' 注释:--
End Sub

Private Sub Form_Load()
If App.PrevInstance Then '注释: 程序是否已经运行

  Me.LinkTopic = ""       '   注释: 这两行用于清除新运行的程序的DDE服务器属性,
  Me.LinkMode = 0          '  注释: 否则在连接DDE程序时会出乱子的

  LinkAndSendMessage "Max"  '        注释:--
  LinkAndSendMessage "Count" '       注释:  |-----连接DDE接受程序并传送数据/参数
  LinkAndSendMessage "ShowTime" '     注释:--

  If Command <> "" Then         '    注释: 如果有命令行参数,就传递过去
     LinkAndSendMessage COMMANDLINE + Command
  End If
  End                            '   注释:  结束新程序的运行
End If
End Sub
看懂了这个例子的话,应该能解决了吧
我也是从别人那里学的,现卖
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘