Последние записи
- Склеить несколько файлов в один
- Windows 10 сменить администратора
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
8th
Окт
Контроль буфера обмена
Posted by maloy under Delphi, Архив
AndrzejX
Написал простую программку для контроля буфера — содержится ли там определённая текстовая фраза. Программка должна висеть в памяти, но при этом, естественно, не мешать обычной работе. Проверка:
try
if ClipBoard.asText='Нужная фраза'
then ...
except
end;
Всё работает. Но при попытке, например при работе в Word’е, поместить что-либо в буфер происходит задержка в несколько секунд. Это не называется «не мешать». Можно ли что-то сделать?
Somebody
Код:uses Windows, Messages; const HWND_MESSAGE = HWND(-3); WndClassName = 'ClipboardControlWndClass'; var hNextWindow: HWND; function WndProc(hWindow: HWND; Msg: Cardinal; wParam, lParam: Integer): Integer; stdcall; var hClipboardData: THandle; pData: PChar; begin Result := 0; case Msg of WM_CREATE: hNextWindow := SetClipboardViewer(hWindow); WM_DESTROY: begin ChangeClipboardChain(hWindow, hNextWindow); PostQuitMessage(0); end; WM_CLOSE: DestroyWindow(hWindow); WM_CHANGECBCHAIN: begin if HWND(wParam) = hNextWindow then hNextWindow := HWND(lParam) else if hNextWindow <> 0 then SendMessage(hNextWindow, Msg, wParam, lParam); end; WM_DRAWCLIPBOARD: begin if IsClipboardFormatAvailable(CF_TEXT) and OpenClipboard(hWindow) then begin hClipboardData := GetClipboardData(CF_TEXT); if hClipboardData <> 0 then begin pData := GlobalLock(hClipboardData); if pData <> nil then begin if Pos('Hello', pData) <> 0 then Beep(2000, 100); GlobalUnlock(hClipboardData); end; end; CloseClipboard(); if hNextWindow <> 0 then SendMessage(hNextWindow, Msg, wParam, lParam); end; end; else Result := DefWindowProc(hWindow, Msg, wParam, lParam); end; end; var WindowClass: WNDCLASS; Mess: MSG; begin FillChar(WindowClass, SizeOf(WindowClass), 0); WindowClass.lpfnWndProc := @WndProc; WindowClass.hInstance := hInstance; WindowClass.lpszClassName := WndClassName; RegisterClass(WindowClass); CreateWindow(WndClassName, nil, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, hInstance, nil); while GetMessage(Mess, 0, 0, 0) do DispatchMessage(Mess); halt(Mess.wParam); end.
тема на форуме от 2009 года
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)