Статистика использования С++

Я сделал приложение на C++ и хотел бы знать, как реализовать систему статистики использования, чтобы я мог собирать некоторые данные о том, как пользователи используют программу.

Например. IP-адрес, количество часов, проведенных в приложении, и используемая ОС.

Теоретически я знаю, что могу закодировать это сам, если нужно, но мне было интересно, есть ли доступная структура, чтобы упростить это. К сожалению, в гугле ничего не нашел.


person JosephG    schedule 15.06.2012    source источник
comment
Какое приложение? Запросы ОС могут варьироваться от тривиальных до умеренно сложных.   -  person moshbear    schedule 15.06.2012
comment
В этом случае обязательно спросите пользователя, согласен ли он на отправку собранных данных. Я знаю, что перестану использовать любое программное обеспечение, которое отправляет данные о моем компьютере без моего согласия.   -  person ereOn    schedule 15.06.2012
comment
+1 к ereOn и добавление: сбор без разрешения почти наверняка незаконен в некоторых юрисдикциях.   -  person paxdiablo    schedule 15.06.2012
comment
@ereOn Спасибо за указание, я, скорее всего, упомяну об этом в Условиях и соглашениях, и в дополнение к этому я сделаю так, чтобы пользователь мог снять отметку во время установки, если он не хочет, чтобы о нем собирались какие-либо данные.   -  person JosephG    schedule 15.06.2012
comment
*скорее всего добавит его в условия и соглашения, а также в политику конфиденциальности. И теперь, когда я немного подумал, я заставлю пользователя установить флажок, указывающий, что он хочет отправлять статистику использования, вместо того, чтобы снимать флажок, если он не хочет отправлять статистику.   -  person JosephG    schedule 04.01.2013


Ответы (3)


Хотя такого фреймворка не существует, вы можете уменьшить объем работы, которую вам нужно выполнить (чтобы получить всю эту информацию), используя некоторые подходы и методы, которые я попытался описать ниже. Пожалуйста, кто-нибудь, не стесняйтесь меня поправлять.

Подытожим, какие группы информации нам потребуются для выполнения задачи:

  • Информация о пользовательской среде. Я предлагаю вам взглянуть на инфраструктуру Microsoft WMI, в частности на классы WMI: Рабочий стол, Файловая система, Сеть и т. д. Использование этих классов в приложении может помочь вам получить почти все виды системной информации. Но если вас это не устраивает, см. #2.
  • Производительность приложений и системы. Под этими терминами я подразумеваю общую производительность системы, количество процессоров, запущенные в ОС процессы и т. д. Чтобы получить эти данные, вы можете использовать NtQuerySystemInformation. С его помощью вы получите доступ к подробной информации SystemProcessInformation, SystemProcessorPerformanceInformation (получает информацию о каждом процессоре) и многому другому.
  • User Related Information. It's hard to find a framework to do such things, so I suggest you simply start writing code, having in mind your requirements:
    • counting how many times each button was pressed, each text field was changes, etc.
    • измерение времени задержки между последовательными действиями в некоторых предопределенных последовательностях (например, если у вас есть форма с графическим интерфейсом настроек, и вы ожидаете, что пользователь очень быстро заполнит все необходимые текстовые поля, поэтому использование измерений задержки может дать вам информацию, если пользователь действовал так, как мы от него ожидали, или задержался после TextBox2 на 5 минут).
    • все, что может быть вам интересно.

Итак, как вы могли бы реализовать требования последнего пункта (Информация, связанная с пользователем)? Что касается меня, я бы сделал что-то вроде следующего (некоторые могут показаться очень сложными для реализации или слишком бессмысленными): - создать своего рода базовый класс Counter и вывести из него некоторые элементы управления (кнопки, правки и т.д.). - использование крючков Windows для мыши или клавиатуры при получении дочернего дескриптора (например, для распознавания элемента управления). - использование класса Callback, который может делать всю "грязную" работу (счет, измерение, выполнение дополнительных действий).

Вы можете хранить всю эту информацию либо в текстовом файле, либо в базе данных SQLite, либо там, где вы предпочитаете.

person gahcep    schedule 15.06.2012

Я бы рекомендовал взглянуть на DeskMetrics. Этот сообщение StackOverflow кратко описывает проблему.

person George Dean    schedule 21.06.2012

Создание собственного фреймворка может занять месяцы разработки (помимо обслуживания). С помощью чего-то вроде Trackerbird Software Analytics вы можете интегрировать DLL в свое приложение и начать отслеживать 30 минут и вы получите все крутые визуализации в реальном времени.

Отказ от ответственности: я связан с компанией.

person Dive50    schedule 24.07.2013