有一个程序,运行时没有界面,只在系统托盘区有个图标。关闭这个程序时会弹出对话框询问是否关闭。怎样找出这个程序,把这个程序结束,结束时不跳出对话框?

解决方案 »

  1.   

    1.先获取该程序的进程句柄
    2。TerminateProcess()可以直接杀掉他
      

  2.   

    HANDLE         hProcessSnap = NULL; 
        BOOL           bRet      = FALSE; 
        PROCESSENTRY32 pe32      = {0}; 
        hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
        if (hProcessSnap == INVALID_HANDLE_VALUE) 
            return ; 
        pe32.dwSize = sizeof(PROCESSENTRY32); 
        if (Process32First(hProcessSnap, &pe32)) 
    {
    do{  //FileName是你想kill掉的名字
    if(strcmpi(pe32.szExeFile,FileName)==0)
    {     
    UINT uExitCode;
                               if(!TerminateProcess(hVlcPlay,uExitCode))
               AfxMessageBox("不能关闭该程序");
    CloseHandle(hProcessSnap);
        break;
    }
    }while (Process32Next(hProcessSnap,&pe32));
    CloseHandle(hProcessSnap);
    }
      

  3.   

    hVlcPlay是你的哪个程序的句柄!
      

  4.   

    look this progrom!:
     首先, 调用 CreateToolhelp32Snapshot() 获得当前运行进程的快照,这个函数返回包含正在运行进程的快照句柄。其原形是:HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,DWORD th32ProcessID);其中:
    dwFlags表示要包含在快照的内容为TH32CS_SNAPPROCESS表示在快照中包含进程列表;
    th32ProcessID是进程号,为0表示当前进程。
    返回值是一个句柄,如果没有进程正在运行,则返回INVALID_HANDLE_VALUE(可用GetLastError()获得),反之可用BOOL WINAPI Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);获取返回的进程
    如果Process32First返回TRUE,则第一个进程的信息已经在LPPROCESSENTRY32结构中,其余进程信息可用BOOL WINAPI Process32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe)获得
    LPPROCESSENTRY32结构的定义如下: typedef struct tagPROCESSENTRY32 { 
      DWORD dwSize; //此结构的大小
      DWORD cntUsage; //进程的引用数,如果为0,则次进程已停止
      DWORD th32ProcessID; //进程号
      ULONG_PTR th32DefaultHeapID; 
      DWORD th32ModuleID; //此进程引用的模块ID
      DWORD cntThreads; //此进程创建的线程数
      DWORD th32ParentProcessID; //父进程的ID
      LONG  pcPriClassBase; //这个进程创建的线程的基本优先权
      DWORD dwFlags; //保留
      TCHAR szExeFile[MAX_PATH]; 
    } PROCESSENTRY32; 
    typedef PROCESSENTRY32 *PPROCESSENTRY32;       
    最后不要忘了调用:  CloseHandle();      
    另用函数是: HANDLE OpenProcess(
      DWORD dwDesiredAccess,  // access flag
      BOOL bInheritHandle,    // handle inheritance option
      DWORD dwProcessId       // process identifier
    );     
    用它可打开一个进程,打开进程后,可用: BOOL TerminateProcess(
      HANDLE hProcess, // handle to the process
      UINT uExitCode   // exit code for the process
    );      
    来关闭进程。 
      

  5.   

    前面的函数调用是好的,
    到了OpenProcess里面
    HANDLE h = OpenProcess(0, FALSE, pe.th32ProcessID);
    返回0
    GetLastError说句柄无效