私のアプリケーションでは、ユーザーがファイルを開くダイアログからプログラムを追加できるようにし、アイテムをリストビューに追加して、アイテムの場所をタグに保存します。だから私がやろうとしているのは、リストビュー内のプログラムが選択されてボタンが押されたときにタイマーを開始し、このタイマーがプロセスが実行されているかどうかを確認し、プロセスが実行されていない場合はプロセスを起動し、一度プロセスが起動され、プロセスのウィンドウ タイトルが取得され、別のフォームのテキスト ボックスに送信されます。
編集:問題は、なぜそれが機能していないのか、誰かがそれを理解できるかどうかです。つまり、プロセスを開始してから、フォームを閉じてプロセスウィンドウのタイトルを別のフォームのテキストボックスに追加し始めたときです。私はそれを機能させようとしましたが、できません。取得しているプロセス名が正しいことはわかっています。私の問題は、for ループに関係していると思います。基本的に、現在目に見えることは何もしていません。
私は自分のコードに非常に近いと感じており、わずかな調整が必要なだけだと思っています。どんな助けでも大歓迎です。私のコーディング慣行がそれほど優れていない場合は申し訳ありませんが、これはかなり新しいものです。
**編集:解決策が見つかりました。タイマーがプロセスを実行できるようにするコードをボタンに追加しました。また、別の問題は実際にファイルを読み取る方法でした.replace関数を使用して、ファイルパスコードから「.exe」を削除する必要がありました.
編集 2:より良い解決策が Mark Hall によって投稿されました。エラーの可能性が少ないため、彼のコードを使用しています。
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim s As String = ListView1.SelectedItems(0).Tag
Dim myFile As String = Path.GetFileName(s)
Dim mu As String = myFile.Replace(".exe", "").Trim()
Dim f As Process
Dim p As Process() = Process.GetProcessesByName(mu)
For Each f In p
If p.Length > 0 Then
For i As Integer = 0 To p.Length - 1
ProcessID = (p(i).Id)
AutoMain.Name.Text = f.MainWindowTitle
Timer1.Enabled = False
Me.Close()
Next
Else
ProcessID = 0
End If
If ProcessID = 0 Then
Process.Start(mu)
End If
Next
End Sub