Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по 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 (Компьютерное железо)