程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 不知道程序的窗口句柄時結束該程序的進程

不知道程序的窗口句柄時結束該程序的進程

編輯:關於C++

如果只要判斷EXE的名字(不需要判斷路徑),可以省略EnumProcess,因為pe32.szExeFile 裡就已經有EXE的名字了,因為沒有路徑,所以才又使用了函數EnumProcess來取得完整的路徑。這樣就簡潔一些了。

BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam)
{
   DWORD dwID;
   GetWindowThreadProcessId(hwnd, &dwID);
   if (dwID == (DWORD)lParam) {
     PostMessage(hwnd, WM_QUIT, 0, 0);
     return FALSE;
   }
   return TRUE;
}
void KillProgram(LPCSTR ExeName)
{
   char *File;
   HANDLE hProcessSnap;
   PROCESSENTRY32 pe32;
   if (!ExeName || !ExeName[0])
     return;
   File = strrchr(ExeName, '\\');
   if (File!=0) ExeName = File+1;
   hProcessSnap = CreateToolhelp32Snapshot(
     TH32CS_SNAPPROCESS, 0);
   if (hProcessSnap == (HANDLE)-1) return;
   memset(&pe32, 0, sizeof(pe32));
   pe32.dwSize = sizeof(PROCESSENTRY32);
   if (Process32First(hProcessSnap, &pe32))
   {
     do {
       memset(&me32, 0, sizeof(me32));
       me32.dwSize = sizeof(me32);
       File = strrchr(pe32.szExeFile, '\\');
       File = File? File+1 : pe32.szExeFile;
       if (strcmpi(File,ExeName)==0) {
         EnumWindows((WNDENUMPROC)EnumWinProc,
           pe32.th32ProcessID);
       }
     }
     while(Process32Next(hProcessSnap,&pe32));
   }
   CloseHandle(hProcessSnap);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved