AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CreateWindowStation`?

Ein Thema von Sascha999999999 · begonnen am 7. Jul 2007 · letzter Beitrag vom 2. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Sascha999999999

Registriert seit: 28. Sep 2006
45 Beiträge
 
#1

CreateWindowStation`?

  Alt 7. Jul 2007, 11:59
Hallo, ich möchte für einen Servies einen interactiven Desktop erstellen und diesen auch "Abfotografieren" können.

Erstelle ich einen Desktop, so wird dieser beim Screenshot leider immer weiß.

Andere Dienste wie pcAnywhere oder der Microsoft Terminal Services können das ja auch iregndwie.

Also erstes muss man wohl eine Window Station erstellen, und dann den Desktop.

Delphi-Quellcode:
procedure DoScreenShot();
var
  c: TCanvas;
  r: TRect;
  Bild: TBitMap;
begin
  c := TCanvas.Create;
  Bild:=TBitMap.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  try
    r := Rect(0, 0, 800, 600);
    Bild.Width := 800;
    Bild.Height := 600;
    Bild.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.Handle);
    Bild.SaveToFile('C:\screencapture.bmp');
    c.Free;
  end;
end;

procedure TVDesk.Execute;
var
   hDesktop : HDESK;
   hWinstation : HWINSTA;
begin
   hWinstation := CreateWindowStation('TVStation', 0, STANDARD_RIGHTS_REQUIRED or WINSTA_ACCESSCLIPBOARD or WINSTA_ACCESSGLOBALATOMS or WINSTA_CREATEDESKTOP or WINSTA_ENUMDESKTOPS or WINSTA_ENUMERATE or WINSTA_EXITWINDOWS or WINSTA_READATTRIBUTES or WINSTA_READSCREEN or WINSTA_WRITEATTRIBUTES, nil);
   if hWinstation <> 0 then
   begin
      if SetProcessWindowStation(hWinstation) then
      begin
         hDesktop := CreateDesktop(PAnsiChar('TVDesktop'), nil, nil, 0, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL or DESKTOP_JOURNALPLAYBACK or DESKTOP_JOURNALRECORD or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP or DESKTOP_WRITEOBJECTS or STANDARD_RIGHTS_REQUIRED, nil);
         if hDesktop <> 0 then
         begin
            if SetThreadDesktop(hDesktop) then
            begin
               DoScreenShot();
            end;
            CloseDesktop(hDesktop);
         end;
      end;
      CloseWindowStation(hWinstation);
   end;
end;
Danke für jede hilfe. Oder weiß jemand wie der "Microsoft Terminal Services" das schafft?
Sascha999999999
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: CreateWindowStation`?

  Alt 7. Jul 2007, 13:15
funktioniert denn dein SetThreadDesktop? Wenn auf dem neuen Desktop kein Prozess geöffnet wird so wird der Desktop durch CloseDesktop wieder geschlossen.
Und prüfst du irgendwo ob GetDesktopWindow dir ein gültiges Handle zurück gibt? Du solltest eine Fehlerbehandlung einbauen damit du an den verschiedensten stellen auch mitbekommst wenn ein Befehl fehlschläft. ansonsten ist es ein wildes Raten wo der Fehler steckt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: CreateWindowStation`?

  Alt 7. Jul 2007, 17:23
Vielleicht ist die Desktophintergrundfarbe weiß ?

Solange kein Fenster dort geöffnet ist, kann man das schlecht sagen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Sascha999999999

Registriert seit: 28. Sep 2006
45 Beiträge
 
#4

Re: CreateWindowStation`?

  Alt 8. Jul 2007, 15:59
ok, da habt ihr recht ich habe den quelltext nocheinmal überarbeitet:

leider ist die Hintergrundfabe blau und alle funktionen geben true zurück...?

Ich habe jetzt noch einen Explorer auf den Desktop erstellt, kein erfolg!

Hat jemand von euch das Testprogramm mal Kompiliert?
  Mit Zitat antworten Zitat
Sascha999999999

Registriert seit: 28. Sep 2006
45 Beiträge
 
#5

Re: CreateWindowStation`?

  Alt 8. Jul 2007, 16:41
Dann kommt jetzt "Das Handle ist ungültig" b.z.w. "Falscher Parameter" in LastError.

Warsceinlich das Fenster Handle, was mache ich falsch?
  Mit Zitat antworten Zitat
Sascha999999999

Registriert seit: 28. Sep 2006
45 Beiträge
 
#6

Re: CreateWindowStation`?

  Alt 8. Jul 2007, 18:03
I found out that the Winstation must be interactive!

Is that posible?

Hat someone sourcecode for multisession? Perhaps only one interactive Winstation is possible. Interactive is needed for SwitchDesktop?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: CreateWindowStation`?

  Alt 8. Jul 2007, 22:07
Könnten wir uns bitte auf eine Sprache einigen? Ich sehe hier keinen Grund andauernd zwischen Englisch und Deutsch zu wecheseoln.

Es knan nur eine interaktive WindowsSation geben. Oder woher soll Windows wissen für welche WindowsStation die Eingaben von Tastatur und Maus gedacht sind?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: CreateWindowStation`?

  Alt 9. Jul 2007, 15:39
Das ist eine lustige Raterunde.

Es sticht STANDARD_RIGHTS_REQUIRED so hervor,
ersetze doch mal alle WinStationRechte durch WINSTA_ALL_ACCESS.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Sascha999999999

Registriert seit: 28. Sep 2006
45 Beiträge
 
#9

Re: CreateWindowStation`?

  Alt 10. Jul 2007, 16:02
Deutsch ist gut,

ja, nur eine interaktive WinStation! aber z.B. PCAnyware oder der Terminalserver können doch auch mehre "Eingabedesktops" erstellen, nur das jeder weitere außer "Winstation\Default" mit den Eingaben von einem Netzwerkbenutzer verknüft werden.

Ich habe WINSTA_ALL_ACCESS versucht, leider ohne erfolg, ich habe extra die aufzählung zu WINSTA_ALL_ACCESS verwendet weil im Winlibary zwei definizonen hierzu geschrieben waren eine für interaktive und eine für non interaktive WinStartions.

Versteht ihr was ich will?
  Mit Zitat antworten Zitat
Sascha999999999

Registriert seit: 28. Sep 2006
45 Beiträge
 
#10

Re: CreateWindowStation`?

  Alt 10. Jul 2007, 17:01
Stichwort: Concurrent Sessions
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz