![]() |
Re: Service als Konsolenanwendung vor Login
LOL, bei mir auch nicht und habe mich somit selber ausgesperrt. :mrgreen:
In einer Konsolenanwendung het es aber. Muss ich mir mal angucken. |
Re: Service als Konsolenanwendung vor Login
Also ich bin auf Abmelden, dann hat der Debugger gefragt ob ich beenden will und dann auf abbrechen, dann war ich wieder zurück auf dem alten Desktop :stupid:
Edit: hab jetzt mal versucht aus der Konsole raus en Formular anzuzeigen und da hab ich mich auch wieder ausgesperrt.. ohne gehts aber. Was ist en ner MessageBox anders als an einem Formular? Edit2: Also das Problem scheint die Unit "Forms" zu sein, sobald ich diese einbinde schliess ich mich aus... :( Edit3: Also ich kann jetzt mit Canvas auf diesen zweiten Desktop zeichnen, aber könnte ich diesen zweiten Desktop nicht vielleicht auch irgendwie als eine Art Fenster auf dem ersten Desktop anzeigen lassen? |
Re: Service als Konsolenanwendung vor Login
Also theoretisch müsste doch, wenn ich auf den zweiten Desktop switche und dann mit Shellexecute ein Programm starte, dieses Programm auf ddiesem zweiten Desktop zu sehen sein, oder?
Auf jedenfall geschieht das nicht. Das programm wird auf dem ersten Desktop angezeigt... :( Edit: Also ich hab jetzt mal den "Ernstfall" getestet: Ein Dienst(TService) welcher den Desktop switcht und mit Canvas darauf die Uhrzeit anzeigt. Funktioniert NICHT. Er switcht zwar den Desktop und wartet die 20 Sekunden, aber das Canvas wird nicht gezeichnet, hier der Code:
Delphi-Quellcode:
Was muss ich ändern?
procedure TTestServerDienst.BaitAndSwitchDesktop;
var OldDesk : HDESK; NewDesk : HDESK; Canvas : TCanvas; DC : HDC; begin OldDesk := GetThreadDesktop(GetCurrentThreadID); NewDesk := CreateDesktop(PChar('Foobar'), nil, nil, 0, DESKTOP_CREATEWINDOW or DESKTOP_SWITCHDESKTOP or DESKTOP_CREATEMENU, nil); if NewDesk <> 0 then begin SetThreadDesktop(NewDesk); Windows.SwitchDesktop(NewDesk); //DrawPicture('E:\Bild_2.bmp'); ATestTime:=IncSecond(Now,20); try Canvas := TCanvas.Create(); try try Canvas.Handle := DC; with canvas.Font do begin Size:=96; Color:=clRed; end; while (ATestTime > Now)and not Terminated do Canvas.TextOut(100,800,DateTimetoStr(ATestTime)); except end; finally Canvas.Free; end; finally ReleaseDC(0, DC); end; Windows.SwitchDesktop(OldDesk); SetThreadDesktop(OldDesk); CloseDesktop(NewDesk); end; CloseDesktop(OldDesk); end; {******************************************************************************} procedure TTestServerDienst.ServiceExecute(Sender: TService); begin ATestTime:=IncMinute(Now,2); while (ATestTime>Now)and not terminated do BaitAndSwitchDesktop; end; |
Re: Service als Konsolenanwendung vor Login
Also ich schaff es jetzt zumindest vor dem Login mit Canvas auf den neuen Desktop zu zeichnen, das problem ist jetzt nur, dass der alte Desktop nichtmehr zurück kommt.. heisst: Ich kann mich nichtmehr einloggen.. nurnoch übern abgesicherten Modus.
|
Re: Service als Konsolenanwendung vor Login
also das beschriebene problem mit den Desktops hab ich bisher nur beobachtet wenn der Desktop nicht richtig geöffnet wurde. Du kannst ja mal meinen Desktopswitch probieren ob der richtig zwischen den Desktops hinn und her springt. Wenn der richtig funktioniert liegt es eindeutig daran das der Zieldesktop nicht mit genügend Zugriffsrechten geöffnet wurde.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz