两个VB程序之间如何实现A程序执行某操作后传递相应的消息到B程序,B程序根据消息执行相应的函数。

解决方案 »

  1.   

    给你个简单的例子,改改就能用了(动态数据交换技术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
      

  2.   

    测试一下: 
        把工程“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,运行完全正确,然后你就可以把它应用的你的程序中了。 
      

  3.   

    BOOL PostMessage(
    HWND hWnd, 
    UINT Msg, 
    WPARAM wParam, 
    LPARAM lParam 
    ); 
    LRESULT SendMessage(
    HWND hWnd, 
    UINT Msg, 
    WPARAM wParam, 
    LPARAM lParam );
      

  4.   

    我照以上做了可在执行为什么显示错误:
    282:无外部应用程序响应DDE初始化