[VB2005]在 Sub Main 的 Console 或 Window 應用程式限定為單一執行個體應用程式

比如說在 Windows Media Player 下,不管有沒有開啟,都會只用同一個播放器撥放影音,並可將命令列引數傳遞到原先既有的單一執行個體應用程式,在 VB2005 下,只要啟用應用程式架構,這個問題就變得很簡單,只要勾選完單一執行個體應用程式,問題就結束了,但是若是使用 Sub Main 為進入點的 Console 程式,或是 MDI/SDI 的 Windows 應用程式,是無法使用這個功能,就必須改為手動。
 
搜尋眾多資料,終於找到一個 Console 範例在下面網址,我自己在改寫為 Windows 程式,測試可正常執行,我的測試例在原始參考網址下面:
 
放在 Startup.vb 模組內

Class MyApplication

     Inherits Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase

 

     Sub New()

           MyBase.New()

           Me.IsSingleInstance = True 調整為單一執行個體應用程式(single-instance)

     End Sub

 

     Protected Overrides Sub OnRun() 原先 Sub Main 的內容

           Application.Run(Form1)

     End Sub

 

     Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup

           MsgBox("Startup")

     End Sub

 

     Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance

           把傳遞過來的參數以 MsgBox 顯示在畫面上

           Dim strCommand As String = ""

           With e.CommandLine

                For i As Integer = 0 To .Count – 1

                     strCommand &= String.Format("{0}).{1}" & vbNewLine, i, .Item(i))

                Next

           End With

           MsgBox("NextInstance: " & strCommand)

     End Sub

End Class

 

Module Startup

     Sub Main(ByVal args() As String)

           Dim App As New MyApplication

           App.Run(args)

     End Sub

End Module

 

廣告
Categories: 技術分享 | 4 則迴響

文章分頁導航

4 thoughts on “[VB2005]在 Sub Main 的 Console 或 Window 應用程式限定為單一執行個體應用程式

  1. milagros

    您好,
    我想請問如果我要做類似這樣的exe,也是用 sub main為起始,
    我希望可以做到,呼叫.EXE檔,傳參數並觸發事件
    我希望的是有點像 Windows Media Player的概念,執行中的EXE,可以接收參數,並觸發此 .EXE的Function

    請問要如果實現呢?

    按讚數

  2. milagros

    可是我沒辦法呼叫.EXE裡面的function…我自己用了一個例子去做

    我有二個專案Callindex,index
    Callindex上有三個button,分別為Button1,Button2,Button3

    index則是以Sub Main 為進入點的執行檔
    且index有一個a Function 可將 me.text改為 傳入的參數

    我希望callindex 可以呼叫 index 的exe
    在callindex 上點選button1 會出現 form且form.text為button1
    在次點選button2 會將剛剛的form的 form.text改為button2

    只是這個呼叫a 的動作 我試著加在 Private Sub MyApplication_StartupNextInstance 中
    結果無法= =

    按讚數

  3. milagros

    剛又重run一次
    居然又可以了…之前會不行,可能是錯在其他的地方…

    謝謝 璉大~

    按讚數

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

在WordPress.com寫網誌.

%d 位部落客按了讚: