Форум: "Основная";
Текущий архив: 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.005 c