Вообщем вот код:
Код
function GetProcessID(const AProcessName: string): DWord;
var
lSnapHandle: THandle;
lProcStruct: PROCESSENTRY32;
lProcessName, lSnapProcessName: string;
lOSVerInfo: TOSVersionInfo;
begin
Result := INVALID_HANDLE_VALUE;
lSnapHandle := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
if lSnapHandle = INVALID_HANDLE_VALUE then
Exit;
lProcStruct.dwSize := SizeOf(PROCESSENTRY32);
lOSVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(lOSVerInfo);
case lOSVerInfo.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS: lProcessName := AProcessName;
VER_PLATFORM_WIN32_NT: lProcessName :=ExtractFileName(AProcessName);
end;
if Process32First(lSnapHandle, lProcStruct) then
begin
try
repeat
lSnapProcessName := lProcStruct.szExeFile;
if AnsiUpperCase(lSnapProcessName) = AnsiUpperCase(lProcessName) then
begin
Result := lProcStruct.th32ProcessID;
Break;
end;
until not Process32Next(lSnapHandle, lProcStruct);
finally
CloseHandle(lSnapHandle);
end;
end;
end;
Procedure Thread;
Var PID,Handle: DWORD;
begin
while true do
begin
Pid:= GetProcessID('calc.exe');
Handle := OpenProcess(SYNCHRONIZE,false,PID);
if Handle <> 0 then
begin
WaitForSingleObject(Handle,INFINITE);
ShellExecute(0,nil,'calc.exe',nil,nil,SW_SHOWNORMAL);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var ThId,B: DWORD;
begin
ThId := CreateThread(nil,0,@Thread,0,0,B);
end;
Не забудь добавить TlHelp32,ShellAPI.
P.S
Хотя я бы на твоём месте этот код использовал для поддержки запущенности трояна