Insira este fonte abaixo dentro de um Timer.
Defina o intervalo do timer para 1.
É uma gambiarra! mas uma boa alternativa para evitar usar DLLs ou criar Hooks
Declare na Uses Commctrl;
var
dwSize,dwNumBytes,PID,hProc: Cardinal;
PLocalShared,PSysShared: PlvItem;
h: THandle;
iCount,i: integer;
szTemp: string;
begin
{Pega o Handle da ListView}
h:=FindWindow('#32770',nil);
h:=FindWindowEx(h,0,'#32770',nil);
h:=FindWindowEx(h,0,'SysListView32',nil);
{Pega o número de itens da ListView}
iCount:=SendMessage(h, LVM_GETITEMCOUNT,0,0);
for i:=0 to iCount-1 do
begin
{Define o tamanho de cada item da ListView}
dwSize:=sizeof(LV_ITEM) + sizeof(CHAR) * MAX_PATH;
{Abre um espaço na memória do NOSSO programa para o PLocalShared}
PLocalShared:=VirtualAlloc(nil, dwSize, MEM_RESERVE + MEM_COMMIT, PAGE_READWRITE);
{Pega o PID do processo taskmgr}
GetWindowThreadProcessId(h,@PID);
{Abre o processo taskmgr}
hProc:=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
{Abre um espaço na memória do taskmgr para o PSysShared}
PSysShared:=VirtualAllocEx(hProc, nil, dwSize, MEM_RESERVE OR MEM_COMMIT, PAGE_READWRITE);
{Define as propriedades do PLocalShared}
PLocalShared.mask:=LVIF_TEXT;
PLocalShared.iItem:=0;
PLocalShared.iSubItem:=0;
PLocalShared.pszText:=LPTSTR(dword(PSysShared) + sizeof(LV_ITEM));
PLocalShared.cchTextMax:=20;
{Escreve PLocalShared no espaço de memória que abriu no taskmgr}
WriteProcessMemory(hProc,PSysShared,PLocalShared,1024,dwNumBytes);
{Pega o texto to item i e passa pro PSysShared}
SendMessage(h,LVM_GETITEMTEXT,i,LPARAM(PSysShared));
{Passa o PSysShared para o PLocalShared}
ReadProcessMemory(hProc,PSysShared,PLocalShared,1024,dwNumBytes);
{Passa o texto do Item para szTemp}
szTemp:=pchar(dword(PLocalShared)+sizeof(LV_ITEM));
{Se esse texto contiver a string proc deleta o item}
if LowerCase(szTemp) = 'rarryeditor.exe' then
ListView_DeleteItem(h,i);
{Libera os espaços de memória utilizados}
VirtualFree(pLocalShared, 0, MEM_RELEASE);
VirtualFreeEx(hProc, pSysShared, 0, MEM_RELEASE);
{Fecha o handle do processo}
CloseHandle(hProc);
end;
end;
Defina o intervalo do timer para 1.
É uma gambiarra! mas uma boa alternativa para evitar usar DLLs ou criar Hooks
Declare na Uses Commctrl;
var
dwSize,dwNumBytes,PID,hProc: Cardinal;
PLocalShared,PSysShared: PlvItem;
h: THandle;
iCount,i: integer;
szTemp: string;
begin
{Pega o Handle da ListView}
h:=FindWindow('#32770',nil);
h:=FindWindowEx(h,0,'#32770',nil);
h:=FindWindowEx(h,0,'SysListView32',nil);
{Pega o número de itens da ListView}
iCount:=SendMessage(h, LVM_GETITEMCOUNT,0,0);
for i:=0 to iCount-1 do
begin
{Define o tamanho de cada item da ListView}
dwSize:=sizeof(LV_ITEM) + sizeof(CHAR) * MAX_PATH;
{Abre um espaço na memória do NOSSO programa para o PLocalShared}
PLocalShared:=VirtualAlloc(nil, dwSize, MEM_RESERVE + MEM_COMMIT, PAGE_READWRITE);
{Pega o PID do processo taskmgr}
GetWindowThreadProcessId(h,@PID);
{Abre o processo taskmgr}
hProc:=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
{Abre um espaço na memória do taskmgr para o PSysShared}
PSysShared:=VirtualAllocEx(hProc, nil, dwSize, MEM_RESERVE OR MEM_COMMIT, PAGE_READWRITE);
{Define as propriedades do PLocalShared}
PLocalShared.mask:=LVIF_TEXT;
PLocalShared.iItem:=0;
PLocalShared.iSubItem:=0;
PLocalShared.pszText:=LPTSTR(dword(PSysShared) + sizeof(LV_ITEM));
PLocalShared.cchTextMax:=20;
{Escreve PLocalShared no espaço de memória que abriu no taskmgr}
WriteProcessMemory(hProc,PSysShared,PLocalShared,1024,dwNumBytes);
{Pega o texto to item i e passa pro PSysShared}
SendMessage(h,LVM_GETITEMTEXT,i,LPARAM(PSysShared));
{Passa o PSysShared para o PLocalShared}
ReadProcessMemory(hProc,PSysShared,PLocalShared,1024,dwNumBytes);
{Passa o texto do Item para szTemp}
szTemp:=pchar(dword(PLocalShared)+sizeof(LV_ITEM));
{Se esse texto contiver a string proc deleta o item}
if LowerCase(szTemp) = 'rarryeditor.exe' then
ListView_DeleteItem(h,i);
{Libera os espaços de memória utilizados}
VirtualFree(pLocalShared, 0, MEM_RELEASE);
VirtualFreeEx(hProc, pSysShared, 0, MEM_RELEASE);
{Fecha o handle do processo}
CloseHandle(hProc);
end;
end;