判断指定的进程或程序是否存在方法小结判断指定的进程或程序是否存在方法小结(vc等等)
VC判断进程是否存在?比如我想知道记事本是否运行,要用到哪些函数等实例,需要的朋友可以参考下
一、判断指定程序名的进程是否存在一、判断指定程序名的进程是否存在
BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // pointer to callback function LPARAM lParam // application-
defined value);
The EnumWindows function enumerates all top-level windows on the screen by passing the handle to each window, in
turn, to an application-defined callback function. EnumWindows continues until the last top-level window is enumerated or
the callback function returns FALSE.
复制代码 代码如下:
BOOL CALLBACK IpEnumFunc(HWND hwnd,LPARAM lParam)
{
char wndName[100];
::GetWindowText(hwnd,wndName,sizeof(wndName));
if(wndName!="")
{
if(strcmp(wndName,name1)==0)
{
WndHnd=hwnd;
flag=1;
}
}
return 1;
}
二、判断指定进程名的进程是否存在二、判断指定进程名的进程是否存在
复制代码 代码如下:
DWORD GetProcessidFromName(LPCTSTR name)
{
PROCESSENTRY32 pe;
DWORD id=0;
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize=sizeof(PROCESSENTRY32);
if(!Process32First(hSnapshot,&pe))
return 0;
while(1)
{
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32Next(hSnapshot,&pe)==FALSE)
break;
if(strcmp(pe.szExeFile,name)==0)
{
id=pe.th32ProcessID;
break;
}
}
CloseHandle(hSnapshot);
return id;
}
如果返回值不为零,则存在,否则不存在。
三、三、VC判断程序调用的外部进程是否结束判断程序调用的外部进程是否结束
复制代码 代码如下:
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow=SW_HIDE;
si.dwFlags=STARTF_USESHOWWINDOW;
bool fRet=CreateProcess(NULL,str.GetBuffer(str.GetLength()),NULL,FALSE,NULL,NORMAL_PRIORITY_CLASS |
CREATE_NO_WINDOW,NULL,NULL,&si,&pi);
///判断
DWORD ExitCode;
评论0