我想在基于对话框程序的OnInitDialog处设置进程的优先级,利用OpenProcess和SetPriorityClass两个函数。但我按下面这样做却分别提示错误代码87和6,如下:  
 
BOOL  CNewDlg::OnInitDialog()  
{  
   ...  
   PROCESSENTRY32   pe   =   {   sizeof(pe)   };   
   HANDLE   s   =   CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,   0);   
   BOOL   b =   Process32First(s,   &pe); 
   HANDLE processHandle;   processHandle=OpenProcess(PROCESS_ALL_ACCESS,false,pe.th32ProcessID);
   if(processHandle==0)
   {
DWORD errCord=GetLastError();
CString strErrCord;
strErrCord.Format("%d",errCord);
MessageBox("打开进程失败,出错代码"+strErrCord);
//出错代码87  :The  parameter  is  incorrect.  ERROR_INVALID_PARAMETER 
   };
   if(SetPriorityClass(processHandle,HIGH_PRIORITY_CLASS)==0)
   {
DWORD errCord=GetLastError();
CString strErrCord;
strErrCord.Format("%d",errCord);
MessageBox("进程优先级设置失败,出错代码"+strErrCord);
//出错代码6:The  handle  is  invalid.  ERROR_INVALID_HANDLE  
   }    
   ...  
}  
唉,累,获取个进程的句柄这么麻烦,而且编译运行还得不到句柄。请问该怎么修改呢?谢谢!

解决方案 »

  1.   

    pe.th32ProcessID 是谁啊?随便一个进程你都OPEN啊?
      

  2.   

    http://vegeta.blog.enorth.com.cn/article/875.shtml
    http://vegeta.blog.enorth.com.cn/article/879.shtml

    http://zhaomeng-blog.blog.sohu.com/45298562.html
    http://zhaomeng-blog.blog.sohu.com/45298989.html
    参考.
      

  3.   

    BOOL   b =   Process32First(s,   &pe); 
    =============================
    你想要的是什么?这个API得到不一定是本进程的信息
      

  4.   

    你可以用GetCurrentProcessId(NULL)来获取本进程的ID,然后用OpenProcess来完成工作。
      

  5.   

    //自定义函数:赋予指定特权。这里用来提升程序权限。 
    BOOL EnablePrivilege(HANDLE hToken,LPCSTR szPrivName)
    {TOKEN_PRIVILEGES tkp;LookupPrivilegeValue( NULL,szPrivName,&tkp.Privileges[0].Luid );//修改进程权限
    tkp.PrivilegeCount=1;
    tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges( hToken,FALSE,&tkp,sizeof tkp,NULL,NULL );//通知系统修改进程权限return( (GetLastError()==ERROR_SUCCESS) );}
    HANDLE hToken;OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);
    EnablePrivilege(hToken,SE_DEBUG_NAME);