Windows copy paste buffer

Applies ToWindows 11 Windows 10

Использование буфера обмена

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

Ниже приведены ответы на некоторые вопросы, связанные с буфером обмена.

Открытие параметров буфера обмена

Чтобы включить буфер обмена в первый раз, выберите клавиши с логотипом Windows + V, а затем выберите Включить.

Чтобы синхронизировать элементы буфера обмена с компьютером, необходимо убедиться, что функция синхронизации включена.

  1. Выберите Пуск > Параметры > системный > буфер обмена .

  2. Установите переключатель журнал буфера обмена на всех устройствах в значение Вкл

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

Вы можете быстро очистить все, кроме закрепленных элементов, на устройстве и в облаке.

  1. Выберите Пуск > Параметры > системный > буфер обмена .

  2. В области Очистить данные буфера обмена выберите Очистить.

Вы также можете очистить журнал буфера обмена устройства, выбрав клавиши с логотипом Windows +V, а затем выбрав параметр Очистить все в верхней части экрана.

Вы можете очистить любой конкретный элемент в буфере обмена.

  1. Выберите Клавиша с логотипом Windows + V.

  2. Рядом с рассматриваемым элементом выберите Дополнительные сведения (…), а затем — Удалить .

Устранение неполадок с буфером обмена

Убедитесь, что вы включили журнал буфера обмена. Чтобы включить буфер обмена в первый раз, выберите клавиши с логотипом Windows + V и выберите Включить.

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

Вы можете настроить автоматическую синхронизацию скопированных элементов с другими устройствами.

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

  1. Выберите Пуск > Параметры > системный > буфер обмена .

  2. В разделе Журнал буфера обмена на устройствах установите переключатель в значение Вкл.

  3. Выберите Автоматически синхронизировать текст, который я копируем.

    Примечание: Параметр Вручную синхронизировать текст, который я копируем, означает, что вам нужно открыть журнал буфера обмена (клавиша с логотипом Windows + V) и вручную нажать кнопку синхронизации в элементе буфера обмена. Затем текст будет отправлен в облако и синхронизирован с другими устройствами.

Размеры элементов не должны превышать 4 МБ. Поддерживаются форматы файлов text, HTML и bitmap.

Журнал буфера обмена рассчитан не более чем на 25 скопированных записей. Система автоматически удаляет старые элементы(если они не закреплены), чтобы освободить место для новых.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

Время на прочтение12 мин

Количество просмотров50K

Недавно у меня появилась возможность выполнить отладку буфера обмена в Windows, и я решил, что хорошо бы поделиться информацией, которую удалось узнать. Буфер обмена — это тот компонент Windows, который многие из нас используют десятки (сотни?) раз в день, особо не размышляя об этом. Прежде чем взяться за это дело, я даже никогда не задумывался, как всё устроено. Как выяснилось, там столько интересного, что вы даже не можете себе представить. Сначала опишу, как приложения хранят разные типы данных в буфере обмена и как извлекают их оттуда, а затем — как приложения могут «прицепиться» к буферу и отслеживать изменения в нём. В обоих случае вы увидите отладочные записи, которые показывают, как получить доступ к данным из отладчика.

Начнём с обсуждения форматов буфера обмена. Такие форматы используются для описания, какие типы данные можно поместить в буфер. Там есть некоторое количество предопределённых стандартных форматов, которые может использовать приложение, вроде битового массива, текста ANSI, текста в Юникоде и TIFF. Windows также позволяет приложению установить собственный формат. Например, текстовый процессор может зарегистрировать формат, включающий в себя текст, форматирование и картинки. Конечно, это ведёт к определённой проблеме: что произойдёт, если вы скопируете данные из текстового редактора и вставите их в «Блокнот», который не понимает всего этого форматирования и не отображает картинки?

Выход — разрешить одновременное хранение данных в буфере обмена в нескольких форматах. Когда я раньше думал о буфере обмена, то представлял, что там хранится единственный объект («мой текст» или «моя картинка»), но на самом деле мои данные хранятся в буфере в разных формах. Программа, которая берёт информацию из буфера, получает её в том формате, который она может использовать.

Как же данные появляются в буфере обмена? Очень просто, приложение сначала объявляет о праве собственности на буфер обмена через функцию OpenClipboard. После этого программа может очистить буфер обмена командой EmptyClipboard и, наконец, поместить туда свои данные командой SetClipboardData. SetClipboardData принимает два параметра. Первый — это идентификатор одного из форматов буфера обмена, которые мы упоминали выше. Второй — дескриптор сегмента в памяти, который содержит данные в этом формате. Приложение может неоднократно вызывать команду SetClipboardData для каждого из форматов, какие она хочет поместить в буфер, от лучшего к худшему (поскольку то приложение, куда будут вставляться данные, выберет первый подходящий формат из списка). Чтобы облегчить жизнь разработчику, Windows автоматически обеспечивает конвертацию некоторых типов форматов для буфера обмена. По окончании процесса программа вызывает CloseClipboard.

