2009-07-12 13 views
5

Czy jest jakieś narzędzie, które może to zrobić? Podobnie jak strona internetowa i z tych samych podstawowych powodów?Czy istnieje narzędzie do zbierania statystyk użycia aplikacji Win32?

UPDATE statystyki --- mam na myśli zbieranie informacji o aplikacji, która piszę Muszę wiedzieć, jakie opcje są używane najczęściej, gdy czasy itp

+3

Czy możesz wyjaśnić swoje pytanie? Czego szukasz? Co masz na myśli mówiąc "użycie"? –

+1

@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

+2

+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) –

Odpowiedz

3

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.

Powiązane problemy