⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit_thread.pas

📁 VirtualDesktopSources虚拟桌面源代码
💻 PAS
字号:
//Windows desktop application
//Made by Daniel Vladutu
//        www.free-soft.ro
unit Unit_Thread;

interface

uses Classes,Windows,SysUtils;

type
  TThreadDesktop = class(TThread)
  private
    FDesktopName:String;
    procedure SwitchToDesktop(DesktopName: String);
    function CreateDesktop(DesktopName: String): HDESK;
    procedure EnumerateDesktops;
  protected
    procedure Execute; override;
  published
    constructor Create;
    property ReturnValue;

  end;

implementation

uses Unit_Main;
var  List_Desktops:TStringList;

function EnumDesktopProc(Desktop: LPTSTR; Param: LParam): Boolean; stdcall;
begin
  if Desktop<>'Winlogon' then
  List_Desktops.Insert(0,Desktop);
  result := True;
end;

constructor TThreadDesktop.Create;
begin
   List_Desktops:=TStringList.Create;
   inherited Create(false);
end;

procedure TThreadDesktop.Execute;
var Desk: HDESK;
    i:Integer;
    s:String;
begin
   ReturnValue:=0;
   Desk := opendesktop ('Default', 0, False, MAXIMUM_ALLOWED);
   if (Desk <> 0) and (SetThreadDesktop (Desk) = True) then
   begin
      if GetKeyState(VK_LMENU) < 0 then //We press on LeftAlt button
      begin
         EnumerateDesktops;
         for i:=$31 to $39 do
         begin
            if (GetKeyState(i)<0) and (List_Desktops.Count>i-$31)  then
            begin
               SwitchToDesktop(List_Desktops[i-$31]);
               Break;
            end;
         end;
      end;
   end;
   CloseDesktop(Desk);
   FreeAndNil(List_Desktops);
end;

function TThreadDesktop.CreateDesktop(DesktopName: String): HDESK;
var Desk: HDESK;
begin
  Desk := Windows.CreateDesktop(PChar(DesktopName), nil, nil, 0, MAXIMUM_ALLOWED, nil);
  List_Desktops.Insert(0, DesktopName);
  result := Desk;
end;

procedure TThreadDesktop.EnumerateDesktops;
var i:Integer;
begin
   List_Desktops.Clear;
   EnumDesktops(GetProcessWindowStation, @EnumDesktopProc, Integer(Self));
end;

procedure TThreadDesktop.SwitchToDesktop(DesktopName: String);
var Desk: HDESK;
begin
  Desk:=OpenDesktop(PChar(DesktopName), DF_ALLOWOTHERACCOUNTHOOK, False, MAXIMUM_ALLOWED);
  Sleep(100);
  SwitchDesktop(Desk);
  CloseDesktop(Desk);
end;

end.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -