写程序的时候,有时候会调用别(别人写的)的程序的EXE。有的时候还会隐藏这个EXE。但是由于你的程序退出时并没有关闭这个EXE,只是隐藏了,所以在系统的进程查看窗口里面还是会看到的。这样当你下次再执行你自己的程序,还要调用这个程序的时候就会有问题了。原因是你一开始的那个程序没有关闭。
如下面的一段代码是实现的调用和隐藏Mid.exe的程序的。
以下是代码片段: CString strExe; strExe = sPath + "D://Mid.exe"; WinExec(strExe,SW_HIDE); HWND hWnd = ::FindWindow(NULL, "Mid"); if (hWnd) { ::ShowWindow(hWnd,SW_HIDE); } |
由于这个程序在一开始被隐藏了,所以没办法在可视的界面关闭。解决的方法就是在系统进程列表中找到它,并关闭这个进程。
程序实现如下:
以下是代码片段: DWORD ProcessID[50]; HANDLE SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); PROCESSENTRY32* info=new PROCESSENTRY32; PROCESSENTRY32 ProcessInfo; ProcessInfo.dwSize=sizeof(ProcessInfo); BOOL Status=Process32First(SnapShot,&ProcessInfo); int m_nProcess=0; while(Status) { CString s,str1,str2; s.Format("%d",ProcessInfo.cntThreads); str1.Format("%s",ProcessInfo.szExeFile); str1=ProcessInfo.szExeFile; ProcessID[m_nProcess]=ProcessInfo.th32ProcessID; if(str1=="Mid.exe") { HANDLE ProcessHandle; ProcessHandle=OpenProcess (PROCESS_ALL_ACCESS,FALSE,ProcessID[m_nProcess]); TerminateProcess(ProcessHandle,0); } Status=Process32Next(SnapShot,&ProcessInfo); m_nProcess++; } |
关键函数我就不解释了,请参考MSDN。
要注意的就是,要包括头文件:#include "TLHELP32.H"。