He hecho algo así en el pasado.
Hay dos maneras en que puedo pensar para hacer esto.
Con acciones:
Al utilizar las acciones que es muy fácil de seguir el uso de la interfaz de usuario mediante la colocación de código en el controlador TActionList.OnExecute. Este evento se dispara antes de que se ejecute la acción individual, lo que le permite rastrear lo que sucedió y cuándo.
Por ejemplo:
procedure TForm1.ActionList1Execute(Action: TBasicAction; var Handled: Boolean);
begin
WriteToLog(TAction(TBasicAction).Caption);
end;
Sin acciones:
Si no está utilizando acciones se vuelve un poco más difícil, pero no imposible. Usted crea tiene que crear una nueva unidad con un descendiente TMenuItem con su código de registro. Asegúrese de colocar su nueva unidad después de la unidad MENU en la cláusula uses en cada unidad que la use. El nuevo descendiente debe llamarse TMenuItem para que esto funcione. Desde su reintroducción esencialmente la misma clase pero con funcionalidad extendida.
Aquí hay una unidad rápida que lancé mostrando un ejemplo muy 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.
Para utilizar la unidad por encima de su lugar como la última unidad de la cláusula uses de cualquier forma/módulo de datos con menús (TMainMenu o TPopupMenu) que desea rastrear. Si no desea rastrear una unidad en particular, no la incluya.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActnList, Menus, MenuItemLogger;
Estos dos métodos son simples y, aunque funcionan, probablemente no sean las mejores soluciones.
¿Puede aclarar su pregunta? ¿Qué estás buscando? ¿Qué quieres decir con "uso"? –
@Jlouro: los detalles adicionales que se necesitan incluyen si esto es para una aplicación que está escribiendo (es decir, si desea incorporar este seguimiento) o para monitorear el uso de aplicaciones arbitrarias en la misma (¿o una remota?) Computadora. Su pregunta es tan vaga que es imposible adivinar exactamente lo que quiere. – Argalatyr
+1 para la pregunta.Supongo que OP está preguntando acerca de una solución que recolecta estadísticas de uso de UI como "qué botón de menú presionó cuántas veces, se accede por accesos directos o haciendo clic en", etc. De hecho sería bastante revelador (es decir, MS usó tales estadísticas mientras desarrollaba IU de la cinta) –