Когда пользователь нажимает кнопку «Вставить», целевое приложение вызывает OpenClipboard и одну из следующих функций для определения доступных форматов данных: IsClipboardFormatAvailable, GetPriorityClipboardFormat или EnumClipboardFormats. Если оно находит подходящий формат, то тогда вызывает GetClipboardData с идентификатором нужного формата в качестве параметра, чтобы получить данные. В конце приложение использует команду CloseClipboard для закрытия буфера.

Теперь взглянем, как с помощью отладчика определить, какие данные записаны в буфер обмена. (Заметьте, что все мои записи сделаны в системе Win7/2008 R2 — так что на других версиях ОС они могут выглядеть несколько иначе). Поскольку буфер является частью Win32k.sys, вам понадобится отладчик ядра. Я люблю использовать в качестве контрольной точки win32k!InternalSetClipboardData+0xe4. В таком смещении хорошо то, что оно находится за регистром RDI, заполненным данными из SetClipboardData в структуре, известной как tagCLIP.

kd> u win32k!InternalSetClipboardData+0xe4-c L5
win32k!InternalSetClipboardData+0xd8:
fffff960`0011e278 894360          mov     dword ptr [rbx+60h],eax
fffff960`0011e27b 8937            mov     dword ptr [rdi],esi
fffff960`0011e27d 4c896708        mov     qword ptr [rdi+8],r12
fffff960`0011e281 896f10          mov     dword ptr [rdi+10h],ebp
fffff960`0011e284 ff15667e1900    call    qword ptr[win32k!_imp_PsGetCurrentProcessWin32Process (fffff960`002b60f0)]

kd> dt win32k!tagCLIP
   +0x000 fmt              : Uint4B
   +0x008 hData            : Ptr64 Void
   +0x010fGlobalHandle     : Int4B

Вот как выглядит вызов к SetClipboardData от «Блокнота»:

kd> k
Child-SP          RetAddr           Call Site
fffff880`0513a940 fffff960`0011e14f win32k!InternalSetClipboardData+0xe4
fffff880`0513ab90 fffff960`000e9312 win32k!SetClipboardData+0x57
fffff880`0513abd0 fffff800`01482ed3 win32k!NtUserSetClipboardData+0x9e
fffff880`0513ac20 00000000`7792e30ant!KiSystemServiceCopyEnd+0x13
00000000`001dfad8 00000000`7792e494 USER32!ZwUserSetClipboardData+0xa
00000000`001dfae0 000007fe`fc5b892b USER32!SetClipboardData+0xdf
00000000`001dfb20 000007fe`fc5ba625 COMCTL32!Edit_Copy+0xdf
00000000`001dfb60 00000000`77929bd1 COMCTL32!Edit_WndProc+0xec9
00000000`001dfc00 00000000`779298da USER32!UserCallWinProcCheckWow+0x1ad
00000000`001dfcc0 00000000`ff5110bc USER32!DispatchMessageWorker+0x3b5
00000000`001dfd40 00000000`ff51133c notepad!WinMain+0x16f
00000000`001dfdc0 00000000`77a2652d notepad!DisplayNonGenuineDlgWorker+0x2da
00000000`001dfe80 00000000`77b5c521 kernel32!BaseThreadInitThunk+0xd
00000000`001dfeb0 00000000`00000000ntdll!RtlUserThreadStart+0x1d

Итак, теперь мы можем просмотреть содержимое RDI как tagCLIP и увидеть, что записано в буфер:

kd> dt win32k!tagCLIP @rdi
   +0x000 fmt              : 0xd
   +0x008 hData            : 0x00000000`00270235 Void
   +0x010fGlobalHandle     : 0n1

Fmt — это формат для буфера обмена. 0Xd — это число 13, что соответствует тексту в формате Юникода. Однако мы не можем просто запустить du по значению hData, потому что это дескриптор, а не прямой указатель на данные. Так что нужно поискать его в глобальной структуре win32k — gSharedInfo:

kd> ?win32k!gSharedInfo
Evaluate expression: -7284261440224 = fffff960`002f3520
kd> dt win32k!tagSHAREDINFO fffff960`002f3520
   +0x000 psi              : 0xfffff900`c0980a70 tagSERVERINFO
   +0x008 aheList          : 0xfffff900`c0800000 _HANDLEENTRY
   +0x010 HeEntrySize      : 0x18
   +0x018 pDispInfo        : 0xfffff900`c0981e50 tagDISPLAYINFO
   +0x020ulSharedDelta     : 0
   +0x028 awmControl       : [31] _WNDMSG
   +0x218DefWindowMsgs     : _WNDMSG
   +0x228DefWindowSpecMsgs : _WNDMSG

