Содержание материала

 

Способы обмена данными между процессами

Далее мы рассмотрим основные способы обмена данными между процессами и их область применимости.

 

Clipboard

Буфер обмена предназначен для переноса данных пользователем между приложениями. Приложения должны поддерживать копирование своих данных в буфер и вставку из него, однако, они не должны использовать буфер обмена без участия пользователя, поскольку это приведет к уничтожению помещенных туда данных. В Delphi для работы с буфером обмена имеется класс TClipboard.

Также необходимо обратить внимание, что некоторые приложения (например, Microsoft Excel) ведут себя по-разному в Windows 95 и в Windows NT. При вставке из буфера обмена из под Windows NT, Excel вставляет данные в кодировке UNICODE, и, если русский текст был помещен в буфер обмена как 8-битовые символы, вставленные данные оказываются некорректными. Для решения этой проблемы необходимо определять версию Windows и вставлять текст с её учетом. Сделать это можно следующим образом:

Code:

procedure SendToClipboard(const S: String);

var

Data: THandle;

DataPtr: Pointer;

Version: TOSVersionInfo;

Size: Integer;

begin

Version.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);

GetVersionEx(Version);

if Version.dwPlatformId = VER_PLATFORM_WIN32_NT then

with Clipboard do

begin

   Size := Length(S) * SizeOf(WideChar) + 1;

   Open;

   try

     Data := GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, Size);

     try

       DataPtr := GlobalLock(Data);

       try

         MultiByteToWideChar(CP_ACP, 0, PChar(S), Length(S),

           DataPtr, Size);

         Clear;

         SetClipboardData(CF_UNICODETEXT, Data);

       finally

         GlobalUnlock(Data);

       end;

     finally

       GlobalFree(Data);

     end;

   finally

     Close;

   end;

end

else

   Clipboard.SetTextBuf(PChar(S));

end;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить