Ich habe so etwas in der Vergangenheit gemacht.
Es gibt zwei Möglichkeiten, die ich mir vorstellen kann, dies zu tun.
Mit Aktionen:
Bei Aktionen mit, es ist sehr einfach, der UI-Nutzung zu folgen, indem Code in den TActionList.OnExecute Handler platzieren. Dieses Ereignis wird ausgelöst, bevor die einzelne Aktion ausgeführt wird. Dadurch können Sie verfolgen, was wann passiert ist.
Beispiel:
procedure TForm1.ActionList1Execute(Action: TBasicAction; var Handled: Boolean);
begin
WriteToLog(TAction(TBasicAction).Caption);
end;
Ohne Aktionen:
Wenn Ihre Aktionen nicht verwenden wird es ein wenig schwieriger, aber nicht unmöglich. Sie erstellen müssen eine neue Einheit mit einem TMenuItem-Nachkommen mit Ihrem Logging-Code darin erstellen. Stellen Sie sicher, dass Ihre neue Einheit nach der MENU-Einheit in die uses-Klausel in jeder Einheit eingefügt wird, die sie verwendet. Der neue Abkömmling muss TMenuItem heißen, damit dies funktioniert. Da Sie im Wesentlichen die gleiche Klasse wieder einführen, aber mit erweiterter Funktionalität.
Hier ist eine schnelle Einheit, die ich zusammen zeigte, ein sehr einfaches Beispiel zeigend.
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.
der obigen Einheit Ort, um es als die letzte Einheit in der uses-Klausel jeder Form/Datenmodul mit Menüs (TMainMenu oder TPopupMenu) zu verwenden, die Sie verfolgen möchten. Wenn Sie eine bestimmte Einheit nicht verfolgen möchten, schließen Sie sie nicht ein.
Diese beiden Methoden sind einfach und während sie funktionieren, sind sie wahrscheinlich nicht die besten Lösungen.
Können Sie bitte Ihre Frage klären? Wonach suchen Sie? Was meinst du mit "Nutzung"? –
@Jlouro: Weitere Details, die benötigt werden, umfassen, ob dies für eine App ist, die Sie schreiben (d. H. Sie möchten diese Verfolgung integrieren) oder um die Verwendung von beliebigen Anwendungen auf demselben (oder einem entfernten?) Computer zu überwachen. Ihre Frage ist so vage, dass es unmöglich ist, genau zu erraten, was Sie wollen. – Argalatyr
+1 für die Frage.Ich vermute, OP fragt nach einer Lösung, die UI-Nutzungsstatistiken sammelt, wie "welche Menütaste gedrückt hat, wie oft, ob sie durch Tastenkürzel oder durch Anklicken aufgerufen werden", etc .. Es wäre in der Tat ziemlich aufschlussreich (dh MS verwendete solche Statistiken während der Entwicklung der Ribbon UI) –