aheList в gSharedInfo содержит массив с дескрипторами, и последние два байта hData, умноженные на размер записи дескриптора, показывают адрес записи нашего дескриптора:

kd> ?0x00000000`00270235 & FFFF
Evaluate expression: 565 = 00000000`00000235
kd> ??sizeof(win32k!_HANDLEENTRY)
unsigned int64 0x18
kd> ? 0xfffff900`c0800000 + (0x235*0x18)
Evaluate expression: -7693351766792 = fffff900`c08034f8
kd> dt win32k!_HANDLEENTRY fffff900`c08034f8
   +0x000 phead            : 0xfffff900`c0de0fb0 _HEAD
   +0x008 pOwner           : (null)
   +0x010 bType            : 0x6 ''
   +0x011 bFlags           : 0 ''
   +0x012 wUniq            : 0x27

Если посмотреть phead со смещением 14, то мы получим наши данные (это смещение может отличаться на разных платформах):

kd> du fffff900`c0de0fb0 + 0x14
fffff900`c0de0fc4 "Hi NTDebugging readers!"

Представим другой сценарий. Я скопировал какой-то текст из Wordpad, и команда SetClipboardData отработала определённое количество раз, чтобы разместить данные в разных форматах. Запись в формате Юникода выглядит так::

Breakpoint 0 hit
win32k!InternalSetClipboardData+0xe4:
fffff960`0011e284 ff15667e1900   call    qword ptr[win32k!_imp_PsGetCurrentProcessWin32Process (fffff960`002b60f0)]
kd> dt win32k!tagCLIP @rdi
   +0x000 fmt              : 0xd
   +0x008 hData            : (null)
   +0x010fGlobalHandle    : 0n0

hData равен нулю! Почему так? Оказывается, буфер обмена позволяет приложению передавать нуль в качестве параметра SetClipboardData для определённого формата. Это означает, что приложение способно предоставить данные в данном формате, но сделает это позже, в случае необходимости. Если я захочу вставить текст в «Блокнот», для чего в буфере должен быть текст в Юникоде, Windows отправит сообщение WM_RENDERFORMAT в окно WordPad, и тогда WordPad предоставит данные в новом формате. Конечно, если приложение закрывается до того, как предоставило данные во всех форматах, Windows понадобятся все форматы. В этом случае Windows отправит сообщение WM_RENDERALLFORMATS, чтобы другие приложения могли использовать данные из буфера обмена после закрытия материнского приложения.

Теперь посмотрим, как приложение может отслеживать буфер обмена на предмет изменений. Это важно знать, потому что в этом месте Windows позволяет сторонним приложениям подключаться к системе. Если у вас наблюдаются непонятные глюки с копированием и вставкой, причиной может быть некорректное поведение какой-то из таких программ. Начнём с того, что рассмотрим механизмы подключения к буферу обмена. Затем рассмотрим, можно ли с помощью отладчика идентифицировать приложения, которые используют такие хуки.

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

Функциональность Clipboard Viewer появилась ещё в версии Windows 2000, если не раньше. Принцип работы довольно простой: приложение, которое заинтересовано в получении уведомлений об изменении в буфере, вызывает SetClipboardViewer и передаёт дескриптор своего окна. Windows хранит этот дескриптор в структуре win32k, и каждый раз при изменении буфера обмена Windows отправляет сообщение WM_DRAWCLIPBOARD в зарегистрированное окно.

Конечно, зарегистрироваться для просмотра буфера могут несколько окон — как Windows справится с этим? Ну, если приложение вызывает SetClipboardViewer, а другое окно раньше уже зарегистрировалось для просмотра буфера обмена, то Windows возвращает новому окну значение дескриптора предыдущего окна. И теперь новое окно, следящее за буфером, обязано вызвать SendMessage каждый раз, когда получает WM_DRAWCLIPBOARD, и уведомить об изменении буфера следующее окно в цепочке тех, кто следит за буфером. Каждое из окон, следящих за буфером, также должно обрабатывать сообщения WM_CHANGECBCHAIN. Такие сообщения уведомляют все остальные окна об удалении одного звена в цепочке и сообщают, какое звено становится следующим в очереди. Это позволяет сохранить цепочку.

