WEB开发网
开发学院软件开发C++ 不知道程序的窗口句柄时结束该程序的进程 阅读

不知道程序的窗口句柄时结束该程序的进程

 2008-03-08 12:42:20 来源:WEB开发网   
核心提示:假如只要判定EXE的名字(不需要判定路径),可以省略EnumPRocess,不知道程序的窗口句柄时结束该程序的进程,因为pe32.szExeFile 里就已经有EXE的名字了,因为没有路径,所以才又使用了函数EnumProcess来取得完整的路径,这样就简洁一些了

  假如只要判定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_QU99v, 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);
}


Tags:知道 程序 窗口

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接