![]() |
|
|
|
|
#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
|
|||
|
|||
|
Цитата:
|