Prozess wird beendet und wird wieder angzeigt!

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von asusdk.

    Anbei mal dein Beispiel in überarbeiteter Form (hatte nix andres zu tun heute :P ) ist allerdings gerade in Framework 4.5, da ich 3.5 nicht auf der Maschine hab, solltest du die 3.5 brauchen, einfach umstellen.
    Dateien
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    @Mika2828
    Danke, für diesen Code. :)
    Aber leider, hat er manchmal auch den Bug.
    Dass der Prozess einfach in der Liste bleibt.

    @asusdk
    Danke, für diesen Code. :)
    Bis jetzt hat der Versuch geklappt.
    Habe es auf Windows 10 & XP getestet, mit einem geringen .NET Framework.

    Jetzt versuche ich das Programm irgendwie umzuschreiben.
    Denn ich möchte, im „btnProzesseBeenden_Click“, auch mehre Programme per Click beenden.
    Deshalb ist mein „lvProzesse“ auf MultiSelect = True.
    Ich hoffe, das die Änderung nicht zu schwer wird. ?(


    VB.NET-Quellcode

    1. Private Sub btnProzesseBeenden_Click(sender As Object, e As EventArgs) Handles btnProzesseBeenden.Click
    2. Dim tmpProcess As Process = ActiveProcessList.Item(Me.lvProzesse.FocusedItem.Index)
    3. Dim tmpProcessName As String = IO.Path.GetFileName(tmpProcess.MainModule.FileName).ToLower
    4. If MessageBox.Show(tmpProcessName & " beenden?", "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.No _
    5. Then Exit Sub
    6. ' Programm beenden...
    7. tmpProcess.CloseMainWindow()
    8. ActiveProcessList.Remove(tmpProcess)
    9. frmHaupt.ActiveProcessList = ActiveProcessList
    10. Me.DialogResult = DialogResult.Yes
    11. Me.Close()
    12. End Sub

    Visual Basic.NET 8o
    MS-SQL
    8o
    hm ok, in dem Sample das ich hier hatte war multiselect auf false daher dachte ich es geht nur um einen process, ich gucks mir nochmal schnell an

    Nachtrag: @Cheffboss
    Dazu hab ich den ganzen fensterCode nochmal anpassen müssen, wie folgt:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class frmFensterFrage
    3. Public ActiveProcessList As List(Of Process) = New List(Of Process)
    4. Sub New(blnValues As Boolean, WerteItems As List(Of Process), Optional wert1 As List(Of String) = Nothing)
    5. ' Dieser Aufruf ist für den Designer erforderlich.
    6. InitializeComponent()
    7. ActiveProcessList = WerteItems
    8. CopyActiveProcessestoListView(ActiveProcessList)
    9. lvProzesse.Items(0).Selected = True
    10. End Sub
    11. Private Sub btnProzesseBeenden_Click(sender As Object, e As EventArgs) Handles btnProzesseBeenden.Click
    12. If Me.lvProzesse.SelectedItems.Count > 0 Then
    13. CloseProcesses(Me.lvProzesse.SelectedIndices)
    14. Me.DialogResult = DialogResult.Yes
    15. Me.Close()
    16. End If
    17. End Sub
    18. Private Sub CloseProcesses(ClosethisProcesses As ListView.SelectedIndexCollection)
    19. Dim tmpProcessList As New List(Of Process)
    20. For Each tmpIndex As Integer In ClosethisProcesses
    21. tmpProcessList.Add(ActiveProcessList.Item(tmpIndex))
    22. Next
    23. Dim tmpCloseableProcessList As New List(Of Process)
    24. For Each tmpP As Process In tmpProcessList
    25. Dim tmpProcessName As String = IO.Path.GetFileName(tmpP.MainModule.FileName).ToLower
    26. If MessageBox.Show($"Den Prozess ""{tmpProcessName}"" beenden?", "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
    27. tmpCloseableProcessList.Add(tmpP)
    28. End If
    29. Next
    30. For Each CloseableProcess As Process In tmpCloseableProcessList
    31. CloseableProcess.CloseMainWindow()
    32. ActiveProcessList.Remove(CloseableProcess)
    33. Next
    34. frmHaupt.ActiveProcessList = ActiveProcessList
    35. End Sub
    36. Private Sub CopyActiveProcessestoListView(_ActiveProcesslist As List(Of Process))
    37. Me.lvProzesse.Items.Clear()
    38. For Each tmpProcess As Process In _ActiveProcesslist
    39. Dim tmpListViewItem As New ListViewItem(IO.Path.GetFileName(tmpProcess.MainModule.FileName).ToLower)
    40. tmpListViewItem.SubItems.Add($"{GetRamUsageOfProcess(tmpProcess)} MB")
    41. tmpListViewItem.SubItems.Add(tmpProcess.MainModule.FileName)
    42. If Not Me.lvProzesse.Items.Contains(tmpListViewItem) Then Me.lvProzesse.Items.Add(tmpListViewItem)
    43. Next
    44. End Sub
    45. Private Function GetRamUsageOfProcess(ByVal P As Process) As String
    46. Dim Memory As Double = (P.WorkingSet64 / 1024) / 1024
    47. Return FormatNumber(Math.Round(Memory), 0)
    48. End Function
    49. End Class


    Nachtrag 2: Code nochmal korrigiert, so dass dein Beenden Button einfach nix macht, sollte kein Item ausgewählt sein

    Nachtrag 3: Ok Ok, das wars nu aber mit den Nachträgen :P - Code nochmal gekürzt und vereinfacht, da die MultipleCloseMethode auch mit einem einzelnen Process funktioniert, die Aufteilung in CloseSingleProcess und CloseMultipleProcesses ist nicht erforderlich, Code im Spoiler angepasst
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „asusdk“ ()

    @an alle
    Vielen Dank, für eure Hilfe. :)
    Und hilfreichen Beiträgen.
    Das Forum und die Member sind top!

    @asusdk
    Ein großes Dankeschön an dich. :)
    Du hast mir sehr, sehr, geholfen.
    Ich bin sehr zufrieden, dass mein Problem nun weg ist.
    Nochmals, ein Dankeschön! :thumbup:
    Visual Basic.NET 8o
    MS-SQL
    8o