设置线程桌面:ERROR_INVALID_HANDLE
SetThreadDesktop: ERROR_INVALID_HANDLE
为什么每次执行下面的代码时,SetThreadDesktop()
都会失败并显示以下消息:
ERROR_INVALID_HANDLE
新桌面创建成功,表示打开句柄
发生什么事了?
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
Windows,
SysUtils;
var
_hDesk: HDESK;
begin
try
_hDesk := OpenDesktop('test', 0, True, GENERIC_ALL);
if _hDesk = 0 then
CreateDesktop('test', nil, nil, 0, GENERIC_ALL, nil);
if not SetThreadDesktop(_hDesk) then
begin
Writeln(SysErrorMessage(GetLastError));
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
CreateDesktop
returns一个句柄。您需要使用该句柄将线程切换到桌面。
_hDesk := CreateDesktop('test', nil, nil, 0, GENERIC_ALL, nil);
另外一定要检查函数是否成功,查看文档了解如何。
为什么每次执行下面的代码时,SetThreadDesktop()
都会失败并显示以下消息:
ERROR_INVALID_HANDLE
新桌面创建成功,表示打开句柄
发生什么事了?
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
Windows,
SysUtils;
var
_hDesk: HDESK;
begin
try
_hDesk := OpenDesktop('test', 0, True, GENERIC_ALL);
if _hDesk = 0 then
CreateDesktop('test', nil, nil, 0, GENERIC_ALL, nil);
if not SetThreadDesktop(_hDesk) then
begin
Writeln(SysErrorMessage(GetLastError));
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
CreateDesktop
returns一个句柄。您需要使用该句柄将线程切换到桌面。
_hDesk := CreateDesktop('test', nil, nil, 0, GENERIC_ALL, nil);
另外一定要检查函数是否成功,查看文档了解如何。