DDE編程VB(這是以前在CSDN-vb社區混時看到的,寫得比較清楚,原理講得一清二楚)

來源:互聯網
上載者:User

請問用shell或ShellExecute去調用外部的.exe程式, 那麼怎麼得到這個.exe的傳回值

可以考慮用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?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.