J'ai déjà fait quelque chose comme ça dans le passé.
Il y a deux façons de penser à cela.
avec des actions:
Lorsque vous utilisez des actions, il est très facile de suivre l'utilisation de l'interface utilisateur en plaçant le code dans le gestionnaire TActionList.OnExecute. Cet événement se déclenche avant que l'action individuelle ne s'exécute, ce qui vous permet de suivre ce qui s'est passé et quand.
Par exemple:
procedure TForm1.ActionList1Execute(Action: TBasicAction; var Handled: Boolean);
begin
WriteToLog(TAction(TBasicAction).Caption);
end;
Sans Actions:
Si vous n'êtes pas en utilisant des actions, il devient un peu plus difficile, mais pas impossible. Vous créez devez créer une nouvelle unité avec un descendant TMenuItem avec votre code de journalisation dedans. Assurez-vous de placer votre nouvelle unité après l'unité MENU dans la clause uses de chaque unité qui l'utilise. Le nouveau descendant doit s'appeler TMenuItem pour que cela fonctionne. Puisque vous réintroduisez essentiellement la même classe mais avec une fonctionnalité étendue.
Voici une unité rapide que j'ai projetée ensemble montrant un exemple très simple.
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.
Pour utiliser le lieu de l'unité ci-dessus comme la dernière unité dans la clause uses de toute forme/DataModule avec des menus (ou TMainMenu TPopupMenu) que vous voulez tracer. Si vous ne voulez pas suivre une unité particulière, ne l'incluez pas. Ces deux méthodes sont simples et, bien qu'elles fonctionnent, elles ne sont probablement pas les meilleures solutions.
Pouvez-vous clarifier votre question? Que cherchez-vous? Que voulez-vous dire par "usage"? –
@Jlouro: les détails d'ajout requis incluent si c'est pour une application que vous écrivez (c'est-à-dire que vous souhaitez incorporer ce suivi) ou pour surveiller l'utilisation d'applications arbitraires sur le même ordinateur (ou distant). Votre question est si vague qu'il est impossible de deviner ce que vous voulez exactement. – Argalatyr
+1 pour la question.Je suppose que OP demande une solution pour collecter des statistiques d'utilisation de l'interface utilisateur comme "quel bouton de menu est pressé combien de fois, sont-ils accessibles par des raccourcis ou en cliquant", etc .. Cela serait assez révélateur Ruban UI) –