none
Processos do Windows RRS feed

  • Pergunta

  • Boa noite , criei um botão que me mostra todos os programas abertos do Windows , mas eu queria adicionar mais função no meu executável , Ex: botão para minimizar, maximar e fechar um determinado programa q está aberto no Windows.

    Alguém pode me ajudar ?

    sexta-feira, 23 de outubro de 2015 22:17

Respostas

  • Ola...

    Bom,esse recurso nao existe no net Framework,entao teremos que utilizar WinAPI ou Pinvoke,aqui está o link
    em que descreve cada uma das constantes que voce queira usar futuramente para trabalhar com a API:

    ShowWindow

    Segue o codigo comentado:

    REM IMPORTANTE VOCE IMPORTAR ESSE NAMESPACE PARA QUE A CHAMADA DA API FUNCIONE
    Imports System.Runtime.InteropServices
    
    Public Class Form1
    
        REM TEMOS QUE USAR RECURSOS NATIVO DO WINDOWS PINVOKE,POIS O NET FRAMEWORK NAO POSSUI ESSE RECURSO
        <DllImport("user32.dll")> _
        Private Shared Sub ShowWindow(hWnd As IntPtr, nCmdShow As Integer)
        End Sub
    
        REM JANELA MINIMIZADA
        Private Const SW_SHOWMINIMIZED = 2
    
        REM JANELA MAXIMIZADA
        Private Const SW_MAXIMIZE = 3
    
        REM CRIAREMOS UM VETOR NO QUAL RECEBERÁ OS PROCESSOS DO WINDOWS,PARA PDOERMOS MANIPULAR PELOS BOTOES
        Private _processos() As Process
    
        REM OBTEM OS PROCESSOS
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            _processos = Process.GetProcesses()
    
            For Each _p In _processos
                Me.ListBox1.Items.Add(_p.ProcessName)
            Next
        End Sub
    
        REM AQUI OBTEMOS O WINDOWS HANDLE,O PONTEIRO DE MEMORIA CORRESPONDENTE AO NOME DA JANELA PARA PODERMOS PASSAR PARA A API
        REM E ELA SE ENCARREGAR DE MAXIMIZAR,REPARE QUE ESTAMOS PASSANDO A CONSTANTE SW_MAXIMIZE
        REM OBTEMOS O VALOR DA COLEÇÃO USANDO LINQ
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim _valor As IntPtr = _processos.First(Function(f) _
            f.ProcessName.Equals(Me.ListBox1.SelectedItem.ToString())).MainWindowHandle
    
            ShowWindow(_valor, SW_MAXIMIZE)
        End Sub
    
    
        REM MESMA COISA QUE MAXIMIZAR,SÓ MUDAMOS A CONSTANTE
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            Dim _valor As IntPtr = _processos.First(Function(f) _
            f.ProcessName.Equals(Me.ListBox1.SelectedItem.ToString())).MainWindowHandle
    
            ShowWindow(_valor, SW_SHOWMINIMIZED)
        End Sub
    End Class

    Para matar o processo voce usa o metodo Kill(),assim:

     REM FINALIZA A TAREFA DO PROCESSO SELECIONADO
        Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
            Dim _valor As Integer = Array.FindIndex(_processos, Function(f) f.ProcessName.Equals(Me.ListBox1.SelectedItem.ToString()))
            _processos(_valor).Kill()
        End Sub

    Abraços...


    Microsoft Technology Associate (MTA)

    • Editado Eduardo xUni sábado, 24 de outubro de 2015 00:55
    • Marcado como Resposta Marcos SJ segunda-feira, 26 de outubro de 2015 13:11
    sábado, 24 de outubro de 2015 00:43

Todas as Respostas

  • OI amigo para maximizar vc teria que ter o caminho do arquivo ex a baixo 

    maximizar 

    Public Class Form1

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim proce As New ProcessStartInfo
            proce.FileName = ("notepad")
            proce.WindowStyle = ProcessWindowStyle.Maximized
            Process.Start(proce)
        End Sub
    End Class

    minimizar e so alterar  proce.WindowStyle = ProcessWindowStyle.Minimized

    hide = ProcessWindowStyle.Hidden

    normal = ProcessWindowStyle.Normal

    etc... 

    sexta-feira, 23 de outubro de 2015 22:55
  • Ola...

    Bom,esse recurso nao existe no net Framework,entao teremos que utilizar WinAPI ou Pinvoke,aqui está o link
    em que descreve cada uma das constantes que voce queira usar futuramente para trabalhar com a API:

    ShowWindow

    Segue o codigo comentado:

    REM IMPORTANTE VOCE IMPORTAR ESSE NAMESPACE PARA QUE A CHAMADA DA API FUNCIONE
    Imports System.Runtime.InteropServices
    
    Public Class Form1
    
        REM TEMOS QUE USAR RECURSOS NATIVO DO WINDOWS PINVOKE,POIS O NET FRAMEWORK NAO POSSUI ESSE RECURSO
        <DllImport("user32.dll")> _
        Private Shared Sub ShowWindow(hWnd As IntPtr, nCmdShow As Integer)
        End Sub
    
        REM JANELA MINIMIZADA
        Private Const SW_SHOWMINIMIZED = 2
    
        REM JANELA MAXIMIZADA
        Private Const SW_MAXIMIZE = 3
    
        REM CRIAREMOS UM VETOR NO QUAL RECEBERÁ OS PROCESSOS DO WINDOWS,PARA PDOERMOS MANIPULAR PELOS BOTOES
        Private _processos() As Process
    
        REM OBTEM OS PROCESSOS
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            _processos = Process.GetProcesses()
    
            For Each _p In _processos
                Me.ListBox1.Items.Add(_p.ProcessName)
            Next
        End Sub
    
        REM AQUI OBTEMOS O WINDOWS HANDLE,O PONTEIRO DE MEMORIA CORRESPONDENTE AO NOME DA JANELA PARA PODERMOS PASSAR PARA A API
        REM E ELA SE ENCARREGAR DE MAXIMIZAR,REPARE QUE ESTAMOS PASSANDO A CONSTANTE SW_MAXIMIZE
        REM OBTEMOS O VALOR DA COLEÇÃO USANDO LINQ
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim _valor As IntPtr = _processos.First(Function(f) _
            f.ProcessName.Equals(Me.ListBox1.SelectedItem.ToString())).MainWindowHandle
    
            ShowWindow(_valor, SW_MAXIMIZE)
        End Sub
    
    
        REM MESMA COISA QUE MAXIMIZAR,SÓ MUDAMOS A CONSTANTE
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            Dim _valor As IntPtr = _processos.First(Function(f) _
            f.ProcessName.Equals(Me.ListBox1.SelectedItem.ToString())).MainWindowHandle
    
            ShowWindow(_valor, SW_SHOWMINIMIZED)
        End Sub
    End Class

    Para matar o processo voce usa o metodo Kill(),assim:

     REM FINALIZA A TAREFA DO PROCESSO SELECIONADO
        Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
            Dim _valor As Integer = Array.FindIndex(_processos, Function(f) f.ProcessName.Equals(Me.ListBox1.SelectedItem.ToString()))
            _processos(_valor).Kill()
        End Sub

    Abraços...


    Microsoft Technology Associate (MTA)

    • Editado Eduardo xUni sábado, 24 de outubro de 2015 00:55
    • Marcado como Resposta Marcos SJ segunda-feira, 26 de outubro de 2015 13:11
    sábado, 24 de outubro de 2015 00:43