EXECUTAR PROGRAMA

USUARIO.EXCLUIDOS 11/03/2005 13:00:37
#72347
Ola pessoal. Estou com um probleminha e gostaria da ajuda de vcs.
Em meu sistema executo um programa externo criado por mim, porem, nao queria que pudesse abri-lo novamente. OK?!?!?!
Ou seja, se ele estiver aberto, não poder abri-lo novamente.
Agradeço a ajuda.
RXGOMES 11/03/2005 13:08:48
#72351
Use o código abaixo

If App.PrevInstance Then
MsgBox "Aplicação já está aberta", vbCritical
ActivatePrevInstance
End
End If
USUARIO.EXCLUIDOS 11/03/2005 13:09:53
#72352
Resposta escolhida
é no Load do Form que você informará o nome do programa a ser monitorado.
O Timer você regula como quiser.
'dá pra gerenciar processos, saber qual programas está em execução e etc.

Private Function barra(cString As String)
Dim Y As Integer
Dim result As String
Dim PATHS As String
For Y = 1 To Len(cString)
result = Mid(Right$(cString, Y), 1, 1)
If result = "\" Then: Exit For
Next
PATHS = Right$(cString, Y - 1)
barra = PATHS
End Function

Private Sub Load_LstProc()
On Error Resume Next
lst_processos.Clear
lst_completo.Clear
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapShot <> 0 Then
uProcess.dwSize = Len(uProcess)
rProcess = ProcessFirst(hSnapShot, uProcess)
Do While rProcess
tPID = uProcess.th32ProcessID
tMID = uProcess.th32ModuleID
lst_processos.AddItem barra(uProcess.szExeFile)
lst_completo.AddItem Hex$(uProcess.th32ProcessID) & " : " & uProcess.szExeFile
rProcess = ProcessNext(hSnapShot, uProcess)
Loop
Call CloseHandle(hSnapShot)
End If
End Sub

Private Sub Form_Load()
Load_LstProc

Dim I As Integer
For I = 0 To lst_processos.ListCount - 1
If UCase(lst_processos.List(I)) = "VB6.EXE" Then
MsgBox "Você está usando o VB"
Exit For
End If
Next
End Sub

Private Sub Timer1_Timer()
Form_Load
End Sub



No módulo você cola:


Public Const MAX_PATH As Integer = 260
Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type

Public Const TH32CS_SNAPPROCESS = &H2
Public Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Global hSnapShot As Long
Global uProcess As PROCESSENTRY32
Public Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Public Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Global rProcess As Long
Global tPID As Long
Global tMID As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hFile As Long) As Long
Public Const PROCESS_TERMINATE = &H1
Global cescolhido As String
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Global hProcess As Long
Global lExitCode As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long




Espero que ajude..
USUARIO.EXCLUIDOS 11/03/2005 14:31:50
#72385
este comando serve muitu bem pra vc

If App.PrevInstance Then
MsgBox "Aplicação já está aberta", vbCritical
ActivatePrevInstance
End
End If

espero ter ajudado
FELIPEA 11/03/2005 18:56:04
#72493
USUARIO.EXCLUIDOS 12/03/2005 22:49:02
#72692
cara vai em iniciar executar, digite "MSCONFIG" vai aparecer uma tela, na orelha desta tela tem um lugar escrito, inicializar, clique ae, vai aparecer todos os programas que o seu computador inicia, ae, é só desmarcar o seu programa, salvar ae o seu programa não vai mais inicializar o seu programa
WEBMASTER 13/03/2005 00:26:53
#72720
Que podes fazer é ficar monitorando as janelas que estão a se abrir, verificando pelo nome do processo ou título da janela. Cria uma variável Booleana cujo valor é setado para True quando o programa em questão é executado através do seu. Caso o monitoramento (que deve ficar em um objeto Timer) note que o programa em questão foi aberto, checa pelo valor da variável Booleana. Caso for True, fecha o programa, caso for False, deixa o programa correr normalmente.
Ou ainda:
Pode fazer a mesma coisa, mas sem a variável Booleana, sendo assim que o Timer somente será ativo quando o programa em questão for aberto uma vez.

Espero ter sido claro, o que muito dúvido =P

Tópico encerrado , respostas não são mais permitidas