用VB开发了两个程序,如何用第二个程序控制第一个程序??比如打开了程序一
里面有 text1程序二
里面有 command1运行程序二 点击 command1 使 程序一的text1="123"

解决方案 »

  1.   

    查找程序一里text1的句柄
    然后sendMessage
      

  2.   

    很多方法
    使用SENDMESSAGE简单
      

  3.   

    还有利用SENDMESSAGE发送自定义消息也行
      

  4.   

    用API,findwindow先找出另一个程序的句柄,再找这个句柄下的输入框句柄,然后就sendmessage写入数据就可以了
      

  5.   

    '***********我从自已的代码中截了一段出来,改改就能用了
    Const HWND_NOTOPMOST = 1
    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lparam As Any) As Long
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPrivate Sub send_message()
    Dim SOFT_Handle, BWND_TXT, BWND As Double
    Dim s, txtstring As String
    Dim str(256) As Byte
        SOFT_Handle = FindWindow("#32770", "载入图象文件")
        If SOFT_Handle <> 0 And Len(Text1.Text) <> 0 Then
            BWND_TXT = FindWindowEx(SOFT_Handle, ByVal 0&, "edit", vbNullString)
            s = Trim(Text1.Text)
            Clipboard.SetText s
            SendMessage BWND_TXT, WM_PASTE, 0&, ByVal 0&
       '**********************************************判断发送是否成功,不成功则再发
            str(1) = 1 '最大允许存放256个字符
            SendMessage BWND_TXT, EM_GETLINE, 2, str(0)
            txtstring = StrConv(str, vbUnicode)
            If InStr(1, txtstring, "*.Tga") <> 0 Then SendMessage BWND_TXT, WM_PASTE, 0&, ByVal 0&
      '*******************************************************************************
            BWND = FindWindowEx(SOFT_Handle, ByVal 0&, "Button", "打开(&O)")
            SendMessage BWND, BM_CLICK, 0, ByVal 0& '最后一个参数byref传递也可
            Text1.Text = ""
            Exit Sub
        Else
           SOFT_Handle = FindWindow("#32770", "保存当前图象到此文件")
               If SOFT_Handle <> 0 Then
                    BWND_TXT = FindWindowEx(SOFT_Handle, ByVal 0&, "edit", vbNullString)
                    new_dir = Trim(Text1.Text)
                    Clipboard.SetText new_dir
                    SendMessage BWND_TXT, WM_PASTE, 0&, ByVal 0& '把Text1.hwnd换成你的句柄
                  '**********************************************判断发送是否成功,不成功则再发
                        str(1) = 1 '最大允许存放256个字符
                        SendMessage BWND_TXT, EM_GETLINE, 2, str(0)
                        txtstring = StrConv(str, vbUnicode)
                        If InStr(1, txtstring, "NEW") = 0 Then SendMessage BWND_TXT, WM_PASTE, 0&, ByVal 0&
                  '*******************************************************************************
                    BWND = FindWindowEx(SOFT_Handle, ByVal 0&, "Button", "保存(&S)")
                    SendMessage BWND, BM_CLICK, 0, ByVal 0& '最后一个参数byref传递也可
                    Text1.Text = ""
               End If
        End If
       
    End Sub
      

  6.   

    兄弟,API确实可行,但是如果你的要求如此简单的话,那么DDE会话就是最好的途径了。设置一个控件,例如你所说的text1,设置linkitem,linktopic,在另外一个工程里面链接这个DDE控件,你就可以操作它了,具体的代码你在这里也能搜到。
      

  7.   

    xiao828118(蜗牛) ( ) 信誉:97    Blog 你发这段怎么还载入图片??? 实在看不懂 有容易理解点的代码吗?  楼上说的DDE会话方法是怎么实现呢??
      

  8.   

    用winsocket控件监听某个自定义端口:一端发自定义命令,一端接收命令然后分析后作相应动作
    编程余地要大一些。
    没办法细说,加我qq :397667325,我给你写个例子程序算了
      

  9.   

    dde会话的来了
    實現不同應用程序之間的消息傳遞
        
        兩個VB程序之間如何實現A程序執行某操作后傳遞相應的消息到B程序,B程序根据消息執行相應的
    函數。
        打開VB,新建一個工程,選擇菜單中的"工程->工程1->屬性",把工程名稱改為"P1",把已有的一
    個窗体的"LinkTopic"屬性改為"FormDDE",把"LinkMode"屬性改為"1-Source",添加一個 PictureBox
    控件作為DDE執行控件,命名為picDDE。然后添加一個TextBox控件,命名為"txtInfo",并把"MultiLine"
    屬性設置為"True",以便顯示多行文本,作為消息顯示控件。    
     
    在窗体代碼區輸入以下代碼:
    Const COMMANDLINE = "CommandLine="
    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 SubSub 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 SubSub 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、再運行一次,這次新程序沒有運行成功,而原來運行的程序卻被最大化了,而且文本框中有以
           下字符:(省略)
        3、打開MS-DOS方式,用命令行方式再次運行程序,如P1.Exe  "How  Are  You?"
      

  10.   

    zsj1101(江南神探) ( ) 信誉:100    Blog 用你的方法出现错误啊 
    运行错误 ‘282’
    无外部应用程序响应 DDE 初始化
    而且我不明白这怎么对话?? 只有一个程序?? 我是想两个程序对话啊
      

  11.   

    看看以下我写的:程序要运行两次。第一次不关闭,现运行多一次 
    1、打開"我的電腦",找到P1.EXE并執行。可以看到程序正常運行了。    
        2、再運行一次,這次新程序沒有運行成功,而原來運行的程序卻被最大化了,而且文本框中有以
           下字符:(省略)
      

  12.   

    不用这么复杂吧,findwindow,然后sendkeys 就可以了
      

  13.   

    zsj1101(江南神探) ( ) 信誉:100    Blog 运行第二次 就出现这个错误了
    用你的方法出现错误啊 
    运行错误 ‘282’
    无外部应用程序响应 DDE 初始化
    而且我不明白这怎么对话?? 只有一个程序?? 我是想两个程序对话啊