Как сделать чтобы программа работала в фоновом режиме и ... - delfcode
Понедельник, 05.12.2016, 21:39 Приветствую вас Гость | Группа "Гости" 


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024 
delfcode » Delphi » Вопросы по Delphi » Как сделать чтобы программа работала в фоновом режиме и ...
Как сделать чтобы программа работала в фоновом режиме и ...
NormalnyjДата: Пятница, 15.11.2013, 20:26 | Сообщение # 1
Был не раз
Зарегистрирован: 08.11.2013
Группа: Пользователи
Сообщений: 9
Статус: Offline
Как сделать чтобы программа работала в фоновом режиме и следила за процессом explorer.exe и если этот процесс убить то программа его запустит ? Желательно если можете дайте исходник.Заранее спасибо.
 
dolphinДата: Суббота, 16.11.2013, 17:18 | Сообщение # 2
Администратор
Сообщений: 902
Статус: 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, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle

Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
 
NeoДата: Среда, 20.11.2013, 15:24 | Сообщение # 3
Модератор
Зарегистрирован: 04.05.2010
Группа: Модераторы
Сообщений: 316
Статус: 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
Группа: Модераторы
Сообщений: 316
Статус: 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
Хотя я бы на твоём месте этот код использовал для поддержки запущенности трояна smile
 
NormalnyjДата: Понедельник, 16.12.2013, 22:03 | Сообщение # 5
Был не раз
Зарегистрирован: 08.11.2013
Группа: Пользователи
Сообщений: 9
Статус: Offline
Спасибо вам всем большое!Я разобрался.
 
delfcode » Delphi » Вопросы по Delphi » Как сделать чтобы программа работала в фоновом режиме и ...
Страница 1 из 11
Поиск:

delfcode.ru © 2008 - 2016 Хостинг от uCoz