• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++统计软件使用时间代码示例

C++统计软件使用时间代码示例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++栈的使用,c++容器的使用,dev c++使用教程,vs2015c++使用教程,c++类的使用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com


#pragma once

#include <vector>

struct UseTime
{
    // 开始时间
    SYSTEMTIME startTime;

    // 结束时间
    SYSTEMTIME endTime;

    // 时间差
    SYSTEMTIME subTime;
};

struct UseSoftInfo
{
    // 软件名
    CString SoftName;

    // 软件启动时间;如果在打开我们的软件之前,待监测软件已存在,默认启动时间为我们软件打开的时间
    std::vector<UseTime> useTime;

    // 累计使用时间
    SYSTEMTIME allTime;

    // 使用次数
    unsigned int nCount;

    // 状态
    bool bStatus;
};

class SoftTime
{
public:

    // 软件使用时间
    std::vector<UseSoftInfo> m_SoftUseTime;

private:

    // 定时器处理函数
    static void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);

    // 提权
    BOOL EnableDebugPrivilege (BOOL fEnable);

    // 计算时间差
    SYSTEMTIME SubTime (SYSTEMTIME t1, SYSTEMTIME t2);

    // 计算累计时间
    SYSTEMTIME AddTime (SYSTEMTIME t1, SYSTEMTIME t2);

    // 判断是否为系统进程
    bool IsSystemProcess (LPCTSTR lpProName);

    // 初始化时间为0
    void InitTime (SYSTEMTIME& st);

public:
    SoftTime();
    ~SoftTime();

public:

    // 初始化进程信息
    void InitProcessName (void);
};
</div>

#include "stdafx.h"                    // 如果编译出错请删除此行
#include "UseSoftTime.h"

#include "TlHelp32.h"
#include "StrSafe.h"
#include "Psapi.h"
// 防止错误 error LNK2019
#pragma comment(lib, "psapi.lib")

// 全局变量
SoftTime * g_pSoftTime = NULL;

SoftTime::SoftTime()
{
    g_pSoftTime = this;   
}

SoftTime::~SoftTime()
{
    if (g_pSoftTime != NULL)
    {
        g_pSoftTime = NULL;
    }
}

void CALLBACK SoftTime::TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
{
    SoftTime * pSoftTimeInfo = (SoftTime*)g_pSoftTime;

    // 当前系统普通进程的进程名称
    std::vector<CString> currentProcessName;

    HANDLE hProcessSnap = NULL;
    HANDLE hProcessDll = NULL;
    BOOL bRet = FALSE;

    // 初始化dwSize为0,不然Process32First执行失败
    PROCESSENTRY32 pe32 = {0};
    MODULEENTRY32 me32;
    LPVOID lpMsgBuf;
    LPVOID lpDisplayBuf;
    DWORD dwError;

    LPCTSTR pszFormat = TEXT("开始服务时遇到错误! %s");

    if(!pSoftTimeInfo->EnableDebugPrivilege(1))
    {
        MessageBox(NULL, _T("提权失败!"), _T("提示"), MB_OK|MB_ICONEXCLAMATION);
    }

    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        dwError = GetLastError();
        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER|
            FORMAT_MESSAGE_FROM_SYSTEM|
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            dwError,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            LPTSTR(&lpMsgBuf),
            0,
            NULL);

        lpDisplayBuf = (LPVOID)LocalAlloc(
            LMEM_ZEROINIT,
            (lstrlen((LPCTSTR)lpMsgBuf)+lstrlen(pszFormat))*sizeof(TCHAR));

        // 格式化字符串
        StringCchPrintf(
            (LPTSTR)lpDisplayBuf,
            LocalSize(lpDisplayBuf),            // 字节数
            pszFormat,
            lpMsgBuf);

        CString strTemp;
        strTemp.Format(TEXT("错误编码为:%d"), dwError);
        ::MessageBox(NULL, (LPCTSTR)lpDisplayBuf, strTemp, MB_OK|MB_ICONEXCLAMATION);
        // 清理分配的内存
        LocalFree(lpMsgBuf);
        LocalFree(lpDisplayBuf);

        return;
    }

    pe32.dwSize = sizeof(PROCESSENTRY32);
    Module32First(hProcessSnap, &me32);

    if (Process32First(hProcessSnap, &pe32))
    {
        do
        {    
            WCHAR path[MAX_PATH]={0};

            HMODULE hModule;
            HANDLE hProcess;
            DWORD needed;
            hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, pe32.th32ProcessID);
            if (hProcess)
            {
                // 枚举进程
            

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++使用递归函数和栈操作逆序一个栈的算法示例
  • C++使用一个栈实现另一个栈的排序算法示例
  • C++ 数据结构实现两个栈实现一个队列
  • C++利用链栈实现表达式求值
  • C++基于栈实现铁轨问题
  • C++统计软件使用时间代码示例
  • C++中栈结构建立与操作详细解析
  • 用C++实现一个链式栈的实例代码

相关文章

  • 2017-05-28c语言操作文本的基本使用方法
  • 2017-05-28使用C语言详解霍夫曼树数据结构
  • 2017-05-28计时器的time_t和clock_t 的两种实现方法(推荐)
  • 2017-05-28C++实现闹钟程序的方法
  • 2017-05-28opencv 做人脸识别 opencv 人脸匹配分析
  • 2017-05-28C++之Boost::array用法简介
  • 2017-05-28C语言实现的统计素数并求和代码分享
  • 2017-05-28VC++中的字体设置方法详解
  • 2017-05-28深入浅析C语言中堆栈和队列
  • 2017-05-28c语言:基于函数指针的两个示例分析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 探讨C语言的那些小秘密之断言
    • C语言 数据结构之连续存储数组的算法
    • C语言 用指针作为函数返回值详解
    • C语言中的数组和指针汇编代码分析实例
    • C++实现查找中位数的O(N)算法和Kmin算法
    • C语言拓展实现Lua sleep函数
    • C语言中的正负数及其输出
    • C/C++ 多线程的学习心得总结
    • 基于C程序启动代码的深入分析
    • c语言中 基于随机函数的使用详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有