Hallo,
ich habe mal wieder eine Frage, die
mich heute schon etliche Stunden beschäftigt hat.
Und zwar ich möchte einen neuen Desktop mit createDesktop erstellen.
Soweit kein Problem. Ich habe mir mal
Luckies Code angeschaut
[hier].
Wenn ich aber die Procedure in eine
VCL - Anwendung einbaue, dann funktioniert sie nur soweit,
dass der Neue Desktop erstellt wird und dann auch gar nix mehr macht.
Ich habe raugefunden, dass nach setThreadDesktop(), getLastError <> 0 zurückgibt.
Den ErrorCode 1447 (ERROR_NO_SCROLLBARS) (laut
msdn) finde ich relativ komisch.
(Normalerweise müsste ich eventuell 170 für Thread in use)
Hat von euch jemand eine Idee was da schief laufen könnte?
Delphi-Quellcode:
procedure BaitAndSwitchDesktop;
var
OldDesk : HDESK;
NewDesk : HDESK;
begin
OldDesk := GetThreadDesktop(GetCurrentThreadID);
NewDesk := CreateDesktop(PChar('Foobar'), nil, nil, 0, DESKTOP_CREATEWINDOW or
DESKTOP_SWITCHDESKTOP or DESKTOP_CREATEMENU or DESKTOP_WRITEOBJECTS, nil);
if NewDesk <> 0 then
begin
showmessage(inttostr(windows.GetLastError)); // Gibt 0 zurück
showmessage(booltostr(Windows.SetThreadDesktop(NewDesk)));
showmessage(inttostr(windows.GetLastError)); // Gibt 1447 zurück
Windows.SwitchDesktop(NewDesk);
// Form erstellen
Windows.SwitchDesktop(OldDesk);
Windows.SetThreadDesktop(OldDesk);
CloseDesktop(NewDesk);
end;
CloseDesktop(OldDesk);
end;
Grüße
Björn