Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как передать данные другому приложению?


Автор: Staraus 18.9.2009, 23:22
Здравствуйте, у меня вопрос, как можно узнать значение переменной из одного приложения другому приложению?
Например, 1-ое приложение представляет собою часы, а 2-ая программа, которая показывает время. По запросу 2-ого приложения как можно провести синхронизацию времени с 1-ым приложением?

Автор: bems 18.9.2009, 23:29
Если для конкретно этого примера, то можно отправить сообщение, в WParam передать одну половину времени, в LParam - другоую. Для более сложных случаев есть много способов: memory-mapped files, mailslots, named/unnamed pipes и тд

Автор: Staraus 19.9.2009, 00:07
А можно поконкретней для этого примера разобрать поподробнее? Или дать ссылку на лит-ру,  а то я немного не понимаю))

Автор: bems 19.9.2009, 00:36
Код

procedure SendDateTime(dt: TDateTime);
var DestWnd: HWND;
begin
DestWnd := GetDestWnd;
PostMessage(DestWnd, DateTimeMessage, Integer(LARGE_INTEGER(dt).LowPart), LARGE_INTEGER(dt).HighPart);
end;

Это процедура отправки. Тут предполагается что GetDestWnd это функция, которая возвращает хендл окна которому отправить. Её реализация зависит от того, как ты собираешся узнавать, а кому собственно отправлять время. Например можно искать по имени класса (FindWindow)

DateTimeMessage это переменная типа cardinal, которая проинициализирована как-то так
Код

DateTimeMessage := RegisterWindowMessage('{4386904C-451C-4EAB-BB3A-4FC46BE78EB9}')


В принимающей проге ты перекрываешь процедуру окна
Код

protected
    procedure WndProc(var Message: TMessage); override;


и в реализации пишеш
Код

procedure TForm1.WndProc(var Message: TMessage);
var dt: TDateTime;
begin
if Message.Msg = DateTimeMessage
   then begin
        Integer(LARGE_INTEGER(dt).LowPart) := Message.WParam;
        LARGE_INTEGER(dt).HighPart := Message.LParam;
        HandleDateTimeMessage(dt);
        end
   else inherited;
end;

Тут HandleDateTimeMessage это процедура, которая будет делать с полученым временем то что тебе нужно, а DateTimeMessage это переменная которая проинициализирована вточности(!) той же строкой что и одноименная переменная из передающей проги

Автор: CodeMonkey 19.9.2009, 00:38
http://www.google.ru/search?q=WM_COPYDATA, http://msdn.microsoft.com/en-us/library/aa365574(VS.85).aspx.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)