Ir para conteúdo
Fórum Script Brasil
  • 0

Detecção De Programa Rodando...


Guest --bsmith --

Pergunta

Guest --bsmith --

Olá amigos,

Gostaria de fazer duas perguntas que se enquadrariam no título dest post, porém, imagino que uma seja mais simples, já a outra deve ser complicada:

Gostaria de criar um programa para detectar outro programa rodando no computador do usuário nos seguintes casos:

1- Detectar um programa rodando por seu nome.

2- Detectar o consumo de processamento de CPU e de memoria RAM deste aplicativo (por nome)

3- (a que imagino ser complicada): Detectar um aplicativo em execução por alguma informação que seja "capturavel" de outro processo. Neste caso, eu precisaria saber se existe algum meio de detectar um programa sem ser por seu nome.. se sim, como posso capturar informações deste executavel para que futuramente eu possa programar algum meio de verificação para ver se o mesmo está em execução no sistema? Obrigado.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Olá amigos,

Gostaria de fazer duas perguntas que se enquadrariam no título dest post, porém, imagino que uma seja mais simples, já a outra deve ser complicada:

Gostaria de criar um programa para detectar outro programa rodando no computador do usuário nos seguintes casos:

1- Detectar um programa rodando por seu nome.

2- Detectar o consumo de processamento de CPU e de memoria RAM deste aplicativo (por nome)

3- (a que imagino ser complicada): Detectar um aplicativo em execução por alguma informação que seja "capturavel" de outro processo. Neste caso, eu precisaria saber se existe algum meio de detectar um programa sem ser por seu nome.. se sim, como posso capturar informações deste executavel para que futuramente eu possa programar algum meio de verificação para ver se o mesmo está em execução no sistema? Obrigado.

1- Para você detectar um programa que está executando ou não é "fácil" basta usar a API FindWindow. tipo FindWindow(vbNullString, "Form1") isto retornaria um handle do windows se existisse um programa com o caption "Form1".

2 e 3 - A única forma que conheço(deve haver muitas outras) de pegar informações sobre programas rodando em memória é atraves das APIs de "Tool Help Functions" e nunca tentei cruzar as informações vindas da FindWindow com as informações destas APIs. para usar estas APIs primeiro você tem que chamar CreateToolhelp32Snapshot para criar um "snapshot" do sistema nese momento, com o retorno desta função você executaria outra API Process32First para ir ao primerio processo rodando em memória. depois navegaria pelos restantes usando Process32Next. estas funções já retornam um tipo de dados PROCESSENTRY32 que tem diversas informações sobre o programa como nome do executável, tamanho(talvez até do da memória gasta..) algo como o que segue:

Const TH32CS_SNAPHEAPLIST = &H1

Const TH32CS_SNAPPROCESS = &H2

Const TH32CS_SNAPTHREAD = &H4

Const TH32CS_SNAPMODULE = &H8

Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)

Const MAX_PATH As Integer = 260

Private 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 Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long

Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long

Public Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long

'aqui seria uma procedimento

'---------------------------------------

Dim i As Integer

Dim Handle As Long

Dim uProcess As PROCESSENTRY32

Handle = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)

uProcess.dwSize = Len(uProcess)

ReDim ProcessId(Len(uProcess))

ReDim ProcessEx(Len(uProcess))

ret = Process32First(Handle, uProcess)

i = 0

Do While ret

Form1.lstprocess.AddItem uProcess.szExeFile & " - " & uProcess.th32ModuleID

ProcessEx(i) = uProcess.szExeFile

ProcessId(i) = uProcess.th32ProcessID

ret = Process32Next(Handle, uProcess)

i = i + 1

Loop

Form1.Label3.Caption = "Processos Total: " & i - 1

CloseHandle Handle

'------------------------------------------------

'------------------------------------------------

mais ou menos por ai.. existe também outras APIs que você pode pesquisar como OpenProcess, GetProcessMemoryInfo (que verifica memória usada por um processo), GetModuleFileNameEx. enfim.. tem muita coisa que você pode pesquisar. espero ter ajudado.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...