SetThreadDesktop:ERROR_INVALID_HANDLE

时间:2019-04-24 00:13:21

标签: delphi delphi-10-seattle

为什么每次执行以下代码时,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.

1 个答案:

答案 0 :(得分:4)

CreateDesktop返回一个句柄。您需要使用该句柄将线程切换到桌面。

_hDesk := CreateDesktop('test', nil, nil, 0, GENERIC_ALL, nil);

还请确保检查功能是否成功,请参见文档。