VERIFICAR SE UM EXECUTAVEL ESTA ABERTO

ALEXRONCHI 12/01/2012 15:56:55
#393089
Olá rapazeada,
Gostaria de saber, se existe alguma forma de eu saber se um executável, tipo NOTEPAD está aberto?
E caso ele já esteja aberto, colocar ele em foco, à frente dos outros aplicativos abertos na tela

Valeu!
EXPERTVB6 14/01/2012 11:20:43
#393232
Resposta escolhida
Tem várias formas, através do nome das janelas abertas ou pelo próprio nome de processo em execução, mas aí já é outros quinhentos pois exige mais perícia de programação e agora to sem tempo. Vou te mostrar um mais simples:

Tem duas formas simples pelo uso da API FindWindow porém tem que ter o nome exato da Janela aberta.

Neste caso caso então o mais ideal é enumerar as janelas do Windows verificando se cada uma contém a palavra chave [Ô]Bloco de Notas[Ô] no título e joga o foco trazendo a janela para frente com a API SetForegroundWindow porém antes checando se a janela está minimizada através da API IsIconic pois terá que Maximiza-la através da API ShowWindow com o argumento SW_RESTORE antes de chamar a API SetForegroundWindow:

Crie um novo Projeto Standard EXE , adicione 1 commandbutton no Form e adicione os seguintes codigos:
--------------------------------------------------------------------------------------------------------------------------------------------------

Option Explicit

Private Sub Command1_Click()
Call JanelaOnForeground([Ô]Bloco de notas[Ô])
End Sub

Agora crie um Módulo e adicione os seguintes códigos:
----------------------------------------------------------------------------

Option Explicit

Private Declare Function GetDesktopWindow Lib [Ô]user32[Ô] () As Long
Private Declare Function EnumChildWindows Lib [Ô]user32[Ô] (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowText Lib [Ô]user32[Ô] Alias [Ô]GetWindowTextA[Ô] (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib [Ô]user32[Ô] Alias [Ô]GetWindowTextLengthA[Ô] (ByVal hwnd As Long) As Long
Private Declare Function SetForegroundWindow Lib [Ô]user32[Ô] (ByVal hwnd As Long) As Long
Private Declare Function IsIconic Lib [Ô]user32[Ô] (ByVal hwnd As Long) As Long
Private Declare Function ShowWindow Lib [Ô]user32[Ô] (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Private Const SW_MAXIMIZE = 3
Private Const SW_RESTORE = 9

Public sParteTitulo As String

Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim sJanela As String

sJanela = Space$(255)
GetWindowText hwnd, sJanela, Len(sJanela)
sJanela = Left$(sJanela, InStr(sJanela, Chr(0)) - 1)

If InStr(sJanela, sParteTitulo) <> 0 Then
If IsIconic(hwnd) Then ShowWindow hwnd, SW_RESTORE
SetForegroundWindow hwnd
End If

EnumChildProc = 1
End Function

Public Sub JanelaOnForeground(ParteDoTitulo As String)
sParteTitulo = ParteDoTitulo
EnumChildWindows GetDesktopWindow, AddressOf EnumChildProc, ByVal 0&
End Sub
Tópico encerrado , respostas não são mais permitidas