2013-10-02 35 views
1

現在我有下面的代碼應該顯示在加載事件打開實例的數量VB.net顯示外部程序的多個實例

Class MainWindow 

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
     Dim processCount As Integer = Process.GetProcessesByName("WinWord").Count() 

     MessageBox.Show(String.Format("{0} Instances Running", processCount.ToString())) 
    End Sub 
End Class 

不過,如果我使用Word的兩個實例運行程序,它只顯示1.這是由於Windows 8/7如何處理實例?在任務管理器中,我看到了這個過程(Microsoft Word(32-bit)(2)),這對我來說意味着2個單詞是開放的,對嗎?!?!

那麼我的代碼有什麼問題?如果你的例子在C#中,這很好!

+0

我甚至嘗試此點心實例()作爲工藝= Process.GetProcessesByName( 「WINWORD」) 對於每個實例作爲的System.Diagnostics.Process在實例中InstanceCount = 1 下一步。其中如果我有兩個WinWord實例,它仍然只顯示1. TextBlock1.Text = InstanceCount –

+0

我運行了你的代碼/場景,並沒有遇到問題。我得到2,甚至玩過定時,在運行時開始一個新的進程,GetProcessesByName肯定會重新查詢當前正在運行的內容。還有其他的東西是你的代碼的其他部分在做什麼或者是否包含了可能導致這種行爲的東西? –

+0

嗯沒有。只是從加載事件中運行它。查看上面更新的代碼。我正在運行Windows 8.這可能是原因。讓我試着運行其他程序,看看我看到了多少個實例。 –

回答

-1

如果您將「WINWORD」更改爲「WinWord」,可以幫助您解決問題。嘗試完全匹配.GetProcessByName中的進程名稱。除此之外,它可能是Windows僅在那裏的.count調用返回一個實例。在這種情況下,您可以獲取程序名稱的實例,並將其分配給您自己的計數(變量)以獲得所需的結果。

1

由於Denis下面的代碼與其他進程一起工作,以查看有多少個程序實例處於打開狀態,但是似乎Window 8僅打開一個WinWord進程並將其放在一個PID下,即使您打開了多個1個實例。

Class MainWindow 

    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 
     Dim processCount As Integer = Process.GetProcessesByName("WinWord").Count() 

     MessageBox.Show(String.Format("{0} Instances Running", processCount.ToString())) 
    End Sub 
End Class