有进程ID,怎么取到相应的可执行文件名呢? 用winapi哪个函数GetFileName(unsigned long processID) ??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://community.csdn.net/Expert/topic/3160/3160433.xml?temp=.5719263 HWND hwnd = GetForegroundWindow()得到当前前台窗口句柄GetWindowThreadProcessID(&dwProcessID) ;得到窗口所属的进行IDHANDLE hProcess = OpenProcess(...) ;打开进程句柄TCHAR szFileName[MAX_PATH] = {NULL} ;GetModuleFileNameEx(hProcess,NULL,szFileName,MAX_PATH) ;得到窗口所在的应用程序文件名CloseHandle(hProcess) ; to windyloft(好好吃饭) 楼上的方法,我试过,取不到 hProSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, *(lpPID+iCount)); if (!hProSnap){MessageBox("Create snap failed","");return;}lpme32.dwSize = sizeof(MODULEENTRY32);if (Module32First(hProSnap, &lpme32)){ while(Module32Next(hProSnap, &lpme32)) { strcpy(szProcessName, lpme32.szModule); strcpy(szPath, lpme32.szExePath); cout<<lpme32.th32ProcessID<<": "<<szProcessName<<" -> "<<szPath<<endl; };这个可以得到进程所有模块(DLL+EXE)的列表,列表里的第一项就是EXE的名字了,细节问题自己看着办吧,呵呵 你给我的代码中没有传递要找的文件名呀,如abc.exe呀,急! 枚举所有的映像名,没问题,测试过....BOOL GetImageName(char* szImageName){ BOOL bResult; DWORD dwTotal; HANDLE hProcessSnap; PROCESSENTRY32 ProcessEntry32; dwTotal = 0; bResult = TRUE; hProcessSnap = NULL; DebugPrivilege(TRUE); hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(hProcessSnap == INVALID_HANDLE_VALUE) { printf("CreateToolhelp32Snapshot for Process Error: %d\n",GetLastError()); bResult = FALSE; } ProcessEntry32.dwSize = sizeof(PROCESSENTRY32); if(Process32First(hProcessSnap,&ProcessEntry32)) { do { if(ProcessEntry32.th32ProcessID == 0) { continue; } else { strcpy(szImageName, ProcessEntry32.szExeFile); /***get the image name of process*/ } } while(Process32Next(hProcessSnap,&ProcessEntry32)); } else { sprintf(szTempBuf, "ProcessEntry32First Error: %d",GetLastError()); AfxMessageBox(szTempBuf); bResult = FALSE; } CloseHandle(hProcessSnap); DebugPrivilege(FALSE); return bResult;}BOOL DebugPrivilege(BOOL bEnable){ BOOL bResult = TRUE; HANDLE hToken; TOKEN_PRIVILEGES TokenPrivileges; if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hToken) == 0) { printf("OpenProcessToken Error: %d\n",GetLastError()); bResult = FALSE; } TokenPrivileges.PrivilegeCount = 1; TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0; LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&TokenPrivileges.Privileges[0].Luid); AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL); if(GetLastError() != ERROR_SUCCESS) { bResult = FALSE; } CloseHandle(hToken); return bResult;} 套接字send函数设置几秒超时最好(高手讨论下哈)? 为什么从CButton继承来的按钮用SetFont不起作用 MSN 混色(大侠们进来看看)~~~~~~~~~~~~~~~~ 关于用directshow开发的一个视频帧捕获问题 各位大虾请问,在VC中对于一个编译成功且已经生成exe文件,在源代码中调出它的各个控件如何重新改变他的功能! 请问怎样重载filedialog的onok函数 请指教:支集,紧支集,稠密,正则 请教简单问题!高分请教! 菜单的动态搜索的实现 如何提高vc编程水平,请各位各抒己见。 如何获得操作系统所在得磁盘号? 请问VC6中不同文件中静态变量的初始化顺序
GetWindowThreadProcessID(&dwProcessID) ;得到窗口所属的进行ID
HANDLE hProcess = OpenProcess(...) ;打开进程句柄
TCHAR szFileName[MAX_PATH] = {NULL} ;
GetModuleFileNameEx(hProcess,NULL,szFileName,MAX_PATH) ;得到窗口所在的应用程序文件名
CloseHandle(hProcess) ;
if (!hProSnap)
{
MessageBox("Create snap failed","");
return;
}lpme32.dwSize = sizeof(MODULEENTRY32);if (Module32First(hProSnap, &lpme32))
{
while(Module32Next(hProSnap, &lpme32))
{
strcpy(szProcessName, lpme32.szModule);
strcpy(szPath, lpme32.szExePath);
cout<<lpme32.th32ProcessID<<": "<<szProcessName<<" -> "<<szPath<<endl; };这个可以得到进程所有模块(DLL+EXE)的列表,列表里的第一项就是EXE的名字了,细节问题自己看着办吧,呵呵
BOOL GetImageName(char* szImageName)
{
BOOL bResult;
DWORD dwTotal;
HANDLE hProcessSnap;
PROCESSENTRY32 ProcessEntry32;
dwTotal = 0;
bResult = TRUE;
hProcessSnap = NULL; DebugPrivilege(TRUE);
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
printf("CreateToolhelp32Snapshot for Process Error: %d\n",GetLastError());
bResult = FALSE;
} ProcessEntry32.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap,&ProcessEntry32))
{
do
{
if(ProcessEntry32.th32ProcessID == 0)
{
continue;
}
else
{
strcpy(szImageName, ProcessEntry32.szExeFile); /***get the image name of process*/
}
}
while(Process32Next(hProcessSnap,&ProcessEntry32));
}
else
{
sprintf(szTempBuf, "ProcessEntry32First Error: %d",GetLastError());
AfxMessageBox(szTempBuf);
bResult = FALSE;
}
CloseHandle(hProcessSnap);
DebugPrivilege(FALSE);
return bResult;
}BOOL DebugPrivilege(BOOL bEnable)
{
BOOL bResult = TRUE;
HANDLE hToken;
TOKEN_PRIVILEGES TokenPrivileges;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hToken) == 0)
{
printf("OpenProcessToken Error: %d\n",GetLastError());
bResult = FALSE;
}
TokenPrivileges.PrivilegeCount = 1;
TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&TokenPrivileges.Privileges[0].Luid);
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
if(GetLastError() != ERROR_SUCCESS)
{
bResult = FALSE;
}
CloseHandle(hToken);
return bResult;
}