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

ただし、Word の 2 つのインスタンスでプログラムを実行すると、1 つしか表示されません。これは、Windows 8/7 がインスタンスを処理する方法が原因でしょうか? タスク マネージャーにプロセス (Microsoft Word (32 ビット) (2)) が表示されます。これは、Word の 2 つのインスタンスが開いていることを意味しますよね?!?!

では、私のコードの何が問題なのですか? 例が C# の場合、これで問題ありません。

4

2 に答える 2

1

Denis のおかげで、以下のコードは他のプロセスと連携してプログラムのインスタンスがいくつ開いているかを確認しますが、Windows 8 は WinWord の 1 つのプロセスのみを開き、1 つ以上のインスタンスを開いたとしても、それを 1 つの PID の下に置くようです。

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
于 2013-10-02T19:23:15.880 に答える
-1

「WINWORD」を「WinWord」に変更すると、役立つ場合があります。.GetProcessByName のプロセス名と正確に一致するようにしてください。それ以外では、Windows が .count 呼び出しで 1 つのインスタンスのみを返す可能性があります。その場合、プログラム名のインスタンスを取得し、それを独自のカウント (変数) に割り当てて、目的の結果を得ることができます。

于 2013-10-02T17:31:53.107 に答える