我想在基于对话框程序的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
}
...
}
唉,累,获取个进程的句柄这么麻烦,而且编译运行还得不到句柄。请问该怎么修改呢?谢谢!
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
}
...
}
唉,累,获取个进程的句柄这么麻烦,而且编译运行还得不到句柄。请问该怎么修改呢?谢谢!
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
参考.
=============================
你想要的是什么?这个API得到不一定是本进程的信息
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);