SetThreadDesktop: ERROR_INVALID_HANDLE - PullRequest
       36

SetThreadDesktop: ERROR_INVALID_HANDLE

1 голос
/ 24 апреля 2019

Почему каждый раз, когда выполняется приведенный ниже код, 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 Ответ

4 голосов
/ 24 апреля 2019

CreateDesktop возвращает дескриптор.Вам нужно использовать этот дескриптор, чтобы переключить ваш поток на рабочий стол.

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

Также обязательно проверьте, успешно ли работает функция, см. Документацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...