Delphi-创建虚拟桌面(CreateDesktop)

unit NewDesktop;

interface
 uses Windows, Messages, SysUtils, Classes, WinSvc, SvcMgr;

function CreateANewDesktop(DesktopName: string): Boolean;
procedure DesktopSwitch(DesktopName: String='default');// 切换桌面  //系统默认桌面DesktopName:='default';

implementation

//创建一个桌面。
function CreateANewDesktop(DesktopName: string): Boolean;
 var
hDesk :Integer;
sin : TStartupInfo;
pin : TProcessInformation;
begin
try
  result := false;
  hDesk:=OpenDesktop(PChar(DesktopName), DF_ALLOWOTHERACCOUNTHOOK, False,MAXIMUM_ALLOWED);
  if hDesk=0  then  begin
    hDesk := CreateDesktop(PChar(DesktopName),nil,nil,0,MAXIMUM_ALLOWED,nil);
   //  FDesktop:=hDesk;
   //  Sleep(100);
   //  FillChar(sin,SizeOf(sin),0);
   //  sin.cb := SizeOf(sin);
   //  sin.lpDesktop := PChar(DesktopName);
   // // CreateProcess(PChar(GetEnvironmentVariable('WINDIR')+'\explorer.exe'),nil,nil,nil,False,0,nil,nil,sin,pin);   
   // CreateProcess(pchar(ParamStr(0)),nil,nil,nil,TRUE,BELOW_NORMAL_PRIORITY_CLASS, nil,nil,StartupInfo,ProcessInfo);  //启动软件
      //进程优先级别
      // 优先级 标志  优先级值
      // idle   (低)  IDLE_PRIORITY_CLASS 4
      // Below (低于标准)  BELOW_NORMAL_PRIORITY_CLASS  
      // normal (标准) NORMAL_PRIORITY_CLASS 7或9
      // Above (高于标准)  ABOVE_NORMAL_PRIORITY_CLASS  
      // high (高)  HIGH_PRIORITY_CLASS 13
      // realtime (实时) REALTIME_PRIORITY_CLASS 
      // 24
    result := true;
    Sleep(100);
  end;
finally 
 CloseDesktop(hDesk);
end;
end;

// 切换桌面  //系统默认桌面DesktopName:='default';
procedure DesktopSwitch(DesktopName: String='default');
  var hDesk: Integer;
  begin
  try
    hDesk:=OpenDesktop(PChar(DesktopName), DF_ALLOWOTHERACCOUNTHOOK, False,MAXIMUM_ALLOWED);
    Sleep(100);
    SwitchDesktop(hDesk);
  finally
    Sleep(100);
    CloseDesktop(hDesk);
  end;
  end;
end.

  

 
 
posted @ 2021-02-22 13:48  dqi1999  阅读(437)  评论(0)    收藏  举报