从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