📄 unit_thread.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 + -