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