我知道如何建立文件关联
也知道如何截获命令行参数
也知道如何避免打开多个实例程序。
但是俺不知道打开如果命令行参数被另一个程序打开了,如何传递信息给已经打开的那个程序呢?
请高手帮帮忙

解决方案 »

  1.   

    函数说明:RegisterWindowMessage函数定义一个新的窗口消息,该消息保证在整个系统范围内是唯一的。调用SendMessage或PostMessage函数时可以使用该函数返回的消息值。
    参数说明: lpsz
      指向一个以NULL结束的字符串,该字符串指定待登记的消息。
    返回值:若成功地登记了消息,返回值是一个消息标识符。该标识符值的范围在0XC000到0XFFFF之间,否则,返回值为0。
    注释:RegisterWindowMessage函数通常用于为两个合作应用程序之间的通信登记消息。
      若两个不同的应用程序登记了相同的消息字符串,则这两个应用程序返回相同的消息值。该消息一直维持被登记状态,直到Windows会话结束。当多个应用程序必须处理同一消息时才使用RegisterWindowMessage函数。在一个窗口类范围内发送私有消息时,应用程序可使用范围在WM_USER到0X7FFF之间的任意整数。
      

  2.   

    第一,文件要關聯。第二,程序中使用DDE。
      

  3.   

    aspower说的很对,但是能否给一段简单的代码,谢谢
      

  4.   

    两个VB程序之间如何实现A程序执行某操作后传递相应的消息到B程序,B程序根据消息执行相应的函数。  
     
    给你个简单的例子,改改就能用了(动态数据交换技术DDE)  
     
     打开VB,新建一个工程,选择菜单中的“工程->工程1  属性”,把工程名称改为“P1”,把已有的一个窗体的“LinkTopic”属性改为“FormDDE”,把“LinkMode”  属性改为“1  -  Source”,添加一个PictureBox控件作为DDE执行控件,命名为picDDE。然后添加一个  TextBox控件,命名为“txtInfo”,并把“MultiLine”属性设置为“True”,以便显示多行文本,作为消息显示控件。    
     
    最后在窗体代码区输入以下代码:    
    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          注释:        把信息显示出来    
     
    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  
     
    测试一下:    
           把工程“P1”编译成EXE文件(设名称为  P1.EXE  )    
           1、打开“我的电脑”,找到  P1.EXE  并执行。可以看到程序正常运行了。    
           2、再运行一次,这次新程序没有运行成功,而原来运行的程序却被最大化了,而且文本框中有以下    
                 字符:    
     
    窗体已被最大化    
    你已经第  1次重复调用这个程序。    
    但怕您不多给工资,所以只运行了一个  ^_^    
    最后一次运行这个程序的时间是:00-2-6  7:11:01    
     
           3、打开  MS-DOS方式  ,用命令行方式再次运行程序,如  “P1  How  Are  You?”    
                 这时原来运行的程序文本框中又多了几行字:    
     
    窗体已被最大化    
    你已经第  2次重复调用这个程序。    
    但怕您不多给工资,所以只运行了一个  ^_^    
    最后一次运行这个程序的时间是:00-2-6  7:14:32    
    新程序曾以命令行形式运行    
    命令行为:    
    How  Are  You?    
     
    OK,运行完全正确,然后你就可以把它应用的你的程序中了。
      

  5.   

    http://www.zdnet.com.cn/developer/code/story/0,3800066897,20037800-2,00.htmRegisterWindowMessage自定义消息在这里比较长
    你可以自己看下