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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2008, 00:43   #1
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию как создать отдельный процесс?

при загрузки (чужой) проги она подгружает мою Dll. Проблема в том что Dll подгружаеться модально, если я сгинерирую процедуру с циклом то оснавная прага остановится и будет ждать выхода. Как мне избавиться от простоя? Добавить exe с этой процедурой и вызвать через Dll? Или есть более мудрый способ? Пробывал с потоками tthread как я понял это не то. Как надо?

Последний раз редактировалось user_jasser; 12.11.2008 в 00:53.
user_jasser вне форума Ответить с цитированием
Старый 12.11.2008, 09:22   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

TThread тебе поможет. или API функция CreateThread
rpy3uH вне форума Ответить с цитированием
Старый 12.11.2008, 12:21   #3
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию

я пробывал TThread все равно тот же баян. Можеть что то не так делал.
чужая прога все равно стопитца.

Код:
unit EditirApi;

{$mode objfpc}{$H+}

interface

uses Windows, Classes, SysUtils;

type

  { tnew }

  tnew = class(tthread)
  private
    Hnd: HWnd;
  protected
  public
    procedure execute; override;
  end;

implementation

{ tnew }

procedure tnew.execute;
begin
  MessageBox(0,'create', '.dll',MB_ICONINFORMATION);
  While Hnd = 0 do begin
    Hnd:= FindWindow(nil, 'Trigger Editor');
    if Hnd <> 0 then begin
       MessageBox(0,'find editor', '.dll',MB_ICONINFORMATION);
       //GetSubChild(Hnd);
    end;
    sleep(300);
  end;
end;

end.
user_jasser вне форума Ответить с цитированием
Старый 12.11.2008, 12:30   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот мой пример:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
    function tf:dword;
var  tid:Cardinal;b:boolean;
  Form1: TForm1;

implementation

{$R *.dfm}
 //********** FUNCTION **********
 function tf;
 begin
  while b do begin
    form1.Caption:=TimeToStr(time);
  end;
    result:=0;
 end;
 //********** END FUNCTION ******  {}


procedure TForm1.FormCreate(Sender: TObject);
begin
b:=true;
CreateThread(0,0,@tf,0,CREATE_NEW,tid);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
b:=false;
end;

end.
Кста, помоему твой пример не полный...

P.S. Не люблю TThread.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2008, 14:41   #5
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию

спасибо работает. А почему мой способ не работает? из за вызова?

Код:
Exec:= tnew.create(true);
Exec.execute;
user_jasser вне форума Ответить с цитированием
Старый 12.11.2008, 15:13   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я плохо знаю TThread. Я с им не работаю, Вера не позволяет )))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2008, 15:29   #7
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию

а что тебе по душе(по собжу)?
user_jasser вне форума Ответить с цитированием
Старый 12.11.2008, 15:33   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не по душе сложность этого класса. Мне вообще ООП не нравится, поэтому насколько могу применяю Win Api по максимуму.
Это субьективное мнение, переубеждать никого не намерен )
Собсно коли пример помог тож рули его ))
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2008, 16:58   #9
user_jasser
я не ~
Пользователь
 
Аватар для user_jasser
 
Регистрация: 19.09.2008
Сообщений: 58
По умолчанию

ок. рулю твой пример ))
WinApi как видешь сам вот пытаюсь понять.
user_jasser вне форума Ответить с цитированием
Старый 12.11.2008, 17:30   #10
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от user_jasser Посмотреть сообщение
спасибо работает. А почему мой способ не работает? из за вызова?

Код:
Exec:= tnew.create(true);
Exec.execute;
надо так
Код:
Exec:= tnew.create(true);
Exec.Resume;
rpy3uH вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать - запущен ли определенный процесс ? 12usver12 Общие вопросы Delphi 16 21.02.2011 02:52
Создать процесс из памяти Ring0Sn Общие вопросы Delphi 4 23.08.2008 02:55
Висит процесс, как его можно убрать? HAMMAN Помощь студентам 5 16.05.2008 08:55
Как завершить процесс, зная его имя Никки Win Api 6 14.01.2008 14:04
Как узнать,нужен ли мне определённый процесс Alximik Софт 5 21.11.2007 13:50