Fórum como verificar se um aplicativo esta rodando? #362355
11/08/2008
0
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
Curtir tópico
+ 0Posts
12/08/2008
Paullsoftware
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
13/08/2008
.lg.
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
13/08/2008
Xprata
Sabe como verificar o processo?
t+
Gostei + 0
13/08/2008
Martins
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
13/08/2008
Martins
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
14/08/2008
.lg.
Gostei + 0
14/08/2008
Xprata
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
Clique aqui para fazer login e interagir na Comunidade :)