GARANTIR DESCONTO

Fórum como verificar se um aplicativo esta rodando? #362355

11/08/2008

0

boa noite,

Preciso saber se um aplicativo esta rodando para poder fazer uma ação como faço isso...Ex. tenho um função que copia um arq. exe de um lugar para outro, mas se o executavel estiver rodando da pau, portanto preciso verificar se este excutavel esta rodando na origem.
t+


Xprata

Xprata

Responder

Posts

12/08/2008

Paullsoftware

bem, para localizar uma janela pelo título você pode usar o comando FindWindow e para finalizar esse aplicativo você pode usar o comando SendMessage passados os parametros solicitando o fechamento do mesmo:::

procedure TForm1.Button1Click(Sender: TObject);
var
Aberto:HWND;
begin
Aberto := FindWindow(nil,´Calculadora´);
if Aberto <> 0 then
SendMessage(Aberto,WM_CLOSE,0,0);
end;

No exemplo eu fecho a Calculadora do Windows, mais pode ser qualquer títlulo, espero ter ajudado! :wink:


Responder

Gostei + 0

13/08/2008

.lg.

bem, para localizar uma janela pelo título você pode usar o comando FindWindow e para finalizar esse aplicativo você pode usar o comando SendMessage passados os parametros solicitando o fechamento do mesmo:::
procedure TForm1.Button1Click(Sender: TObject);
var
Aberto:HWND;
begin
Aberto := FindWindow(nil,´Calculadora´);
if Aberto <> 0 then
SendMessage(Aberto,WM_CLOSE,0,0);
end;
No exemplo eu fecho a Calculadora do Windows, mais pode ser qualquer títlulo, espero ter ajudado! :wink:

Aproveitando o tópico...
Da mesma forma tem como saber se uma pasta do windows for aberta!?

Tipo... c:\teste
se tentarem acessá-la, eu mando uma msg e fecho o programa (que no caso usaria o codigo acima) que está tentando abri-la.

Tem como!?

.lg.


Responder

Gostei + 0

13/08/2008

Xprata

Valeu Paulo, funcionou, mas se conseguisse verificar na fila de processos seria mais garantido, pois se o titulo mdar da ja viu...mas ja foi de grande valia a ajuda...
Sabe como verificar o processo?
t+


Responder

Gostei + 0

13/08/2008

Martins

Valeu Paulo, funcionou, mas se conseguisse verificar na fila de processos seria mais garantido, pois se o titulo mdar da ja viu...mas ja foi de grande valia a ajuda... Sabe como verificar o processo? t+


Fechando um processo vc fecha todos os demais aplicativos ligados ao processo em questão, mas vc poderia dar uma olhada no código abaixo.

[b:3f69c24408]Fonte: [color=red:3f69c24408]DelphiTricks.com[/color:3f69c24408][/b:3f69c24408]
// **************************************************
//  For Windows 9x/ME/2000/XP
// **************************************************
uses
  Tlhelp32;

function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(
                        OpenProcess(PROCESS_TERMINATE,
                                    BOOL(0),
                                    FProcessEntry32.th32ProcessID),
                                    0));
     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  KillTask(´notepad.exe´);
end;

// **************************************************
//   For Windows NT/2000/XP
// **************************************************
procedure KillProcess(hWindowHandle: HWND);
var
  hprocessID: INTEGER;
  processHandle: THandle;
  DWResult: DWORD;
begin
  SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0,
    SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);
  if isWindow(hWindowHandle) then
  begin
    { Get the process identifier for the window}
    GetWindowThreadProcessID(hWindowHandle, @hprocessID);
    if hprocessID <> 0 then
    begin
      { Get the process handle }
      processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,
        False, hprocessID);
      if processHandle <> 0 then
      begin
        { Terminate the process }
        TerminateProcess(processHandle, 0);
        CloseHandle(ProcessHandle);
      end;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  KillProcess(FindWindow(´notepad´,nil));
end;


