[:(][:(]进程优先级设置问题有代码-请弄过的帮忙下看下,耽误不了你多少时间--在线等 ( 积分: 10 )

  • 主题发起人 主题发起人 onyliu
  • 开始时间 开始时间
O

onyliu

Unregistered / Unconfirmed
GUEST, unregistred user!
函数:<br>function&nbsp;TForm1.SetPriority(ExeFileName:&nbsp;string;Flag&nbsp;:&nbsp;Integer):&nbsp;boolean;<br>const&nbsp;<br>PROCESS_TERMINATE&nbsp;=&nbsp;$0001;<br>var<br>ContinueLoop:&nbsp;BOOLean;<br>FSnapshotHandle:&nbsp;THandle;<br>FProcessEntry32:&nbsp;TProcessEntry32;<br>begin<br>Result&nbsp;:=&nbsp;True;<br>FSnapshotHandle&nbsp;:=&nbsp;CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,&nbsp;0);<br>FProcessEntry32.dwSize&nbsp;:=&nbsp;SizeOf(FProcessEntry32);<br>ContinueLoop&nbsp;:=&nbsp;Process32First(FSnapshotHandle,&nbsp;FProcessEntry32);<br><br>while&nbsp;Integer(ContinueLoop)&nbsp;&lt;&gt;&nbsp;0&nbsp;do<br>begin<br>if&nbsp;((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))&nbsp;=UpperCase(ExeFileName))&nbsp;or&nbsp;(UpperCase(FProcessEntry32.szExeFile)&nbsp;=UpperCase(ExeFileName)))&nbsp;then<br>begin<br>&nbsp;&nbsp;case&nbsp;Flag&nbsp;of<br>&nbsp;&nbsp;&nbsp;&nbsp;0:Result&nbsp;:=SetPriorityClass(FSnapshotHandle,REALTIME_PRIORITY_CLASS);&nbsp;//实时<br>&nbsp;&nbsp;&nbsp;&nbsp;1:Result&nbsp;:=SetPriorityClass(FSnapshotHandle,HIGH_PRIORITY_CLASS);&nbsp;//高<br>&nbsp;&nbsp;&nbsp;&nbsp;//2:Setpriorityclass(FSnapshotHandle,ABOVE_NORMAL_PRIORITY_CLASS);&nbsp;//高与正常<br>&nbsp;&nbsp;&nbsp;&nbsp;3:Result&nbsp;:=SetPriorityClass(FSnapshotHandle,NORMAL_PRIORITY_CLASS);&nbsp;//正常<br>&nbsp;&nbsp;&nbsp;&nbsp;//4:Setpriorityclass(FSnapshotHandle,BELOW_NORMAL_PRIORITY_CLASS);&nbsp;//低于正常<br>&nbsp;&nbsp;&nbsp;&nbsp;5:Result&nbsp;:=SetPriorityClass(FSnapshotHandle,IDLE_PRIORITY_CLASS);&nbsp;//空闲<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;ShowMessage(BoolToStr(Result));<br>&nbsp;&nbsp;ShowMessage(IntToStr(GetLastError));<br>end;<br>ContinueLoop&nbsp;:=&nbsp;Process32Next(FSnapshotHandle,&nbsp;FProcessEntry32);<br><br>end;<br>CloseHandle(FSnapshotHandle);<br>end;<br><br><br>调用&nbsp;SetPriority('delphi32.exe',1);&nbsp;&nbsp;&nbsp;返回0不知道为什么不成功。。。郁闷
 
先AdjustTokenPrivileges提升程序权限,再windows.OpenProcess()&nbsp;然后设置SetPriorityClass&nbsp;才行<br><br>http://www.delphibbs.com/keylife/iblog_show.asp?xid=11958
 
把你的程序发给我,给改好给你!我的那个ProAssist有进程,线程的优先级设置方法。<br>贴子上我都说了,先AdjustTokenPrivileges提升进程权限,再windows.OpenProcess()&nbsp;然后设置SetPriorityClass&nbsp;才行<br>你还掉了一步&nbsp;Windows.OpenProcess()<br>Windows.OpenProcess(Windows.PROCESS_SET_INFORMATION,&nbsp;False,&nbsp;PID)&nbsp;//这个PID就是你&nbsp;FProcessEntry32.th32ProcessID<br>另外你下面的几外参数传递错误,不是传FSnapshotHandle,&nbsp;是传OpenProcess的返回结果,就是打开进程的句柄。<br>打开后别忘关闭CloseHandle(OpenProcess的返回句柄,不然是非常耗资源的,特别是在线程中使用Open&nbsp;一个句柄的情况下。<br><br>OK,应该没有问题了,但你的提升进程权限的参数好像不对,在网找找,挺多的。<br><br>如有问题,请加我MSN:&nbsp;jfyes@hotmail.com&nbsp;或QQ:348677065<br><br><br><br><br><br>========================================================<br>-----&nbsp;Original&nbsp;Message&nbsp;-----&nbsp;<br>From:&nbsp;&quot;onyliu&quot;&nbsp;&lt;onyliu@126.com&gt;<br>To:&nbsp;&quot;jf_yes&quot;&nbsp;&lt;jf_yes@126.com&gt;<br>Sent:&nbsp;Thursday,&nbsp;February&nbsp;08,&nbsp;2007&nbsp;1:41&nbsp;PM<br>Subject:&nbsp;进程权限问题<br><br><br>&gt;&nbsp;获取关机权限没问题&nbsp;如下:<br>&gt;&nbsp;<br>&gt;&nbsp;procedure&nbsp;ExitWindow;<br>&gt;&nbsp;var<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;st&nbsp;:&nbsp;SYSTEMTIME;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hToken&nbsp;:&nbsp;THANDLE;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tkp&nbsp;:&nbsp;TOKEN_PRIVILEGES;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rr&nbsp;:&nbsp;Dword;<br>&gt;&nbsp;begin<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES&nbsp;or&nbsp;TOKEN_QUERY,hToken);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设定权限为1<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tkp.PrivilegeCount&nbsp;:=&nbsp;1;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tkp.Privileges[0].Attributes&nbsp;:=&nbsp;SE_PRIVILEGE_ENABLED;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;得到权限<br><br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AdjustTokenPrivileges(hToken,&nbsp;FALSE,&nbsp;tkp,&nbsp;0,nil,rr);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;重起计算机<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExitWindowsEx(EWX_LOGOFF,&nbsp;0)<br>&gt;&nbsp;end;<br>&gt;&nbsp;<br>&gt;&nbsp;<br>&gt;&nbsp;但是获取进程权限就是不成功啊&nbsp;帮我看看啊&nbsp;(这个函数的功能就是给进程名和进程优先级&nbsp;后调整优先级)<br>&gt;&nbsp;function&nbsp;TForm1.SetPriority(ExeFileName:&nbsp;string;Flag&nbsp;:&nbsp;Integer):&nbsp;boolean;<br>&gt;&nbsp;var<br>&gt;&nbsp;&nbsp;ContinueLoop:&nbsp;BOOLean;<br>&gt;&nbsp;&nbsp;FSnapshotHandle:&nbsp;THandle;<br>&gt;&nbsp;&nbsp;FProcessEntry32:&nbsp;TProcessEntry32;<br>&gt;&nbsp;&nbsp;tkp&nbsp;:&nbsp;TOKEN_PRIVILEGES;<br>&gt;&nbsp;&nbsp;rr&nbsp;:&nbsp;Dword;<br>&gt;&nbsp;begin<br>&gt;&nbsp;&nbsp;Result&nbsp;:=&nbsp;True;<br>&gt;&nbsp;&nbsp;FSnapshotHandle&nbsp;:=&nbsp;CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,&nbsp;0);<br>&gt;&nbsp;&nbsp;FProcessEntry32.dwSize&nbsp;:=&nbsp;SizeOf(FProcessEntry32);<br>&gt;&nbsp;&nbsp;ContinueLoop&nbsp;:=&nbsp;Process32First(FSnapshotHandle,&nbsp;FProcessEntry32);<br>&gt;&nbsp;<br>&gt;&nbsp;&nbsp;while&nbsp;Integer(ContinueLoop)&nbsp;&lt;&gt;&nbsp;0&nbsp;do<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))&nbsp;=UpperCase(ExeFileName))&nbsp;or&nbsp;(UpperCase(FProcessEntry32.szExeFile)&nbsp;=UpperCase(ExeFileName)))&nbsp;then<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES&nbsp;or&nbsp;TOKEN_QUERY,FSnapshotHandle);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LookupPrivilegeValue(nil,'SeDebugprovilege',tkp.Privileges[0].Luid);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;设定权限为1<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tkp.PrivilegeCount&nbsp;:=&nbsp;1;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tkp.Privileges[0].Attributes&nbsp;:=&nbsp;SE_PRIVILEGE_ENABLED;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;得到权限<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AdjustTokenPrivileges(FSnapshotHandle,&nbsp;FALSE,&nbsp;tkp,&nbsp;0,nil,rr);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Flag&nbsp;of<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:Result&nbsp;:=SetPriorityClass(FSnapshotHandle,REALTIME_PRIORITY_CLASS);&nbsp;//实时<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1:Result&nbsp;:=SetPriorityClass(FSnapshotHandle,HIGH_PRIORITY_CLASS);&nbsp;//高<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2:Result&nbsp;:=SetPriorityClass(FSnapshotHandle,NORMAL_PRIORITY_CLASS);&nbsp;//正常<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3:Result&nbsp;:=SetPriorityClass(FSnapshotHandle,IDLE_PRIORITY_CLASS);&nbsp;//空闲<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;ContinueLoop&nbsp;:=&nbsp;Process32Next(FSnapshotHandle,&nbsp;FProcessEntry32);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&gt;&nbsp;&nbsp;CloseHandle(FSnapshotHandle);<br>&gt;&nbsp;end;
 
后退
顶部