随笔 - 505  文章 - 1034  trackbacks - 0
<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345


子曾经曰过:编程无他,唯手熟尔!

常用链接

留言簿(94)

随笔分类(649)

随笔档案(505)

相册

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

积分与排名

  • 积分 - 905232
  • 排名 - 14

最新随笔

最新评论

阅读排行榜

评论排行榜

FindWindow取得句柄
GetProcessThreadProcessId 取得进程id

用下面的函数取得进程路径(网上找的,还未测试)
  char   *GetProcPath(DWORD   ProcId)  
  {  
  
static   char   ProcPath[MAX_PATH],*pstr,id[2];  
  HANDLE   hProc;  
  DWORD   dw;  
  unsigned   
int   offset;  
  pstr
=ProcPath+1;  
  memset(ProcPath,
0,MAX_PATH);  
  ProcPath[
0]='   ';  
  hProc
=OpenProcess(PROCESS_VM_READ,0,ProcId);  
  
if(hProc==NULL)return   NULL;  
  ReadProcessMemory(hProc,(LPCVOID)
0xbffcade4,&offset,4,&dw);  
  ReadProcessMemory(hProc,(LPCVOID)offset,
&offset,4,&dw);  
  ReadProcessMemory(hProc,(LPCVOID)(offset
+0x40),&offset,4,&dw);  
  ReadProcessMemory(hProc,(LPCVOID)(offset
+8),&offset,4,&dw);  
  ReadProcessMemory(hProc,(LPCVOID)offset,pstr,MAX_PATH,
&dw);  
  
if(pstr[0]==0)  
    ReadProcessMemory(hProc,(LPCVOID)
0x620298,pstr,MAX_PATH,&dw);  
     
  CloseHandle(hProc);  
  
if(*pstr==0)return   NULL;  
  
if(*pstr!='\"')pstr--;  
  
return   pstr;  
  }   

本exe的路径
GetModuleFileName ?
GetCurrentDirectory ?
posted on 2008-01-27 02:54 七星重剑 阅读(772) 评论(3)  编辑 收藏 引用 所属分类: IDE -- visual c++

FeedBack:
# re: 判断同目录下的某个exe是否在执行 2008-01-27 21:48 代李
#include <Psapi.h>
CString GetProcessNameByID( DWORD processID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("");

// Get a handle to the process.

HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );

// Get the process name.

if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;

if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
//GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) );
GetModuleFileNameEx(hProcess,hMod,szProcessName,sizeof(szProcessName)/sizeof(TCHAR));
}
}

// Print the process name and identifier.
TRACE(TEXT("%s (PID: %u)\n"), szProcessName, processID );
_tprintf( TEXT("%s (PID: %u)\n"), szProcessName, processID );

CloseHandle( hProcess );
return CString(szProcessName);
}
//************************************
// Method: CheckProcessIsAlive
// FullName: CheckProcessIsAlive
// Access: public
// Returns: bool
// Qualifier: 检查对应路径的程序是否在进程列表中
// Parameter: CString filePath
//************************************
bool CheckProcessIsAlive(CString filePath)
{
//////////////////////////////////////////////////////////////////////////
/*
* 遍历所有进程 得到进程ID 通过ID 得到模块名字
*/

HANDLE Snapshot;
Snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//获得某一时刻系统的进程、堆(heap)、模块(module)或线程的快照信息
PROCESSENTRY32 processListStr;
processListStr.dwSize=sizeof(PROCESSENTRY32);
BOOL return_value;
return_value=Process32First(Snapshot,&processListStr);
//获得系统进程链表中第一个进程的信息
int i=0;//item index
while (return_value)
{
CString sFileName,sGetPath;
//sGetPath = getFilePath(processListStr.th32ProcessID);
sGetPath = GetProcessNameByID(processListStr.th32ProcessID);

sFileName = (sGetPath=="")? processListStr.szExeFile:sGetPath;


if (filePath.MakeLower() ==sFileName.MakeLower())
{

CloseHandle(Snapshot);
return true;
}
return_value=Process32Next(Snapshot,&processListStr);
//获得系统进程链表中下一个进程的信息
i++;
}
CloseHandle(Snapshot);
return false;
}
试试这个。。。  回复  更多评论
  
# re: 判断同目录下的某个exe是否在执行[未登录] 2008-01-28 18:15 汪江涛
这是要干什么用啊?如果当前进程和要判断的exe都是你写的,你可以用Mutex来做,简单高效。  回复  更多评论
  
# re: 判断同目录下的某个exe是否在执行 2008-01-30 09:56 七星重剑
@汪江涛
mutex不分目录啊
不同目录下的允许同时执行  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理