Очевидная проблема подобной архитектуры состоит в следующем: она рассчитывает, что каждое приложение, следящее за буфером, будет вести себя корректно, не завершать неожиданно работу и в целом будет хорошим гражданином в системе. Если какое-то из приложений начнёт вести себя недружественно, то оно не отправит уведомление об изменении буфера обмена следующему приложению в цепочке, в результате чего вся цепочка останется без уведомлений.

Чтобы справиться с такими проблемами, в Windows Vista добавили механизм прослушивания формата буфера обмена — Clipboard Format Listener. Он работает во многом так же, как просмотр буфера обмена, за исключением того, что Windows сама ведёт список приложений, которые прослушивают буфер, а не полагается на добропорядочность приложений, которые должны сохранять цепочку.

Если приложение хочет прослушивать буфер, оно вызывает функцию AddClipboardFormatListener и передаёт дескриптор своего окна. После этого обработчик сообщений окна будет получать сообщения WM_CLIPBOARDUPDATE. Когда приложение собирается завершить работу или больше не хочет получать уведомления, оно вызывает RemoveClipboardFormatListener.

Мы рассмотрели, как зарегистрировать просмотр/прослушивание буфера обмена. Теперь посмотрим, как с помощью отладчика определить, какие программы участвуют в этих процессах. Сначала нужно идентифицировать процесс в сессии, где мы хотим проверить мониторинг буфера обмена. Это может быть любой процесс win32 в этой сессии — он нужен нам просто для того, чтобы найти указатель на Window Station. В этом случае я бы использовал окно «Блокнота», как и раньше:

kd> !process 0 0 notepad.exe
PROCESS fffff980366ecb30
    SessionId: 1  Cid: 0374   Peb: 7fffffd8000  ParentCid: 0814
    DirBase: 1867e000  ObjectTable: fffff9803d28ef90  HandleCount: 52.
    Image: notepad.exe

Если вы делаете это в процессе отладки ядра, то понадобится интерактивно сменить контекст (используя .process /I<address>, затем нажать g и подождать, пока отладчик прорвётся назад). Теперь запускаем DT на адрес процесса как _EPROCESS, и смотрим на поле Win32Process:

kd> dt _EPROCESS fffff980366ecb30 Win32Process
nt!_EPROCESS
   +0x258 Win32Process : 0xfffff900`c18c0ce0 Void

Далее посмотрим адрес Win32Process как win32k!tagPROCESSINFO и узнаем значение rpwinsta:

kd> dt win32k!tagPROCESSINFO 0xfffff900`c18c0ce0 rpwinsta
   +0x258 rpwinsta : 0xfffff980`0be2af60 tagWINDOWSTATION

Это наша Window Station. Сливаем содержимое через dt:

kd> dt 0xfffff980`0be2af60 tagWINDOWSTATION
win32k!tagWINDOWSTATION
   +0x000 dwSessionId      : 1
   +0x008 rpwinstaNext     : (null)
   +0x010 rpdeskList       : 0xfffff980`0c5e2f20 tagDESKTOP
   +0x018 pTerm            : 0xfffff960`002f5560 tagTERMINAL
   +0x020 dwWSF_Flags      : 0
   +0x028 spklList         : 0xfffff900`c192cf80 tagKL
   +0x030 ptiClipLock      : (null)
   +0x038 ptiDrawingClipboard: (null)
   +0x040 spwndClipOpen    : (null)
   +0x048 spwndClipViewer  : 0xfffff900`c1a4ca70 tagWND
   +0x050 spwndClipOwner   : 0xfffff900`c1a3ef70 tagWND
   +0x058 pClipBase        : 0xfffff900`c5512fa0 tagCLIP
   +0x060 cNumClipFormats  : 4
   +0x064 iClipSerialNumber : 0x16
   +0x068 iClipSequenceNumber : 0xc1
   +0x070 spwndClipboardListener : 0xfffff900`c1a53440 tagWND
   +0x078 pGlobalAtomTable: 0xfffff980`0bd56c70 Void
   +0x080 luidEndSession   : _LUID
   +0x088 luidUser         : _LUID
   +0x090 psidUser         : 0xfffff900`c402afe0 Void

Обратите внимание на поля spwndClipViewer, spwndClipboardListener и spwndClipOwnerfields. Здесь spwndClipViewer — это последнее зарегистрированное окно в цепочке тех, кто просматривает буфер обмена. Также spwndClipboardListener — последнее зарегистрированное окно прослушивания буфера в списке Clipboard Format Listener. Окно spwndClipOwner — это то окно, которое разместило данные в буфере обмена.

Ели мы знаем окно, то осталось несколько шагов, чтобы узнать, к какому процессу оно относится. Нас интересуют forspwndClipViewer, spwndClipboardListener и spwndClipOwner. Сначала запускаем dt, чтобы узнать значение tagWND. Для этой демонстрации мы используем spwndClipViewer:

kd> dt 0xfffff900`c1a4ca70 tagWND
win32k!tagWND
   +0x000 head             : _THRDESKHEAD
   +0x028 state            : 0x40020008
   +0x028 bHasMeun         : 0y0
   +0x028 bHasVerticalScrollbar : 0y0
