Einzelnen Beitrag anzeigen

Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#1

BugBug: TOleServer und SetThreadDesktop

  Alt 8. Okt 2007, 01:07
Wer die Units OleServer und/oder OleCtrls einbindet und SetThreadDesktop im Hauptthread aufruft, der wird den Fehler 170 (Ressource wird bereits verwendet) bekommen.
Das liegt daran, dass die beiden Units im initialization Teil ein Fensterhandle (oder derartiges) erstellen. Ich habe das nicht weiter untersucht.

Dieser Fehler kommt nicht unter Delphi7. Jedoch wohl in allen BDS Versionen. Andere Versionen hab ich nicht testen können.

Lösung:
Wenn man wirklich beides braucht, dann muss man SetThreadDesktop in einen anderen Thread auslagern.

Apollonius hat mal freundlicherweise ein Beispiel geschrieben.
Delphi-Quellcode:
program TrySetThreadDesktop;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows
  OleServer,
  OleCtrls;


var Old, New: Cardinal;
begin
  Old:=GetThreadDesktop(GetCurrentThreadID);
  try
    New:=CreateDesktop('MyDesktop', nil, nil, 0, GENERIC_ALL, nil);
    try
      if not SetThreadDesktop(New) then
       Writeln(SysErrorMessage(GetLastError))
      else
       begin
        SetThreadDesktop(Old);
        Writeln('Success');
       end;
    finally
      CloseDesktop(New);
    end;
  finally
    CloseDesktop(Old);
  end;
  Readln;
end.
Der Fehler ensteht sofort beim ersten SetThreadDesktop.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat