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

  • 相关阅读:
    PAT (Advanced Level) 1086. Tree Traversals Again (25)
    PAT (Advanced Level) 1085. Perfect Sequence (25)
    PAT (Advanced Level) 1084. Broken Keyboard (20)
    PAT (Advanced Level) 1083. List Grades (25)
    PAT (Advanced Level) 1082. Read Number in Chinese (25)
    HDU 4513 吉哥系列故事――完美队形II
    POJ Oulipo KMP 模板题
    POJ 3376 Finding Palindromes
    扩展KMP
    HDU 2289 Cup
  • 原文地址:https://www.cnblogs.com/Dincat/p/13473287.html
Copyright © 2011-2022 走看看