none
Alle aktiven Anwendungen beenden

    Question

  • Hallo!

    Ich möchte in meinem Programm eine Funktion einfügen, die alle aktiven Anwendungen beendet.
    Kann mir vielleicht jemand sagen, wie man das programmieren kann?

    Björn
    Thursday, March 04, 2010 2:22 PM

Answers

  • Hallo Björn96,

    Als Startpunkt der Diskussion kannst Du sehen im folgenden Beispiel wie erstmals alle Aktiven Anwendungen die in der Applications Registerkarte des Task Managers sind, in einer ListBox aufgelistet werden. Nachher durch doppelklick auf einer der Einträge in der Liste wird die Anwendung geschlossen. Kannst Du genauer sagen was Du meintest mit “Alle aktiven Anwendungen“?

    Imports System.Diagnostics
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim arrProcesses As Process() = Process.GetProcesses()
            ListBox1.Items.Clear()
    
            For i As Integer = 0 To arrProcesses.Length - 1
                Dim objProcess As Process = arrProcesses(i)
                If Not (objProcess.MainWindowHandle = IntPtr.Zero) Then ListBox1.Items.Add(New MyProcInfo(objProcess))
            Next
    
    
        End Sub
        Private Class MyProcInfo
            Public ProcInfo As Process
    
            Private Sub New()
            End Sub
    
            Public Sub New(ByVal objProcInfo As Process)
                ProcInfo = objProcInfo
            End Sub
    
            Public Overrides Function ToString() As String
                Return DirectCast(IIf((ProcInfo.MainWindowHandle = IntPtr.Zero), "", "* "), String) & ProcInfo.ProcessName & " (" & ProcInfo.Id & ")"
            End Function
        End Class
    
        Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
            If Not (ListBox1.SelectedItem Is Nothing) Then
                Dim objProcess As MyProcInfo = DirectCast(ListBox1.SelectedItem, MyProcInfo)
    
                If Not (objProcess.ProcInfo.MainWindowHandle = IntPtr.Zero) Then
                    Dim hWnd As IntPtr = objProcess.ProcInfo.MainWindowHandle
                    If IsIconic(hWnd) Then ShowWindowAsync(hWnd, SW_RESTORE)
                    SetForegroundWindow(hWnd)
    
                    objProcess.ProcInfo.CloseMainWindow() '//Prozess wird beendet
                    '//objProcess.ProcInfo.Kill()
                End If
            End If
    
        End Sub
    End Class

    [Module1.vb]

    Imports System.Runtime.InteropServices
    Module Module1
        <DllImport("user32.dll")> _
         Function SetForegroundWindow(ByVal hWnd As IntPtr) As Boolean
        End Function
    
        <DllImport("user32.dll")> _
        Function ShowWindowAsync(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
        End Function
    
        <DllImport("user32.dll")> _
        Function IsIconic(ByVal hWnd As IntPtr) As Boolean
        End Function
    
        Public Const SW_HIDE As Integer = 0
        Public Const SW_SHOWNORMAL As Integer = 1
        Public Const SW_SHOWMINIMIZED As Integer = 2
        Public Const SW_SHOWMAXIMIZED As Integer = 3
        Public Const SW_SHOWNOACTIVATE As Integer = 4
        Public Const SW_RESTORE As Integer = 9
        Public Const SW_SHOWDEFAULT As Integer = 10
    
    End Module




    Lies mal durch auch folgender Artikel: http://www.code-magazine.com/article.aspx?quickid=0403051&page=1

    Grüße,

    Robert

    Thursday, March 04, 2010 4:29 PM

All replies

  • Hallo Björn,

    möchtest du dabei auch den PC runterfahren?

    'System.Diagnostic.Process.Start("shutdown.exe", "-s -f -t 00")
    
            'Die Bedeutung der Parameters lautet:
    
            '"-s" bedeutet shutdown. Wenn du reboot möchtest dan kannst du "-s" mit "-r" austauschen.
            '"-f" bedeutet das die laufenden Applikationen gezwungen sind zu schliessen ohne Mahnung (forced in Englisch)
            '"-t 00" bedeutet die bestimmte Zeitabschaltung ist XX Sekunden. Selbstverständlich 00 ist ohne Countdown wie du es bemerkt hast.
            '"-r" vermutlich reeboot
            Process.Start("shutdown.exe", "-s -f -t 00")
    Neustart wäre dann:

    Process.Start("shutdown.exe", "-r -f -t 00")    'neustart
    Vieleicht helfen die Codes ja ein wenig.

    LG Stefan
    Liebe Grüße Stefan
    Thursday, March 04, 2010 4:28 PM
  • Hallo Björn96,

    Als Startpunkt der Diskussion kannst Du sehen im folgenden Beispiel wie erstmals alle Aktiven Anwendungen die in der Applications Registerkarte des Task Managers sind, in einer ListBox aufgelistet werden. Nachher durch doppelklick auf einer der Einträge in der Liste wird die Anwendung geschlossen. Kannst Du genauer sagen was Du meintest mit “Alle aktiven Anwendungen“?

    Imports System.Diagnostics
    Public Class Form1
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim arrProcesses As Process() = Process.GetProcesses()
            ListBox1.Items.Clear()
    
            For i As Integer = 0 To arrProcesses.Length - 1
                Dim objProcess As Process = arrProcesses(i)
                If Not (objProcess.MainWindowHandle = IntPtr.Zero) Then ListBox1.Items.Add(New MyProcInfo(objProcess))
            Next
    
    
        End Sub
        Private Class MyProcInfo
            Public ProcInfo As Process
    
            Private Sub New()
            End Sub
    
            Public Sub New(ByVal objProcInfo As Process)
                ProcInfo = objProcInfo
            End Sub
    
            Public Overrides Function ToString() As String
                Return DirectCast(IIf((ProcInfo.MainWindowHandle = IntPtr.Zero), "", "* "), String) & ProcInfo.ProcessName & " (" & ProcInfo.Id & ")"
            End Function
        End Class
    
        Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
            If Not (ListBox1.SelectedItem Is Nothing) Then
                Dim objProcess As MyProcInfo = DirectCast(ListBox1.SelectedItem, MyProcInfo)
    
                If Not (objProcess.ProcInfo.MainWindowHandle = IntPtr.Zero) Then
                    Dim hWnd As IntPtr = objProcess.ProcInfo.MainWindowHandle
                    If IsIconic(hWnd) Then ShowWindowAsync(hWnd, SW_RESTORE)
                    SetForegroundWindow(hWnd)
    
                    objProcess.ProcInfo.CloseMainWindow() '//Prozess wird beendet
                    '//objProcess.ProcInfo.Kill()
                End If
            End If
    
        End Sub
    End Class

    [Module1.vb]

    Imports System.Runtime.InteropServices
    Module Module1
        <DllImport("user32.dll")> _
         Function SetForegroundWindow(ByVal hWnd As IntPtr) As Boolean
        End Function
    
        <DllImport("user32.dll")> _
        Function ShowWindowAsync(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
        End Function
    
        <DllImport("user32.dll")> _
        Function IsIconic(ByVal hWnd As IntPtr) As Boolean
        End Function
    
        Public Const SW_HIDE As Integer = 0
        Public Const SW_SHOWNORMAL As Integer = 1
        Public Const SW_SHOWMINIMIZED As Integer = 2
        Public Const SW_SHOWMAXIMIZED As Integer = 3
        Public Const SW_SHOWNOACTIVATE As Integer = 4
        Public Const SW_RESTORE As Integer = 9
        Public Const SW_SHOWDEFAULT As Integer = 10
    
    End Module




    Lies mal durch auch folgender Artikel: http://www.code-magazine.com/article.aspx?quickid=0403051&page=1

    Grüße,

    Robert

    Thursday, March 04, 2010 4:29 PM
  • Es sollen alle Anwendungen, die im Taskmanager unter "Anwendungen" aufgelistet sind, geschlossen werden. Dabei soll der Computer nicht Herunterfahren.
    Thursday, March 04, 2010 4:33 PM
  • Hallo Björn96,

    Haben Dir die Antworten geholfen?

    Grüße,
    Robert

    Monday, March 08, 2010 4:15 PM
  • Hallo Björn,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Wednesday, March 10, 2010 3:37 PM