…

Нас интересует только значение head — так что если смещение 0, делаем dt для того же адреса на _THRDESKHEAD:

kd> dt 0xfffff900`c1a4ca70 _THRDESKHEAD
win32k!_THRDESKHEAD
   +0x000 h                : 0x00000000`000102ae Void
   +0x008 cLockObj         : 6
   +0x010 pti              : 0xfffff900`c4f26c20tagTHREADINFO
   +0x018 rpdesk           : 0xfffff980`0c5e2f20 tagDESKTOP
   +0x020 pSelf            : 0xfffff900`c1a4ca70  "???"

Теперь запускаем dt для адреса, указанного в поле pti как tagTHREADINFO:

kd> dt 0xfffff900`c4f26c20 tagTHREADINFO
win32k!tagTHREADINFO
   +0x000 pEThread         : 0xfffff980`0ef6cb10 _ETHREAD
   +0x008 RefCount         : 1
   +0x010 ptlW32           : (null)
   +0x018 pgdiDcattr       : 0x00000000`000f0d00 Void

Теперь нам интересно только значение поля pEThread, которое мы можем передать в !thread:

kd> !thread 0xfffff980`0ef6cb10 e
THREAD fffff9800ef6cb10 Cid 087c.07ec  Teb: 000007fffffde000 Win32Thread: fffff900c4f26c20 WAIT: (WrUserRequest) UserModeNon-Alertable
    fffff9801c01efe0  SynchronizationEvent
Not impersonating
DeviceMap                 fffff980278a0fc0
Owning Process            fffff98032e18b30       Image:         viewer02.exe
Attached Process          N/A            Image:         N/A
Wait Start TickCount     5435847        Ticks: 33 (0:00:00:00.515)
Context Switch Count     809            IdealProcessor: 0                 LargeStack
UserTime                  00:00:00.000
KernelTime                00:00:00.062
Win32 Start Address 0x000000013f203044
Stack Init fffff880050acdb0 Current fffff880050ac6f0
Base fffff880050ad000 Limit fffff880050a3000 Call 0
Priority 11 BasePriority 8 UnusualBoost 0 ForegroundBoost 2IoPriority 2 PagePriority 5
Child-SP          RetAddr           Call Site
fffff880`050ac730 fffff800`01488f32 nt!KiSwapContext+0x7a
fffff880`050ac870 fffff800`0148b74f nt!KiCommitThreadWait+0x1d2
fffff880`050ac900 fffff960`000dc8e7 nt!KeWaitForSingleObject+0x19f
fffff880`050ac9a0 fffff960`000dc989 win32k!xxxRealSleepThread+0x257
fffff880`050aca40 fffff960`000dafc0 win32k!xxxSleepThread+0x59
fffff880`050aca70 fffff960`000db0c5 win32k!xxxRealInternalGetMessage+0x7dc
fffff880`050acb50 fffff960`000dcab5 win32k!xxxInternalGetMessage+0x35
fffff880`050acb90 fffff800`01482ed3 win32k!NtUserGetMessage+0x75
fffff880`050acc20 00000000`77929e6a nt!KiSystemServiceCopyEnd+0x13 (TrapFrame @ fffff880`050acc20)
00000000`002ffb18 00000000`00000000 0x77929e6a

Как видим, просмотр буфера обмена зарегистрировн от имени процесса viewer02.exe. Поскольку просмотр идёт по цепочке, определить следующий процесс в цепочке будет непросто. Но мы можем сделать это для тех, кто прослушивает буфер. Снова взглянем на нашу Window Station:

