Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
11. Nov 2009
In 'ner anderen WindowStation bekomm ich endlich ein anderes DesktopHandle, aber dennoch bleibt es weiß.
Leeres Bitmap ist weiß und StretchBlt aka TCanvas.CopyRect sagt nur "Zugriff verweigert".
Aber irgendwie muß es doch gehn? :?
Immerhin funktioniert es ja auch bei den Terminal Servern.
Im Endefekt soll es eine Mischung zwischen Terminal Server und Remote Desktop werden.
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
10. Nov 2009
SetConsoleCtrlHandler(@HandlerRoutine, True);
OldWinStat := GetProcessWindowStation;
OldDesktop := GetThreadDesktop(GetCurrentProcessId);
Try
WinStat := CreateWindowStation(nil, 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...
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
10. Nov 2009
nja, wie gesagt, ich bau es jetzt erstmal so um, daß statt 'nes Desktops gleich eine ganze WindowsStation erstellt wird und nutze dann dessen Standarddesktop ... brauch aber noch ein paar Minütchen.
Und dann muß ich mal sehn, wie ich das Programm in einen Service umwandel, weil ohne Adminrechte geht es dann nimmer.
OK, abgesehn davon, daß der mit OpenInputDesktop geöffnete Desktop laut...
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
9. Nov 2009
Bin ja schon dabei es über eine eigene WindowStation zu probieren, aber wenn dieses funktioniert und dann auch noch richtig zum Einsatz kommen soll, werde ich das halbe Projekt auch noch auf 'nen Service umstellen müssen, wegen der nötigen Rechte.
Na dann mal sehn wie ich meinen ersten Service dann so hinbekomm. :|
Wobei ich eine Idee noch hätte.
- eine invisible Form auf dem sichtbaren...
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
9. Nov 2009
Ja, aber gerade deswegen wollte ich ja einen ScreenShot machen, weil man ihn (sonst) nicht sieht.
Hab auch schon versucht mit FindWindowEx die Fenster durchzugehn und einzeln zu zeichnen.
Ging auch nicht, aber kann auch sein, daß ich was falsch gemacht hab.
Auch PrintWindow half nix, wobei dieses noch 'ne Unschöne Nebenwirkung hatte,
denn wenn der Desktop sichtbar war, verschanden die zu...
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
9. Nov 2009
http://fnse.de/S02/15S.gif
The SetThreadDesktop function will fail if the calling thread has any windows or hooks on its current desktop
So, auch wenn es bei mir nicht in einem extra Thread läuft.
Es handelt sich um eine Konsolenanwendung,
SetThreadDesktop liefert auch immer braf True,
aber es bleibt alles weiß.
Mache ich den Desktop allerdings sichtbar, dann geht es plötzlich.
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
8. Nov 2009
Jupp, selbes Problem.
Bei mir ist auch alles nur Weiß.
Vom normalen/sichtbaren Desktop "default" klappt es, aber nicht bei einem nicht Sichtbaren :cry:
Procedure THandler.ScreenShot(Desktop: String; Stream: TStream; Quality: Byte = 100);
Var Desk: HDESK;
OldDesk: HDESK;
Canvas: TCanvas;
Bitmap: TBitmap;
Forum: Win32/Win64 API (native code)
Delphi
by himitsu,
16. Dez 2006
Wenn es also nicht geht, dann halt kurzzeitig auf den anderen Desktop umschalten, Bild machen und schnell wieder zurückschalten. :angel: