Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Связь между процессами при помощи WM_COPYDATA

Delphi , Программа и Интерфейс , Процессы и Сервисы

Связь между процессами при помощи WM_COPYDATA

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

// Sender: Send data 
// Sender: Daten schicken 

procedure TForm1.Button1Click(Sender: TObject);
 var
   aCopyData: TCopyDataStruct;
   hTargetWnd: HWND;
 begin
   with aCopyData do
   begin
     dwData := 0;
     cbData := StrLen(PChar(Edit1.Text)) + 1;
     lpData := PChar(Edit1.Text)
   end;
   // Search window by the window title 
  // Fenster anhand des Titelzeilentext suchen 
  hTargetWnd := FindWindowEx(0, 0, nil, PChar('WM_COPYDATA-Receiver'));
   if hTargetWnd <> 0 then
     SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@aCopyData))
   else
     ShowMessage('No Recipient found!');
 end;


 (* -------------------------------------------------------------------- *)


 // Recipient - Receive data 
// Empfanger - Daten empfangen 

type
   TForm1 = class(TForm)
     private
     { Private declarations }
     procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
   public
     { Public declarations }
   end;

 procedure TForm1.WMCopyData(var Msg: TWMCopyData);
 var
   sText: array[0..99] of Char;
 begin
   // generate text from parameter 
  // anzuzeigenden Text aus den Parametern generieren 
  StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);
   // write received text 
  // Empfangenen Text ausgeben 
  label1.Caption := sText;
 end;

Пример использования WM_COPYDATA для обмена данными между процессами в Delphi!

Вот разбивка кода:

Отправитель (Form1)

В обработчике события Button1Click отправитель процесса готовит структуру TCopyDataStruct, чтобы отправить данные другому процессу. Структура содержит следующие поля:

  • dwData: установлено в 0
  • cbData: установлено в длину текста в Edit1 плюс 1 (для null-терминации)
  • lpData: указывает на текст в Edit1

Отправитель затем ищет окно с заголовком "WM_COPYDATA-Receiver" с помощью FindWindowEx. Если такое окно найдено, отправитель отправляет данные в это окно с помощью SendMessage с сообщением WM_COPYDATA. Если не найдено соответствующее окно, отображается сообщение об ошибке.

Получатель (Form2)

В обработчике события WMCopyData получатель процесса получает отправленные данные. Обработчик события:

  1. Копирует полученный текст в массив sText
  2. Устанавливает заголовок Label1 на полученный текст

Обработчик события WMCopyData объявлен с параметром TWMCopyData, который содержит информацию о сообщении. В частности, он имеет поле CopyDataStruct, которое указывает на структуру, отправленную отправителем.

Альтернативное решение

Хотя WM_COPYDATA может использоваться для простого обмена данными между процессами, она имеет некоторые ограничения:

  • Она работает только на одном рабочем столе (т.е., различные процессы на том же физическом компьютере)
  • Данные отправляются как блок памяти, который может не быть подходящим для больших или сложных структур данных
  • Нет встроенных механизмов для обработки ошибок или повторных попыток при сбое

Если вам нужно обмениваться данными между процессами через сеть или использовать болееadvanced функции (например, надежный обмен данными, подтверждение), рассмотрите другие методы межпроцессного взаимодействия (IPC), такие как:

  1. Названные трубы (Windows API)
  2. Сокеты (TCP/IP)
  3. Делимая память (Windows API)
  4. COM (Component Object Model)

Эти IPC-методы обеспечивают более flexibility и надежность, чем WM_COPYDATA, но также требуют больше усилий для реализации.

Связь между процессами в Delphi может быть установлена с помощью WM_COPYDATA, позволяя передавать данные между процессами с использованием функции SendMessage и обработки сообщения WMCopyData.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Процессы и Сервисы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:00:47/0.0033609867095947/0