Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.12.2012, 12:53
Mitiay Mitiay вне форума
Новичок
 
Регистрация: 08.10.2009
Сообщения: 68
Репутация: 10
По умолчанию 2 юнита

Надо соеденить 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  
Старый 10.12.2012, 15:45
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Сформулируйте принцип работы по-понятнее.
Ответить с цитированием
  #3  
Старый 10.12.2012, 20:58
Mitiay Mitiay вне форума
Новичок
 
Регистрация: 08.10.2009
Сообщения: 68
Репутация: 10
По умолчанию

Смотри!Это код первого юнита,он ищет процесс(скрытно).Второй юнит мини игра написанная на делфе.Так вот мне надо соеденить 2 юнита так чтобы когда я запускал ехе сначало заработал первый юнит(искал процесс) когда порцес был найден включался второй юнит(тоесть запускал игру)
Ответить с цитированием
  #4  
Старый 11.12.2012, 00:08
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

И что в этом сложного?
Код:
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.
Form2 - это форма игры.
Чтобы игру начинать при вызове окна, производите действия на OnShow.
Ответить с цитированием
  #5  
Старый 12.12.2012, 12:12
Mitiay Mitiay вне форума
Новичок
 
Регистрация: 08.10.2009
Сообщения: 68
Репутация: 10
По умолчанию

Пишет что вторую форму не видит.Вроде все добавил в проэект!Ктонить стукните в аську 327032 есть еще пару вопросов!Буду благодарен!
Ответить с цитированием
  #6  
Старый 12.12.2012, 12:49
Andy_Jonson Andy_Jonson вне форума
Прохожий
 
Регистрация: 26.12.2009
Сообщения: 4
Репутация: 10
По умолчанию

Сильно подозреваю что на этапе OnCreate Вашей 1ой формы 2я еще не создана!!!! В самом проекте сначала создается форма1, запускается форма1.OnCreate, а только после этого создается форма2. Как самый большой примитив попробуйте вставить таймер, на 1милисекунду, а внутри его 1) остановить, 2) выполнить обращение к форме 2. Таймер вызовется уже после создания форм
Ответить с цитированием
  #7  
Старый 12.12.2012, 13:57
nixel nixel вне форума
Начинающий
 
Регистрация: 12.12.2011
Адрес: Москва
Сообщения: 150
Версия Delphi: XE2-U4
Репутация: 131
По умолчанию

Цитата:
Сообщение от Andy_Jonson
Сильно подозреваю что на этапе OnCreate Вашей 1ой формы 2я еще не создана!!!! В самом проекте сначала создается форма1, запускается форма1.OnCreate, а только после этого создается форма2. Как самый большой примитив попробуйте вставить таймер, на 1милисекунду, а внутри его 1) остановить, 2) выполнить обращение к форме 2. Таймер вызовется уже после создания форм
не проще порядок создания форм поменять? либо вообще создавать вторую форму руками.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:02.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025