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.
Delphi-创建虚拟桌面(CreateDesktop)
最新推荐文章于 2024-06-20 09:51:29 发布