![]()  | 
	
 
  | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Надо соеденить 2 юнита 
		
	
		
		
		
		
		
	
		
		
	
	
	Принцип такой.В первый юнит ищет процесс,когда процесс запущен должен открываться второй юнит.А второй юнит должен ждать команду от первого юнита(тоесть не запускаться сразу а ждать) Код: 
	unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, tlhelp32, ExtCtrls, StdCtrls;
type
 TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
var
 Form1: TForm1;
 showed:boolean=false;
implementation
{$R *.dfm}
function processExists(exeFileName: string): Boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(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 := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm := False;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if processExists('game.exe') then
   begin
   if not(showed) then
      begin
    showed:=true;
     ShowMessage('Процесс запущен');
      end;
   end
   else if showed
         then showed:=false;
end;
end. | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Сформулируйте принцип работы по-понятнее. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Смотри!Это код первого юнита,он ищет процесс(скрытно).Второй юнит мини игра написанная на делфе.Так вот мне надо соеденить 2 юнита так чтобы когда я запускал ехе сначало заработал первый юнит(искал процесс) когда порцес был найден включался второй юнит(тоесть запускал игру) 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 И что в этом сложного? 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	unit Unit1;
 
interface
 
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, tlhelp32, ExtCtrls, StdCtrls;
 
type
 TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
 
 private
   { Private declarations }
 public
   { Public declarations }
 end;
 
var
  Form1: TForm1;
  showed:boolean=false;
 
implementation
 
{$R *.dfm}
 
function ProcessExists(const exeFileName: string): Boolean;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(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 := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
  CloseHandle(FSnapshotHandle);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.ShowMainForm := False;
  Form2.Visible := True;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if ProcessExists('game.exe') then
  begin
    if Showed = False then
    begin
      Showed := True;
      ShowMessage('Процесс запущен. Открываем второй юнит.');
      Form2.ShowModal
    end;
  end
  else 
    if Showed then 
    begin
      Showed := False;
      ShowMessage('Процесс отсутствует. Закрываем второй юнит.');
      Form2.Close
    end
end; 
end.Чтобы игру начинать при вызове окна, производите действия на OnShow.  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Пишет что вторую форму не видит.Вроде все добавил в проэект!Ктонить стукните в аську 327032 есть еще пару вопросов!Буду благодарен! 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Сильно подозреваю что на этапе OnCreate Вашей 1ой формы 2я еще не создана!!!! В самом проекте сначала создается форма1, запускается форма1.OnCreate, а только после этого создается форма2. Как самый большой примитив попробуйте вставить таймер, на 1милисекунду, а внутри его 1) остановить, 2) выполнить обращение к форме 2. Таймер вызовется уже после создания форм 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
  |