Способы обмена данными между процессами
Далее мы рассмотрим основные способы обмена данными между процессами и их область применимости.
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; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!