kd> dt 0xfffff980`0be2af60 tagWINDOWSTATION
win32k!tagWINDOWSTATION
   +0x000 dwSessionId      : 1
   +0x008 rpwinstaNext     : (null)
   +0x010 rpdeskList       : 0xfffff980`0c5e2f20 tagDESKTOP
   +0x018 pTerm            : 0xfffff960`002f5560 tagTERMINAL
   +0x020 dwWSF_Flags      : 0
   +0x028 spklList         : 0xfffff900`c192cf80 tagKL
   +0x030 ptiClipLock      : (null)
   +0x038 ptiDrawingClipboard : (null)
   +0x040 spwndClipOpen    : (null)
   +0x048 spwndClipViewer  : 0xfffff900`c1a4ca70tagWND
   +0x050 spwndClipOwner   : 0xfffff900`c1a3ef70tagWND
   +0x058 pClipBase        : 0xfffff900`c5512fa0 tagCLIP
   +0x060 cNumClipFormats  : 4
   +0x064 iClipSerialNumber : 0x16
   +0x068 iClipSequenceNumber : 0xc1
   +0x070 spwndClipboardListener: 0xfffff900`c1a53440 tagWND
   +0x078 pGlobalAtomTable: 0xfffff980`0bd56c70 Void
   +0x080 luidEndSession   : _LUID
   +0x088 luidUser         : _LUID
   +0x090 psidUser         : 0xfffff900`c402afe0 Void

Если запустить dt на spwndClipboardListener, то увидим поле spwndClipboardListenerNext с указанием следующего прослушивающего процесса:

kd> dt 0xfffff900`c1a53440 tagWND spwndClipboardListenerNext
win32k!tagWND
   +0x118 spwndClipboardListenerNext : 0xfffff900`c1a50080 tagWND

При достижении последнего процесса в списке прослушивающих буфер tagWND, значение его поля spwndClipboardListenerNext будет нулевым:

