Как сделать чтобы программа работала в фоновом режиме и ...
|
|
Normalnyj | Дата: Пятница, 15.11.2013, 20:26 | Сообщение # 1 |
Был не раз
Зарегистрирован: 08.11.2013
Группа: Пользователи
Сообщений: 9
Статус: Offline
| Как сделать чтобы программа работала в фоновом режиме и следила за процессом explorer.exe и если этот процесс убить то программа его запустит ? Желательно если можете дайте исходник.Заранее спасибо.
|
|
| |
dolphin | Дата: Суббота, 16.11.2013, 17:18 | Сообщение # 2 |
Администратор
Сообщений: 906
Статус: Offline
| что то вроде if not ProcessExist('explorer.exe') then ShellExecute(0,nil,'explorer.exe',nil,nil,SW_SHOWNORMAL); код функций приведён ниже
Код uses Tlhelp32;
function ProcessExists(ExeFileName: string): Boolean; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin if not InitToolHelp then begin Result:= False; Exit; end; FSnapshotHandle := CT32SX(TH32CS_SNAPPROCESS,0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32FirstX(FSnapshotHandle, FProcessEntry32); Result := False; while Integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin Result := True; end; ContinueLoop := Process32NextX(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end;
Система: Windows 10 x64, Kali Linux Среды программирования: Delphi 7, Delphi 10.x
Я не профессионал, я всего лишь любитель Я не вредитель, я всего лишь теоретик
|
|
| |
Neo | Дата: Среда, 20.11.2013, 15:24 | Сообщение # 3 |
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
| А можно ещё в отдельном патоке открыть дескриптор процесса (h=OpenProcess),а потом заюзать WaitForSingleObject(h,INFINITE);потом,как сказал dolphin, ShellExecute(0,nil,'explorer.exe',nil,nil,SW_SHOWNORMAL);
|
|
| |
Neo | Дата: Среда, 20.11.2013, 15:48 | Сообщение # 4 |
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 317
Статус: Offline
| Вообщем вот код: Код 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 Хотя я бы на твоём месте этот код использовал для поддержки запущенности трояна
|
|
| |
Normalnyj | Дата: Понедельник, 16.12.2013, 22:03 | Сообщение # 5 |
Был не раз
Зарегистрирован: 08.11.2013
Группа: Пользователи
Сообщений: 9
Статус: Offline
| Спасибо вам всем большое!Я разобрался.
|
|
| |