![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как коректно дать комманду с одной на другую *.EXE
KvORubin © (2002-04-16 09:15:00)Имеется 2 проекта, и нужно дать комманду второму, чтоб он выполнил ту или инную процедуру.
(не через: внешние файлы и реестр)
Alx2 (2002-04-17 14:05:00) [1]>KvORubin © (17.04.02 10:34)
Через wParam или lParam можно передавать коды команд. Например send = 1, load = 2 и т.д. А в обработчике проверяешь что пришло в этих параметрах и делаешь то, что надо.
Если нужно переслать какую-то более объемную информацию, используй сообщение Wm_CopyData. Либо Memory Mapped Files.
KvORubin (2002-04-17 13:54:00) [2]> REA (17.04.02 10:36)
обратись в конференцию "потрепаться" - там ты найдёшь себе друзей.
REA (2002-04-17 10:36:00) [3]Не могу сдержать эмоции. С русским языком у человека проблемы. Стоит ли говорить о программировании.
KvORubin (2002-04-17 10:34:00) [4]> 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:10:00) [5]Читайте IPC (DDE, COM, DCOM, Pipes, Sockets, Memory mapped files) и т.п.
Fantasist (2002-04-17 08:29:00) [6]Fredericco © (16.04.02 10:34)
LazorenkoX >> А не будет ли проще через TClientSocket и TServerSocket?
--------------------------------------------------------------------------------
Johnny Smith © (16.04.02 10:52)
С сокетами в таком простом деле лучше не связываться (я тут в последнее время играюсь с ними на досуге, ряд вопросов решил, но еще три ряда таких же появилось :-).
Обмен информацией между одновременно запущенными на одном компе прогами блестяще поддерживает COM. Я бы рекомендовал именно его. Навскидку код привести не могу. Советую взять книжку Эрика Хармона про COM и DCOM в Delphi.
Вы что? Какие сокеты, какие COM? Это чтобы на одном компьютере передать сообщение из одного процесса в другой? Выше приведен правельный вариант для таких случаев.
KvORubin (2002-04-16 17:38:00) [7]
Круто !!! - отлично работает, СПАСИБО БОЛЬШОЕ !!!
LazorenkoX (2002-04-16 17:15:00) [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 16:50:00) [9]> LazorenkoX ©
Плиз,Плиз,Плиз отредактируйте, это очень нужно,
пишу почтовую программу, она состоит из 3 ехе,
мне просто необходимо наладить связь между ними, ПЛИЗ !!!
Johnny Smith (2002-04-16 10:52:00) [10]С сокетами в таком простом деле лучше не связываться (я тут в последнее время играюсь с ними на досуге, ряд вопросов решил, но еще три ряда таких же появилось :-).
Обмен информацией между одновременно запущенными на одном компе прогами блестяще поддерживает COM. Я бы рекомендовал именно его. Навскидку код привести не могу. Советую взять книжку Эрика Хармона про COM и DCOM в Delphi.
Fredericco (2002-04-16 10:34:00) [11]LazorenkoX >> А не будет ли проще через
TClientSocketиTServerSocket?
KvORubin (2002-04-16 10:33:00) [12]
//Вот как я всё это понял:
//Отредактируйте пожалусто как правельно, а то я только
//начинающий и троеточий непонимаю :(
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.
LazorenkoX (2002-04-16 10:10:00) [13]
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:02:00) [14]
Кто такой VAL_MSG ???
Чё-то ничего не получается, напишите пожалусто полноценный пример, хотя-бы одного ехе.
LazorenkoX (2002-04-16 09:24:00) [15]Обе ЕХЕ должны быть запущены и иметь объекты, которые могут принимать сообщения системы, например 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;
//Может где есть небольшая ошибка или глупость, но примерно так.