kd> dt 0xfffff900`c1a50080 tagWND spwndClipboardListenerNext
win32k!tagWND
   +0x118 spwndClipboardListenerNext : (null)

Используя адрес окна, мы можем тем же методом добраться до названия процесса. Как упоминалось ранее, поскольку tagWND — это структура ядра, ОС сама хранит указатели spwndClipboardListener/spwndClipboardListenerNext, так что они не могут привести к таким проблемам с отслеживанием буфера, как цепочки просмотра.

На этом заканчивается наш обзор буфера обмена Windows. Надеюсь, для вас он стал информативным. Хотите узнать больше о мониторинге буфера обмена? Вот хорошая статья MSDN об этом.

Содержание статьи:

  • Работа с буфером обмена в Windows
    • Как посмотреть что в нем
    • Как очистить его историю
    • Настройки журнала буфера обмена в Windows
  • Вопросы и ответы: 1

Всем здравия!

В современных ОС Windows 10/11 появилась одна интересная фишка, которую многие почему-то не используют. Речь, конечно, о журнале буфера обмена

Что это и зачем нужно?

Вот представьте: при работе нередко приходится что-то копировать (тексты, картинки), вставлять, затем снова копировать и т.д. по кругу… Порой, приходится десятки раз открыть источник, чтобы поочередно из него скопировать нужные фразы, символы и т.д., часто одно и тоже по неск. раз. Неудобно?!

Вот для оптимизации этого процесса и появился журнал буфера обмена — он позволяет очень быстро просмотреть весь список того, что вы когда-то копировали при работе — и, если что нужно, сразу же вставить это в новый документ/файл. На мой взгляд, штука весьма полезная. 👌

Теперь, собственно, о том, как с ней работать…

Примечание: кстати, у меня на блоге есть заметка на аналогичную тему для Android устройств…

*

Работа с буфером обмена в Windows

Как посмотреть что в нем

Ну для начала (на всякий случай) было бы неплохо, если бы вы выделили какое-нибудь слово (фразу) и скопировали ее (сочетание Ctrl+C).

Затем следует нажать сочетание клавиш «WIN»+»V» (можно также попробовать «Win»+».», на ноутбуках возможно Fn+Win+V) — далее перед вами появится спец. окно, в котором есть вкладка с буфером обмена. В этой вкладке можно просмотреть всё, что вы копировали ранее при работе (в этом сеансе).

См. мой пример ниже. 👇

Примечание: журнал буфера обмена появился в Windows 10 в версии 1803 (в 2018г.). В некоторых версиях Windows может быть отключен (включается простым нажатием одноименной кнопки в истории буфера обмена).

img-Kak-otkryit-zhurnal-bufera-obmena-i-posmotret-ego-soderzhimoe.png

Как открыть журнал буфера обмена и посмотреть его содержимое

В моем примере в буфере содержится неск. скопированных слов из этой заметки (я их вставлял туда-сюда, пока оформлял пояснения… 🙂). На скриншоте ниже приведен пример. 👇

Кстати, чтобы вставить что-нибудь из буфера обмена — сделайте следующее:

  • поставьте курсор мышки в нужное место;
  • нажмите Win+V (чтобы появилось заветное окно 👇);
  • и нажмите левой кнопкой мыши по нужной строке из списка. Вроде всё просто?! 👌

img-Vstavka-iz-bufera-obmena.png

Вставка из буфера обмена

*

Как очистить его историю

Вариант 1:

  1. нажать Win+V, чтобы появилось окно управления буфером обмена;
  2. нажать кнопку «Очистить все». 👇

Вариант 2: зайти в параметры Windows и отключить ведение журнала буфера обмена. Об этом чуть ниже.

img-Knopka-ochistit-vsyo-chto-esli-v-bufere.png

Кнопка очистить всё, что если в буфере

Если очистка выполнена успешно — вы увидите надпись «Здесь ничего нет». В моем примере ниже показано, как это выглядит. 👇

img-Zdes-nichego-net.png

Здесь ничего нет

*

Настройки журнала буфера обмена в Windows

Изменить некоторые настройки буфера обмена можно во вкладке параметров Windows — в разделе «Система».

📌 В помощь!

Как открыть параметры в Windows 11/10 — [см. инструкцию]

img-Sistema-bufer-obmena.png

Система — буфер обмена

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

Кстати, тут же есть ссылки на справку и подсказке по работе с ним (правда, почему-то в некоторых версиях Windows они открываются на нагл. языке… И хорошо, если браузер сделает перевод… 🙂)

img-ZHurnal-bufera-obmena-vklyuchen.png

Журнал буфера обмена включен!

*

PS 

Кстати, в MS Word есть свой буфер обмена. Чтобы его посмотреть — нажмите по маленькой стрелочке во вкладке «Главная», см. мой пример ниже. 👇

img-Bufer-obmena-v-Word.png

Буфер обмена в Word

*

Дополнения по теме можно оставить в комментариях ниже.

Успехов! 

👋

Updated March 9, 2023

The Clipboard is one of the most widely used features inside Windows. It used to be just for copying a small amount of text, but not anymore. Let’s look at all the Clipboard features inside Windows.

How to use all of the Clipboard features in Windows

In the early days of computing, users could store small amounts of data in the computer’s RAM (Random Access Memory), which was called the Paste Buffer. You could only save one piece of data at a time, and every time you copied a new piece of data, the last piece was erased.

But over the decades, the Paste Buffer, now known as the Clipboard, has evolved into a valuable and essential tool for productivity. The Clipboard in Windows 10 and Windows 11 can hold multiple pieces of text and images. And how you access the Clipboard has changed over the years.

Before you can take advantage of the full capability of the Windows Clipboard, you have to do a couple of things. The first thing you need to do is to make sure that the Clipboard history feature is turned on.

With Clipboard history turned on, you can view and paste all of the different items you have copied to the Clipboard. You will need to go to Windows Settings to make sure that this feature is activated.

How to get to the Clipboard section of the Windows 11 Settings app

  1. Open the Windows Settings app by either:
    • Left-click on the Start button to bring up the Start menu. In the upper right-hand corner of the Start menu, left-click on All apps. Scroll down the list of programs and left-click on Settings.
    • Right-click on the Start button to bring up the Power User menu. On the Power User menu, left-click on Settings.
    • Press the Windows logo key + I.
  2. Left-click on the System category in the left-hand column.
  3. Scroll down the right-hand column and left-click on the Clipboard category.

How to get to the Clipboard section of the Windows 10 Settings app

  1. Open the Windows Settings app by either:
    • Left-click on the Start button, which will bring up the Start menu. On the Start menu left-click on the gear icon (Settings).
    • Right-click on the Start button, which will bring up the Power User menu. On the Power User menu, left-click on Settings.
    • Press the Windows logo key + I.
  2. Left-click on the System category.
  3. Scroll down the left-hand column and left-click on the Clipboard category.

Once you are in the Clipboard section, make sure that the Clipboard history is turned on.

The Clipboard history switch inside of Windows 10 Settings

You can also clear all of the items on the Clipboard from here.

Now copying text to the Clipboard has always been pretty straightforward, but there may be times you want to copy images to it. The second thing to do is to make sure you have all the programs you can use to capture images.

The first screen capture program built into Windows is the Snipping Tool, and it has been in Windows since Windows 7, and it works well for capturing anything on-screen (if you can see it, you can capture it).

The Snipping Tool inside of Windows

And it automatically copies whatever you snip to the Clipboard. But it does prompt you to save your snip to a file when you close it.

And the second built-in app for capturing screen snips is the Snipping Bar.

Microsoft included it in Windows 10 Version 1809, and few people know about it. That’s because you have to use a combination of three (3) keys on the keyboard to bring it up (Windows logo key + Shift + S).

The downside of the Snipping Bar is that it only captures one snip at a time. Every time you want to capture a screen snip, you have to press the Windows logo key + Shift + S keys. The Snipping Tool will capture as many snips as you like until you close it.

We are now all set to start copying items to the Clipboard. Remember that you can paste text from the Clipboard into almost any program, but you can only paste images into programs that can display images.

For example, you can paste text from the Clipboard into Notepad but not images. But can paste both text and images from the Clipboard into Paint or Wordpad.

There are several different ways to copy and paste from the Clipboard. Here are a few of the most common ways to do it.

Ways to copy text to the Clipboard

Highlight the text you want to copy and then:

  • Press Ctrl + C on the keyboard
    Copying text to the Clipboard using the context menu inside of Windows 10

  • Right-click on the highlighted text and select Copy from the context menu

Ways to copy graphics to the Clipboard

Highlight the image you want to copy and then:

  • Press Ctrl + C on the keyboard

If you can not highlight the image then:

Copying an image to the Clipboard using the context menu inside of Windows 10

  • Right-click on it and select Copy.
  • Use the Snipping Tool or the Snipping Bar to capture a snip of it.

Ways to paste from the Clipboard

Select where you want to place the graphic or text in the program of your choice then:

For more information on the keyboard shortcuts discussed in this article, follow the links below.

Windows logo key shortcuts for Windows 11

Windows logo key shortcuts for Windows 10

General keyboard shortcuts

Check out the following video for examples of copying to and pasting from the Clipboard inside Windows 10.

de6bb991-3ef1-4cfe-831c-5bcea7d4f536|1|5.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04

Всё, что нужно знать о полезной функции для более продуктивной работы.

Что такое журнал буфера обмена

Стандартный буфер, который все привыкли использовать через контекстное меню «Скопировать» и «Вставить» или через сочетания Ctrl + C, Ctrl + V, имеет лишь одну «ячейку памяти». Чего бывает очень мало. Начиная с Windows 10 Microsoft внедрила журнал буфера обмена, который умеет запоминать до 25 элементов. Копировать и вставлять при этом можно текст, ссылки, изображения и другой контент.

Как включить журнал буфера обмена Windows 10 и Windows 11

По умолчанию функция неактивна. Её можно активировать следующим образом.

Как включить буфер обмена Windows 10: удерживая клавишу Win, нажмите V на клавиатуре

Удерживая клавишу Win (с символом «окошка»), нажмите V на клавиатуре. Вы увидите предложение включить журнал буфера обмена с помощью соответствующей кнопки.

Как включить буфер обмена Windows 10: включите тумблер

Если при нажатии Win + V ничего не происходит, то активировать функцию можно в настройках. Для этого сделайте правый клик по меню «Пуск» и выберите «Параметры». Далее в разделе «Система» → «Буфер обмена» включите тумблер как на скриншоте выше.

Как просмотреть буферы обмена Windows 10 и Windows 11

После включения система начнёт хранить всё, что вы копируете или вырезаете, в буфере обмена.

Как посмотреть буфер обмена Windows 10: нажмите Win + V

Для просмотра журнала нажмите Win + V. На экране отобразится плавающее окошко со списком сохранённых элементов, которое можно переместить в удобное место. Запомнить сочетание легко — как обычная вставка, только вместо Ctrl используется клавиша Win.

Как вставить куда-то скопированный элемент

Как посмотреть буфер обмена Windows 10 и вставить скопированный элемент: кликните по нему

Для вставки элемента в документ или, например, в строку поиска достаточно кликнуть по нужному тексту, ссылке или изображению в списке, после чего буфер автоматически закроется. Помимо этого можно использовать стрелки клавиатуры для навигации и Enter для вставки.

Как закрепить нужный элемент

Если вам часто приходится вставлять одинаковые данные вроде реквизитов, ссылок или номеров телефонов, можно закрепить их в буфере, чтобы они всегда были под рукой.

Кликните по значку иголки

Для этого просто кликните по значку иголки напротив нужного элемента.

Как очистить журнал буфера обмена

Как упоминалось выше, в памяти буфера всего 25 ячеек. При их заполнении во время записи новых элементов самые старые стираются.

Как посмотреть буфер обмена Windows 10: элементы можно удалить по отдельности и разом

Каждую из них можно удалить по отдельности, кликнув на троеточие в списке и выбрав значок корзины. Для освобождения места во всём буфере используется кнопка «Очистить всё».

При этом буфер автоматически очищается после перезагрузки и выключения компьютера. Из памяти исчезают все элементы, кроме закреплённых.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Управление цветом в windows 10 для монитора как настроить
  • Какие программы нельзя удалять с компьютера windows 10
  • Windows find dns server address
  • Браузер linux для windows
  • Настройка pycharm для python windows