O código acima foi postado pelo [b:3f69c24408]Micheus[/b:3f69c24408] em 25/12/2006 no ScripBrasil.

Boa sorte e bons códigos.


Responder

Gostei + 0

13/08/2008

Martins

[quote:8e1d074b55=´paullsoftware´]bem, para localizar uma janela pelo título você pode usar o comando FindWindow e para finalizar esse aplicativo você pode usar o comando SendMessage passados os parametros solicitando o fechamento do mesmo:::
procedure TForm1.Button1Click(Sender: TObject);
var
Aberto:HWND;
begin
Aberto := FindWindow(nil,´Calculadora´);
if Aberto <> 0 then
SendMessage(Aberto,WM_CLOSE,0,0);
end;
No exemplo eu fecho a Calculadora do Windows, mais pode ser qualquer títlulo, espero ter ajudado! :wink:

Aproveitando o tópico...
Da mesma forma tem como saber se uma pasta do windows for aberta!?

Tipo... c:\teste
se tentarem acessá-la, eu mando uma msg e fecho o programa (que no caso usaria o codigo acima) que está tentando abri-la.

Tem como!?

.lg.[/quote:8e1d074b55]

Amigo dê uma olhada no link abaixo.
[url]https://www.devmedia.com.br/articles/viewcomp.asp?comp=615[/url]
Artigo do [b:8e1d074b55]DANIEL DE FREITAS WILDT[/b:8e1d074b55] - Monitorando Diretórios com FindFirstChangeNotification.

Nunca testei esse código mas vc pode dar uma conferida, mas acredito q vc poderia procurar tb por API Hooking, o Bruno (Nildo) Administrador aqui do fórum, o Michael Benford e eu já falamos do assunto aqui no fórum e o Nildo mantinha um portal com a biblioteca dele sobre o assunto.

Boa sorte.


Responder

Gostei + 0

14/08/2008

.lg.

Obrigado pela ajuda. :wink:


Responder

Gostei + 0

14/08/2008

Xprata

Obrigado Martins, vou testar...

[quote:8f3d54fe2e=´xprata´]Valeu Paulo, funcionou, mas se conseguisse verificar na fila de processos seria mais garantido, pois se o titulo mdar da ja viu...mas ja foi de grande valia a ajuda... Sabe como verificar o processo? t+


Fechando um processo vc fecha todos os demais aplicativos ligados ao processo em questão, mas vc poderia dar uma olhada no código abaixo.

[b:8f3d54fe2e]Fonte: [color=red:8f3d54fe2e]DelphiTricks.com[/color:8f3d54fe2e][/b:8f3d54fe2e]
// **************************************************
//  For Windows 9x/ME/2000/XP
// **************************************************
uses
  Tlhelp32;

function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(
                        OpenProcess(PROCESS_TERMINATE,
                                    BOOL(0),
                                    FProcessEntry32.th32ProcessID),
                                    0));
     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  KillTask(´notepad.exe´);
end;

// **************************************************
//   For Windows NT/2000/XP
// **************************************************
procedure KillProcess(hWindowHandle: HWND);
var
  hprocessID: INTEGER;
  processHandle: THandle;
  DWResult: DWORD;
begin
  SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0,
    SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);
  if isWindow(hWindowHandle) then
  begin
    { Get the process identifier for the window}
    GetWindowThreadProcessID(hWindowHandle, @hprocessID);
    if hprocessID <> 0 then
    begin
      { Get the process handle }
      processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,
        False, hprocessID);
      if processHandle <> 0 then
      begin
        { Terminate the process }
        TerminateProcess(processHandle, 0);
        CloseHandle(ProcessHandle);
      end;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  KillProcess(FindWindow(´notepad´,nil));
end;


O código acima foi postado pelo [b:8f3d54fe2e]Micheus[/b:8f3d54fe2e] em 25/12/2006 no ScripBrasil.

Boa sorte e bons códigos.[/quote:8f3d54fe2e]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar