SetThreadDesktop:ERROR_INVALID_HANDLE

问题描述 投票:1回答:1

为什么每次执行下面的代码时,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.
delphi delphi-10-seattle
1个回答
4
投票

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

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

另外一定要检查函数是否成功,请参阅文档。

© www.soinside.com 2019 - 2024. All rights reserved.