![]() |
CreateWindowStation`?
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:
Danke für jede hilfe. Oder weiß jemand wie der "Microsoft Terminal Services" das schafft?
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; Sascha999999999 |
Re: CreateWindowStation`?
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. |
Re: CreateWindowStation`?
Vielleicht ist die Desktophintergrundfarbe weiß ?
Solange kein Fenster dort geöffnet ist, kann man das schlecht sagen. |
Re: CreateWindowStation`?
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? |
Re: CreateWindowStation`?
Dann kommt jetzt "Das Handle ist ungültig" b.z.w. "Falscher Parameter" in LastError.
Warsceinlich das Fenster Handle, was mache ich falsch? |
Re: CreateWindowStation`?
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? |
Re: CreateWindowStation`?
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? |
Re: CreateWindowStation`?
Das ist eine lustige Raterunde.
Es sticht STANDARD_RIGHTS_REQUIRED so hervor, ersetze doch mal alle WinStationRechte durch WINSTA_ALL_ACCESS. |
Re: CreateWindowStation`?
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? |
Re: CreateWindowStation`?
Stichwort: Concurrent Sessions
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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