zoukankan      html  css  js  c++  java
  • 从CWnd*的EXE名称

    介绍 最近,我们公司决定生产时间管理应用程序。这是不够的我们只知道当人们以亡,我们想知道他们做了什么,他们在那里。我们决定将产生一个计时应用程序,它将使我们能够跟踪用户做什么,同时登录。起初,我们以为我们会每秒钟记录活动窗口的标题。这为我们提供了更多的信息比我们想知道以及这繁琐的报告数据。然后,我们决定最好记录就可执行文件的名称。我环顾四周,我以前看到过一篇关于如何做到这一点,但它不是为了运行一次。所以我写了这个函数允许您轻松CWnd *转换成EXE名称。 使用的代码 要使用的代码很简单。传递函数GetWindowModuleName CWnd *,它返回可执行文件的名称。隐藏,收缩,复制Code

    #include "Psapi.h"
    
    CString GetWindowModuleName(CWnd *pWnd)
    {
        HMODULE* lphModule;
        char FileName[1024];
        DWORD procid = 0;
        DWORD modulesize = 0;
        BOOL bInheritHandle = false;
    
        if(pWnd != NULL){
            GetWindowThreadProcessId(pWnd->m_hWnd,&procid);
            HANDLE process = OpenProcess(PROCESS_ALL_ACCESS | 
               PROCESS_QUERY_INFORMATION, bInheritHandle,procid);
            if(process != NULL){
                lphModule = new HMODULE[1];
                if(EnumProcessModules(process,lphModule, 
                          (sizeof(HMODULE)),&modulesize) != 0){
                    GetModuleBaseName(process,lphModule[0],FileName,1024);
                    CloseHandle(process);
                    delete lphModule;
                    return FileName;
                }
                delete lphModule;
            }
            CloseHandle(process);
        }
        return "";
    }

    它是如何工作的呢? 函数首先调用GetWindowThreadProcessId当前进程ID。从那时起,我们打开过程和枚举过程模块。技巧在于发送HMODULE EnumProcessModules函数数组的长度。这只会把第一个模块流程的可执行文件。不要忘记包括“Psapi。h”或Psapi.Lib链接。 本文转载于:http://www.diyabc.com/frontweb/news10914.html

  • 相关阅读:
    redis 1 简单介绍和存储的数据结构
    mysql 14 覆盖索引+回表
    mysql 13 B+tree中存储数据的格式 页
    java Arrays.asList() 数组转集合
    java 迭代器
    mysql 12 SQL优化策略
    mysql 11 执行计划
    mysql 10 索引面试题分享
    搭建一个开源项目2-打造另一个环境以及解决上期问题
    搭建一个开源项目1-如何搭建Linux虚拟机
  • 原文地址:https://www.cnblogs.com/Dincat/p/13473287.html
Copyright © 2011-2022 走看看