Zrobiłem coś takiego w przeszłości.
Są dwa sposoby, aby o tym myśleć.
z działaniami:
Podczas korzystania działania jest bardzo łatwy do naśladowania wykorzystanie interfejsu użytkownika poprzez umieszczenie kodu w obsługi TActionList.OnExecute. To wydarzenie odpala się przed wykonaniem pojedynczej akcji, co pozwala na prześledzenie, co się stało i kiedy.
Dla przykładu:
procedure TForm1.ActionList1Execute(Action: TBasicAction; var Handled: Boolean);
begin
WriteToLog(TAction(TBasicAction).Caption);
end;
Bez Akcje:
jeśli nie wykorzystujące Actions staje się trochę trudniejsze, ale nie niemożliwe. Musisz stworzyć nową jednostkę z potomkiem TMenuItem z twoim kodem logowania. Pamiętaj, aby umieścić jednostkę po jednostce MENU w klauzuli uses w każdej jednostce, która z niej korzysta. Nowy potomek musi być nazwany TMenuItem, aby to zadziałało. Ponieważ zasadniczo ponownie wprowadzasz tę samą klasę, ale z rozszerzoną funkcjonalnością.
Oto szybka jednostka, którą zrzuciłem, pokazując bardzo prosty przykład.
unit MenuItemLogger;
interface
uses Menus;
Type
TMenuItem = class(Menus.TMenuItem)
public
procedure Click; override;
end;
implementation
uses windows;
{ TMenuItem }
procedure TMenuItem.Click;
begin
outputdebugstring(PWideChar(self.Caption));
inherited;
end;
end.
Aby użyć powyższego miejsce jednostka go jako ostatniego urządzenia w klauzuli zastosowań jakiejkolwiek formie/DataModule z menu (TMainMenu lub TPopupMenu), które chcesz śledzić. Jeśli nie chcesz śledzić konkretnej jednostki, nie dołączaj jej.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActnList, Menus, MenuItemLogger;
Te dwie metody są proste i chociaż działają, prawdopodobnie nie są najlepszymi rozwiązaniami.
Czy możesz wyjaśnić swoje pytanie? Czego szukasz? Co masz na myśli mówiąc "użycie"? –
@Jlouro: dodatkowe informacje, które są potrzebne, obejmują to, czy dotyczy to aplikacji, którą piszesz (tj. Chcesz włączyć to śledzenie), czy monitoruje użycie dowolnych aplikacji na tym samym (lub zdalnym?) Komputerze. Twoje pytanie jest tak nieprecyzyjne, że nie można odgadnąć, czego dokładnie chcesz. – Argalatyr
+1 za pytanie.Przypuszczam, że OP pyta o rozwiązanie zbierające statystyki użytkowania UI, takie jak "który przycisk menu naciskał ile razy, czy są dostępne przez skróty lub klikając", itd. Byłoby to całkiem odkrywcze (np. MS wykorzystywało takie statystyki podczas opracowywania Wstążka UI) –