Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Как получить событие о смене реестра?

Поиск:
Код
{
 An application can be notified of changes in the data stored in the
 Windows clipboard by registering itself as a Clipboard Viewer.

 Clipboard viewers use two API calls and several messages to communicate
 with the Clipboard viewer chain. SetClipboardViewer adds a window to the
 beginning of the chain and returns a handle to the next viewer in the chain.
 ChangeClipboardChain removes a window from the chain. When a clipboard change occurs,
 the first window in the clipboard viewer chain is notified via the WM_DrawClipboard
 message and must pass the message on to the next window. To do this, our application
 must store the next window along in the chain to forward messages to and also respond
 to the WM_ChangeCBChain message which is sent whenever any other clipboard viewer on
 the system is added or removed to ensure the next window along is valid.
}


unit Unit1;

interface

uses
 Windows, Messages, Forms, Classes, Controls, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure Button1Click(Sender : TObject);
   procedure Button2Click(Sender : TObject);
   procedure FormCreate(Sender : TObject);
   procedure FormDestroy(Sender : TObject);
 private
   FNextClipboardViewer: HWND;
   procedure WMChangeCBChain(var Msg : TWMChangeCBChain); message WM_CHANGECBCHAIN;
   procedure WMDrawClipboard(var Msg : TWMDrawClipboard); message WM_DRAWCLIPBOARD;
 end;

var
 Form1 : TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender : TObject);
begin
 { Initialize variable }
 FNextClipboardViewer := 0;
end;


procedure TForm1.Button1Click(Sender : TObject);
begin
 if FNextClipboardViewer <> 0 then
   MessageBox(0, 'This window is already registered!', nil, 0)
 else
   { Add to clipboard chain }
   FNextClipboardViewer := SetClipboardViewer(Handle);
end;


procedure TForm1.Button2Click(Sender : TObject);
begin
 { Remove from clipboard chain }
 ChangeClipboardChain(Handle, FNextClipboardViewer);
 FNextClipboardViewer := 0;
end;


procedure TForm1.WMChangeCBChain(var Msg : TWMChangeCBChain);
begin
 inherited;
 { mark message as done }
 Msg.Result := 0;
 { the chain has changed }
 if Msg.Remove = FNextClipboardViewer then
   { The next window in the clipboard viewer chain had been removed. We recreate it. }
   FNextClipboardViewer := Msg.Next
 else
   { Inform the next window in the clipboard viewer chain }
   SendMessage(FNextClipboardViewer, WM_CHANGECBCHAIN, Msg.Remove, Msg.Next);
end;


procedure TForm1.WMDrawClipboard(var Msg : TWMDrawClipboard);
begin
 inherited;
 { Clipboard content has changed }
 try
   MessageBox(0, 'Clipboard content has changed!', 'Clipboard Viewer', MB_ICONINFORMATION);
 finally
   { Inform the next window in the clipboard viewer chain }
   SendMessage(FNextClipboardViewer, WM_DRAWCLIPBOARD, 0, 0);
 end;
end;


procedure TForm1.FormDestroy(Sender : TObject);
begin
 if FNextClipboardViewer <> 0 then
 begin
   { Remove from clipboard chain }
   ChangeClipboardChain(Handle, FNextClipboardViewer);
   FNextClipboardViewer := 0;
 end;
end;

end.






Просмотров: 2244

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную