Delphi 具有优先级参数的CreateProcess?

Delphi 具有优先级参数的CreateProcess?,delphi,delphi-xe,Delphi,Delphi Xe,如何从程序中创建和运行进程,并设置进程的优先级 这就是我到目前为止所做的: const LOW_PRIORITY = IDLE_PRIORITY_CLASS; //BELOW_NORMAL_PRIORITY = ??? NORMAL_PRIORITY = NORMAL_PRIORITY_CLASS; //ABOVE_NORMAL_PRIROTY = ??? HIGH_PRIORITY = HIGH_PRIORITY_

如何从程序中创建和运行进程,并设置进程的优先级

这就是我到目前为止所做的:

const
  LOW_PRIORITY            = IDLE_PRIORITY_CLASS;
  //BELOW_NORMAL_PRIORITY = ???
  NORMAL_PRIORITY         = NORMAL_PRIORITY_CLASS;
  //ABOVE_NORMAL_PRIROTY  = ???
  HIGH_PRIORITY           = HIGH_PRIORITY_CLASS;
  REALTIME_PRIORITY       = REALTIME_PRIORITY_CLASS;

procedure RunProcess(FileName: string; Priority: Integer);
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  Done: Boolean;
begin
  FillChar(StartInfo,SizeOf(TStartupInfo),#0);
  FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
  StartInfo.cb := SizeOf(TStartupInfo);
  try
    Done := CreateProcess(nil, PChar(FileName), nil, nil,False,
                          CREATE_NEW_PROCESS_GROUP + Priority,
                          nil, nil, StartInfo, ProcInfo);
    if not Done then
      MessageDlg('Could not run ' + FileName, mtError, [mbOk], 0);
  finally
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;
end;
上述代码的工作原理是,我可以设置已执行进程的优先级。但请参见下面的Windows任务管理器图像:

您可以设置更多选项,例如低于正常值和高于正常值,这也是我希望能够设置的。通过Windows.pas查看,我看不到这样的价值

如何使用这些额外参数创建和运行流程

谢谢:)


Delphi附带的Windows.pas中未声明这两个标志。您必须自己声明这些值。这些值可在的MSDN文档中找到


另请记住,它修改了它的第二个参数,
lpCommandLine
,即您传递给它的参数
PChar(FileName)
。因此,如果调用传递位于只读内存中的字符串文本的函数,代码将失败。我将添加以下行

UniqueString(FileName);

在调用CreateProcess之前。更多信息可以在这里找到:

尽管我找到了答案。典型的情况是,我试了很久才找到答案,一问我就找到了答案!将编辑我的问题以反映更改。无论如何,我无法编辑。我在你的答案中添加了一条评论,它显示了我找到答案的链接。我在谷歌搜索后从这里发现了这一点:为什么Windows.pas中不包含这一点?谢谢你提供的额外信息,我会确保我对CreateProcess更加小心。@Blobby不确定。我猜Windows.pas最初是为了支持没有这些优先级类的Windows版本而编写的。后来,当它们被添加到Windows中时,Delphi标题没有跟上进度。我想这是有道理的,在我发布的链接中,它说明了这两个优先级的操作系统兼容性。但我使用的是Delphi XE,所以您希望现在就包括/更新此内容。德尔福XE-2也是这样吗?Embarcadero真的应该更新一些过时的函数和东西:)因为这些没有包括在内,我认为除非使用其他代码方法,否则是不可能的。在XE2中也是如此。我同意这是遗漏。也就是说,Emba在改进和扩大标题翻译方面做了很多工作,但我想还有更多的工作要做。如果遇到Windows API上的块,请始终在MSDN中查找它。即使Delphi标题翻译不完整,您也始终能够访问新的Windows功能。
const
  BELOW_NORMAL_PRIORITY_CLASS = $00004000
  ABOVE_NORMAL_PRIORITY_CLASS = $00008000
UniqueString(FileName);