hi, bin gerade dabei einen desktopmanager zu schreiben und
es kann sein dass du damit erfolg hast.
du musst den desktop "WinLogon" öffnen und deinen Thread diesem desktop
zuordnen. das funktioniert allerdings nur, wenn noch kein fenster erstellt wurde.
darum ist es am besten einen neuen thread zu erstellen und in dessen execute-event
folgende auzurufen.
die ausführlichen beschreibungen für die WindowStation- und Desktop-Funktionen
findest in
microsoft MSDN Library
---------------------------------------------------
Delphi-Quellcode:
procedure TMyThread.Execute;
var
hWndDesktop: THandle;
uof :TUSEROBJECTFLAGS;
lpszDesktop: LPTSTR;
msg: TMSG;
begin
lpszDesktop := '
WinLogon';
//desktop öffnen
hWndDesktop := OpenDesktop(lpszDesktop, 0, False, MAXIMUM_ALLOWED);
uof.fInherit := False;
uof.fReserved := False;
uof.dwFlags := DF_ALLOWOTHERACCOUNTHOOK;
SetUserObjectInformation(hWndDesktop, UOI_FLAGS, @uof, sizeof(uof));
//aktuellen thread dem desktop zuordnen
SetThreadDesktop (hWndDesktop);
// hier ein fenster über api-aufrufe erstellen
CreateWindowEx(...
//en thread solange ausführen, bis nichts mehr passiert
while GetMessage(msg, 0, 0, 0)
do
begin
translatemessage(msg);
dispatchmessage(msg);
end;
//dem threa den orginal desktop zuordnen...
SetThreadDesktop (hDesktopOrg);
//...und den desktop schliessen
CloseDesktop (hWndDesktop);
end;
----------------------
tutorials zum erstellen von fenstern über
api-aufrufe gibt es von asserbad
homepage von asserbad
----------------------
also viel erfolg