Einzelnen Beitrag anzeigen

Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#13

Re: Service als Konsolenanwendung vor Login

  Alt 3. Apr 2006, 08:58
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:
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;
Was muss ich ändern?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat