como verificar se um aplicativo esta rodando?
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+
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
Curtidas 0
Respostas
Paullsoftware
11/08/2008
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:::
No exemplo eu fecho a Calculadora do Windows, mais pode ser qualquer títlulo, espero ter ajudado! :wink:
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:
GOSTEI 0
.lg.
11/08/2008
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:::
No exemplo eu fecho a Calculadora do Windows, mais pode ser qualquer títlulo, espero ter ajudado! :wink:
procedure TForm1.Button1Click(Sender: TObject); var Aberto:HWND; begin Aberto := FindWindow(nil,´Calculadora´); if Aberto <> 0 then SendMessage(Aberto,WM_CLOSE,0,0); end;
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.
GOSTEI 0
Xprata
11/08/2008
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+
Sabe como verificar o processo?
t+
GOSTEI 0
Martins
11/08/2008
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.
GOSTEI 0
Martins
11/08/2008
[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:::
No exemplo eu fecho a Calculadora do Windows, mais pode ser qualquer títlulo, espero ter ajudado! :wink:
procedure TForm1.Button1Click(Sender: TObject); var Aberto:HWND; begin Aberto := FindWindow(nil,´Calculadora´); if Aberto <> 0 then SendMessage(Aberto,WM_CLOSE,0,0); end;
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.
GOSTEI 0
.lg.
11/08/2008
Obrigado pela ajuda. :wink:
GOSTEI 0
Xprata
11/08/2008
Obrigado Martins, vou testar...
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]
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]
[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]
GOSTEI 0