Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2019, 02:29   #21
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от linda88 Посмотреть сообщение
Но только не получается реализовать вот это

Я написала несколько отдельных программ в RAD Studio 10.1 Berlin.
Код одной из этих программ представить можете? Т.е. код программы, которую нужно идентифицировать и запустить?
northener вне форума Ответить с цитированием
Старый 25.01.2019, 14:03   #22
linda88
Пользователь
 
Регистрация: 17.01.2019
Сообщений: 78
По умолчанию

идентифицирует и запускает вот эта:
Код:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,ShellAPI,
  FMX.Edit, FMX.Controls.Presentation, FMX.StdCtrls,ShellAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(1, nil, PChar(Edit1.Text), nil, nil, 0)
end;

end.
Но пока она только умеет только запускать, а инфицировать не может

вторая тоже самое только без вызывающей функции
Код:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,ShellAPI,
  FMX.Edit, FMX.Controls.Presentation, FMX.StdCtrls,ShellAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.fmx}



end.
linda88 вне форума Ответить с цитированием
Старый 25.01.2019, 19:37   #23
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Цитата:
Сообщение от linda88
Нашла вот это ShellExecute(1, nil, PChar(Edit1.Text), nil, nil, 0);

1. Все устраивает кроме одного как отследить закрытие запущенного файла?
Для запуска и контроля внешней программы, вам уже посоветовали в посте #3
Цитата:
Сообщение от p51x
КрейтПроцесс + ВейтФорСинглОбджект
можно сделать примерно так:
Код:
unit Unit1;

interface
uses
.........ShellAPI;

var
  Form1: TForm1;
  ProcInfo: TProcessInformation;

implementation

{$R *.dfm}

//Функция создает и запускает процесс
Function CreateProcessExe(FileName: String): TProcessInformation;
var
   StartupInfo: TStartupInfo;
begin
     FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
     FillChar(Result, SizeOf(TProcessInformation), 0);
    with StartupInfo do
    begin
      cb := SizeOf(StartupInfo);
      dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES or STARTF_FORCEONFEEDBACK;
      wShowWindow := SW_NORMAL;//SW_HIDE;
    end;
if not CreateProcess(nil, PAnsiChar(FileName), NIL, NIL, False, NORMAL_PRIORITY_CLASS,
NIL, NIL, StartupInfo, Result) Then
CloseHandle(Result.hProcess);
CloseHandle(Result.hThread);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer1.Enabled:= false;
end;

//Кнопка запуска файла
procedure TForm1.Button1Click(Sender: TObject);
begin
//Используем функцию создания и запуска процесса для загрузки сторонней программы
ProcInfo:= CreateProcessExe(Edit1.Text);
if ProcInfo.hProcess <> 0 then
Timer1.Enabled:= true;
end;

//Кнопка закрытия запущенного файла
procedure TForm1.Button2Click(Sender: TObject);
var
HProcess: Dword;
begin
 HProcess:=OpenProcess(PROCESS_TERMINATE,FALSE, ProcInfo.dwProcessId);
 if HProcess <> 0 then
 begin
 TerminateProcess(HProcess, DWORD(-1));
 CloseHandle(HProcess);
 end;
end;

//Таймер контроля запущенного файла
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if WaitforSingleObject(ProcInfo.hProcess, 1) = 0 then
begin
Timer1.Enabled:= false;
CloseHandle(ProcInfo.hProcess);
showmessage('Программа закрыта');
end;
end;
Цитата:
Сообщение от linda88
2. Как обмениваться с ним данными?
Для обмена данными между своими и чужой программой
1. С помощью SendMessage, PostMessage через дескриптор окна но это ненадежный обмен данными и для Label и подобных контролов где нет дочерних оконных дескрипторов не подойдет.
2. Внедрять свою специальную dll в загруженную чужую программу с помощью функций ApiHook и потом захватывать нужные функции.
3. Обмениваться с помощью WriteProcessMemory, ReadProcessMemory через выделенную память, для этого нужно знать адрес памяти чужой программы где находятся нужные вам данные, но если между своими то нужно заранее подготовить эту фиксированную область памяти.
Здесь же можно запустить стороннюю программу в памяти главной программы и когда вы ее закроете то все остальные тоже можно так сказать закроются.

Для обмена данными между своими программами
1. FileMapping - обмен данными между процессами, более надежный способ и в тоже время простой, информация и примеры здесь.
http://www.delphi-club.ru/delphi/filemapping.html
http://pro.dtn.ru/delphi-net/mapfile-2.html
2. Самый простой способ, это через внешний текстовый файл, к примеру назвать его Message.txt сохранить его в общедоступном месте, затем сохранять в него нужную информацию, а потом при проверки атрибутов допустим времени изменения файла, ну или по таймеру через определенный промежуток времени читать из него уже другой программой. Но здесь нужно делать обязательную проверку на занятость файла, иначе будут ошибки.
3. Обмен данными через какую нибудь базу данных к примеру через MySQL, ADO и т.д.

Последний раз редактировалось Aliens_wolfs; 26.01.2019 в 12:20.
Aliens_wolfs вне форума Ответить с цитированием
Старый 26.01.2019, 01:52   #24
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

2 linda88
Очень смущает аббревиатура FMX в списке модулей. Вы действительно хотите написать FireMonkey приложение?
northener вне форума Ответить с цитированием
Старый 27.01.2019, 22:21   #25
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
А при чём тут IPC?
прямое отношение.
вся межпроцессная кухня попадает под определение
нормальный вариант - атомы
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 28.01.2019 в 03:14.
R71MT вне форума Ответить с цитированием
Старый 27.01.2019, 22:27   #26
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..ТС откройте для себя ассемблер - пять строк решают проблему
смотрю на "шоу дельфинов" и поражаюсь..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 28.01.2019, 02:35   #27
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
нормальный вариант - атомы
Телепатия?
northener вне форума Ответить с цитированием
Старый 28.01.2019, 03:12   #28
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

никакой телепатии тут нет.
есть проблема, которая решается атомами - записал глобальный атом в таблицу GAT, и клиент его читает. зачем тут мессаги и прочее?
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 28.01.2019, 09:42   #29
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Пример работы атомов
http://www.delphisources.ru/pages/fa...s_example.html

Но этот метод подойдет только для использование между своими программами.
Или я ошибаюсь?

Последний раз редактировалось Aliens_wolfs; 28.01.2019 в 09:46.
Aliens_wolfs вне форума Ответить с цитированием
Старый 30.01.2019, 17:27   #30
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Или я ошибаюсь?
в том-то и дело, что глобальные атомы доступны всем,
но есть ещё и локальные, в таблице LAT - они доступны только текущему процессу с его потоками
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как открыть .exe файл Hac Общие вопросы C/C++ 1 22.10.2018 19:51
с++ как открыть exe файл в программе ? proef Помощь студентам 2 10.11.2013 01:35
как открыть exe файл в Builder C++ для его изменения C-Jay C++ Builder 3 05.05.2010 21:51
Как открыть файл .exe применяя гиперссылку segail Microsoft Office Excel 4 15.06.2009 23:55