Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];

Вниз

Как коректно дать комманду с одной на другую *.EXE   Найти похожие ветки 

 
KvORubin   (2002-04-16 09:15) [0]

Имеется 2 проекта, и нужно дать комманду второму, чтоб он выполнил ту или инную процедуру.
(не через: внешние файлы и реестр)


 
LazorenkoX   (2002-04-16 09:24) [1]

Обе ЕХЕ должны быть запущены и иметь объекты, которые могут принимать сообщения системы, например TForm.

//В обоих ЕХЕ при запуске:
VAL_MSG := RegisterWindowMessage(STR_MSG);

//Посылаем:
SendMessage(HWND_BROADCAST, VAL_MSG, ...);

//Принимаем
TForm.DefaultHandler(var Message: TMessage);
begin
if Message.Msg = VAL_MSG then begin
...
end else inherited DefaultHandler(Message);
end;
//Может где есть небольшая ошибка или глупость, но примерно так.


 
KvORubin   (2002-04-16 10:02) [2]


Кто такой VAL_MSG ???
Чё-то ничего не получается, напишите пожалусто полноценный пример, хотя-бы одного ехе.


 
LazorenkoX   (2002-04-16 10:10) [3]


const
STR_MSG = "description of unique my message";

var
VAL_STR: LongInt;

//Перекрываем в форме стандартный обработчик:
//Там где описание процедур в конструкторе формы:
type
TForm1 = ...
...
procedure DefaultHandler(var Message: TMessage); override;
...
private
...
public
...
end;


procedure TForm1.DefaultHandler(...);
... тут всё как я уже писал


 
KvORubin   (2002-04-16 10:33) [4]


//Вот как я всё это понял:
//Отредактируйте пожалусто как правельно, а то я только
//начинающий и троеточий непонимаю :(

unit Peredacha;

interface

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

var
VAL_STR: LongInt;

const
STR_MSG = "description of unique my message";

type
TForm1 = class(TForm)
Button1: TButton;
procedure DefaultHandler(var Message: TMessage); override;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);

private
public
end;

var
Form1: TForm1;
{VAL_STR: LongInt;}
implementation

{$R *.dfm}

procedure TForm1.DefaultHandler(var Message: TMessage);
{var
VAL_STR: LongInt;}
begin

if Message.Msg = VAL_MSG then begin
showmessage("OK");
end
else
inherited DefaultHandler(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
VAL_MSG := RegisterWindowMessage(STR_MSG);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(HWND_BROADCAST,VAL_MSG,1);
end;


end.


 
Fredericco   (2002-04-16 10:34) [5]

LazorenkoX >> А не будет ли проще через TClientSocket и TServerSocket?


 
Johnny Smith   (2002-04-16 10:52) [6]

С сокетами в таком простом деле лучше не связываться (я тут в последнее время играюсь с ними на досуге, ряд вопросов решил, но еще три ряда таких же появилось :-).
Обмен информацией между одновременно запущенными на одном компе прогами блестяще поддерживает COM. Я бы рекомендовал именно его. Навскидку код привести не могу. Советую взять книжку Эрика Хармона про COM и DCOM в Delphi.


 
KvORubin   (2002-04-16 16:50) [7]

> LazorenkoX ©
Плиз,Плиз,Плиз отредактируйте, это очень нужно,
пишу почтовую программу, она состоит из 3 ехе,
мне просто необходимо наладить связь между ними, ПЛИЗ !!!


 
LazorenkoX   (2002-04-16 17:15) [8]

Тут я всё исправил:

unit Unit1;

interface

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

const
MY_MESSAGE = "LazorenkoX HELLO WORLD";

var
MY_MESSAGE_WIN_VALUE: Cardinal;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure DefaultHandler(var Message); override;
procedure Button1Click(Sender: TObject);
private
public
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
MY_MESSAGE_WIN_VALUE := RegisterWindowMessage(MY_MESSAGE);
end;

procedure TForm1.DefaultHandler(var Message);
begin
with TMessage(Message) do
if (Msg = MY_MESSAGE_WIN_VALUE) and (wParam <> Integer(Handle)) then begin
SetForegroundWindow(Handle);
MessageBox(Handle, "Hello World!", "", MB_ICONEXCLAMATION);
end
else inherited DefaultHandler(Message);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(HWND_BROADCAST, MY_MESSAGE_WIN_VALUE, Handle, 0);
end;

end.


 
KvORubin   (2002-04-16 17:38) [9]


Круто !!! - отлично работает, СПАСИБО БОЛЬШОЕ !!!


 
Fantasist   (2002-04-17 08:29) [10]

Fredericco © (16.04.02 10:34)
LazorenkoX >> А не будет ли проще через TClientSocket и TServerSocket?


--------------------------------------------------------------------------------
Johnny Smith © (16.04.02 10:52)
С сокетами в таком простом деле лучше не связываться (я тут в последнее время играюсь с ними на досуге, ряд вопросов решил, но еще три ряда таких же появилось :-).
Обмен информацией между одновременно запущенными на одном компе прогами блестяще поддерживает COM. Я бы рекомендовал именно его. Навскидку код привести не могу. Советую взять книжку Эрика Хармона про COM и DCOM в Delphi.

Вы что? Какие сокеты, какие COM? Это чтобы на одном компьютере передать сообщение из одного процесса в другой? Выше приведен правельный вариант для таких случаев.



 
REA   (2002-04-17 10:10) [11]

Читайте IPC (DDE, COM, DCOM, Pipes, Sockets, Memory mapped files) и т.п.


 
KvORubin   (2002-04-17 10:34) [12]

> LazorenkoX ©

Я вот тут ковырялся ковырялся, но так и непонял одной простой вещи:
Нужно послать комманду другой ехе, а она по этой команде выполнит что-то.

=========================================
Допустим Подача комманды:

Begin
Project2.scommandovatь:="send";
Project2.scommandovatь:="load";
Project2.scommandovatь:="close";


Когда пришла комманда:

Begin
if S="send" then send;
if S="load" then load;
if S="close" then close;

============================================

Вот впринцепе и весь смысл,,
только его надо написать чтоб он работал.

А в Вашем примере я несмог ничего такого найти, или
комманды могут быть цифровыми, это без разници.

Напишите ПАЖАЛУСТО такой пример,, где он будет работать по выше описанному смыслу !!!???


 
REA   (2002-04-17 10:36) [13]

Не могу сдержать эмоции. С русским языком у человека проблемы. Стоит ли говорить о программировании.


 
KvORubin   (2002-04-17 13:54) [14]

> REA (17.04.02 10:36)
обратись в конференцию "потрепаться" - там ты найдёшь себе друзей.


 
Alx2   (2002-04-17 14:05) [15]

>KvORubin © (17.04.02 10:34)
Через wParam или lParam можно передавать коды команд. Например send = 1, load = 2 и т.д. А в обработчике проверяешь что пришло в этих параметрах и делаешь то, что надо.
Если нужно переслать какую-то более объемную информацию, используй сообщение Wm_CopyData. Либо Memory Mapped Files.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
4-94606
Velocity
2002-02-20 05:50
2002.04.29
Кто-нить знает как юзать LB_GETTEXT?


1-94364
KvORubin
2002-04-16 09:15
2002.04.29
Как коректно дать комманду с одной на другую *.EXE


1-94471
Timon
2002-04-11 16:13
2002.04.29
Создание компанента


1-94489
koks
2002-04-15 11:44
2002.04.29
TStatusBar - не отображается :((


4-94635
Stan
2002-02-26 23:53
2002.04.29
Привет Специалистам!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский