Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ScreenShot von nichtsehbaren Desktop (https://www.delphipraxis.net/32281-screenshot-von-nichtsehbaren-desktop.html)

SleepyMaster 21. Okt 2004 11:07


ScreenShot von nichtsehbaren Desktop
 
Hi ihrs

weiß jemand von euch wie man den DC von einem Desktop erhält den man nicht sieht (CreateDesktop/EnumDesktops)?

Vielen Dank

Sascha999999999 16. Dez 2006 11:18

Re: ScreenShot von nichtsehbaren Desktop
 
Hat jemand eine Lösung für das Problem?

Die Screenhots werden immer Weis:

Delphi-Quellcode:
procedure ScreenShot(Bild: TBitMap; Desk: TThreadDesktop = nil);
var
  c: TCanvas;
  r: TRect;
begin
  c := TCanvas.Create;
  if(sdgfg=nil) then begin
  c.Handle := GetWindowDC(GetDesktopWindow);
  end
  else begin
  c.Handle := Desk.Handle;
  end;
  try
    r := Rect(0, 0, Screen.Width, Screen.Height);
    Bild.Width := Screen.Width;
    Bild.Height := Screen.Height;
    Bild.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
end;
Danke!

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Christian Seehase 16. Dez 2006 13:01

Re: ScreenShot von nichtsehbaren Desktop
 
Moin Sascha,

ich hab's mir mal etwas vereinfacht

Delphi-Quellcode:
procedure ScreenShot(Bild: TBitMap);
var
  c: TCanvas;
  r: TRect;
begin
  c := TCanvas.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  try
    r := Rect(0, 0, Screen.Width, Screen.Height);
    Bild.Width := Screen.Width;
    Bild.Height := Screen.Height;
    Bild.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.Handle);
    c.Free;
  end;
end;
aber in der Hauptsache bei Deinem Code belassen:

Kein Problem, das funktioniert so.

Hast Du eventuell den CopyMode des Bitmap-Canvas verstellt?

gsh 16. Dez 2006 13:30

Re: ScreenShot von nichtsehbaren Desktop
 
kann es sein des du versuchst aus einem service einen screenshot zu machen?

xaromz 16. Dez 2006 13:30

Re: ScreenShot von nichtsehbaren Desktop
 
Hallo,

soviel ich weiß, existiert kein Fenterbereich, den Windows nicht tatsächlich anzeigt. Deshalb kannst Du wahrscheinlich auch nur einen Screenshot des aktuell angezeigten Desktops machen.

@Christian: Deine Routine erstellt nur einen Screenshot des aktuellen Desktops. Das funktioniert natürlich.

Gruß
xaromz

himitsu 16. Dez 2006 13:39

Re: ScreenShot von nichtsehbaren Desktop
 
Wenn es also nicht geht, dann halt kurzzeitig auf den anderen Desktop umschalten, Bild machen und schnell wieder zurückschalten. :angel:

Olli 17. Dez 2006 04:47

Re: ScreenShot von nichtsehbaren Desktop
 
Zitat:

Zitat von himitsu
Wenn es also nicht geht, dann halt kurzzeitig auf den anderen Desktop umschalten, Bild machen und schnell wieder zurückschalten. :angel:

LOL. Wenn man das noch effektiver gestalten will, kann man unterschwellige Botschaften ala "du siehst das kurze Umschalten des Desktops nicht" in großen Buchstaben für Sekundenbruchteile einblenden :mrgreen: :mrgreen: :mrgreen:

Sascha999999999 30. Dez 2006 23:57

Re: ScreenShot von nichtsehbaren Desktop
 
hi,

erstmal danke für die vielen Antworten, leider war die lösung immernochnicht dabei,

ist es villeicht möglich mit "CreateProcess" (genauso wie den Explorer) einen Prozess zu erstellen der Screenhots macht und diese an den Hauptprozess sendet?

Danke

Olli 31. Dez 2006 00:10

Re: ScreenShot von nichtsehbaren Desktop
 
Doch die Lösung war dabei. Entweder du schaltest ihn schnell sichtbar oder es geht nicht. Du solltest dir einfach nur mal deine eigene Frage vor Augen führen und dir überlegen wie sinnvoll ein solches Unterfangen an sich ist und wie sinnvoll es ist, das Windows veranlaßt werden soll einen Desktop zu zeichnen, den es nicht anzeigt. :roll:

Sascha999999999 4. Jan 2007 02:47

Re: ScreenShot von nichtsehbaren Desktop
 
naja, entweder binn ich blind oder hier list jemand nicht richtig, die Lösung war wahr ehr nicht dabei!

Also es wird ja ein Aktiver Desktop erstellt, der auch dereichbar ist, man kann ja auch SnapHots von Programmen erstellen die minimirt sind!

ich probier das mal, wenn ich wollt kann ich euch dann ja auch mal mitteilen ob das geklappt hat oder nicht.


.......... ;-)

xaromz 4. Jan 2007 11:12

Re: ScreenShot von nichtsehbaren Desktop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Zitat:

Zitat von Sascha999999999
man kann ja auch SnapHots von Programmen erstellen die minimirt sind!

Also das wäre mir neu. Du kannst Dir ja mal mein Testprogramm ansehen. Wenn Du auf den Button klickst, dann wird ein Screenshot des zweiten Forms in das TImage darunter kopiert. Schau mal, was passiert, wenn das zweite Form verdeckt oder minimiert ist.

Gruß
xaromz

Harry M. 4. Jan 2007 11:21

Re: ScreenShot von nichtsehbaren Desktop
 
Kann es sein das Du die Screens im nicht im normalen "Usermodus" machst?
Ich hatte früher ein ähnliches Problem für eine "Remotedesktopverbindung".
Der dafür aufgesetzte Dienst war auch nicht in der Lage meinen Desktop "zusehen".

Sascha999999999 5. Jan 2007 04:12

Re: ScreenShot von nichtsehbaren Desktop
 
letzte Antwort exilent, auch danke für das Beispielprogramm.

Kannst du mir auchnoch ferraten wie du das Problem damals gelöst hast?

Danke.

Harry M. 5. Jan 2007 08:08

Re: ScreenShot von nichtsehbaren Desktop
 
Noch gar nicht. Hab mich nachher auch net weiter drum gekümmert. Aber ich werden das im laufe diesen Jahres sicher nochmal aufnehmen (müssen).

Union 5. Jan 2007 09:38

Re: ScreenShot von nichtsehbaren Desktop
 
Normalerweise kann man das aus einem Service so machen (DoScreenshot ist eine ganz normale Screenshot Routine). IMHO funktioniert das aber nur aus einem eigenen Thread - denn die Zuordnung Thread <-> Desktop ist 1:1!
Delphi-Quellcode:
//------------------------------------------------------------------------------
procedure TThreadScreenShot.Execute;
//------------------------------------------------------------------------------
// Thread ausführen
//------------------------------------------------------------------------------
var
   hDesktop : HDESK;
   hWinstation : HWINSTA;
   pDesktopName : array[0..255] of char;
   Desktopname : string;
   dwLen : DWORD;
begin
   hWinstation := OpenWindowStation('winsta0', true, GENERIC_ALL);
   if hWinstation <> 0 then
   begin
      if SetProcessWindowStation(hWinstation) then
      begin
         GetUserObjectInformation(OpenInputDesktop(0, false, GENERIC_ALL), UOI_NAME, @pDesktopname, 256, dwLen);
         SetString(DesktopName, pDesktopName, dwLen-1);

         hDesktop := OpenDesktop(PAnsiChar(Desktopname), 0, false, GENERIC_ALL);
         if hDesktop <> 0 then
         begin
            if SetThreadDesktop(hDesktop) then
            begin
               DoScreenShot(DesktopName);
            end;
            CloseDesktop(hDesktop);
         end;
      end;
      CloseWindowStation(hWinstation);
   end;
end;

Harry M. 5. Jan 2007 12:27

Re: ScreenShot von nichtsehbaren Desktop
 
Die Frage sollte eigelich sein wie man den Anmeldescreen sieht ohne LogonSession.
Alles andere übernimmt dann ja der Kontex des angemeldeten Benutzers.

Union 5. Jan 2007 15:10

Re: ScreenShot von nichtsehbaren Desktop
 
Das machst Du dann so (ohne das ganze Winstation-Gelumpe):
Delphi-Quellcode:
HDesktop := OpenDesktop ('Winlogon', 0, False, DESKTOP_ALL);
if (HDesktop <> 0) then
begin
   if SetThreadDesktop (HDesktop) then
   begin
      DoScreenshot('Winlogon');
      CloseDesktop (HDesktop);
   end;    
end;

Harry M. 5. Jan 2007 19:42

Re: ScreenShot von nichtsehbaren Desktop
 
Wäre net schlecht! Ich werde sich bald drauf zurückkommen da ich wie schon erwähn das alte Projekt bald wieder aufnehmen will.

Sascha999999999 6. Jan 2007 07:06

Re: ScreenShot von nichtsehbaren Desktop
 
ein dank an alle!

Mache mich gleich an die Arbeit und werde das testen!

Gruß Sascha

Sascha999999999 6. Jan 2007 07:10

Re: ScreenShot von nichtsehbaren Desktop
 
weiß noch jemand den unterschied zwischen:

MAXIMUM_ALLOWED, GENERIC_ALL und DESKTOP_ALL?

Harry M. 6. Jan 2007 13:44

Re: ScreenShot von nichtsehbaren Desktop
 
Zitat:

Zitat von Sascha999999999
weiß noch jemand den unterschied zwischen:

MAXIMUM_ALLOWED, GENERIC_ALL und DESKTOP_ALL?

Klar die MSDN:
http://msdn2.microsoft.com/en-gb/library/ms682575.aspx

Sascha999999999 6. Jan 2007 14:27

Re: ScreenShot von nichtsehbaren Desktop
 
ok, habe das jetzt 6 Stunden getestet ohne Erfolg, immernoch ein weißes Screenhot:

Desktop_ALL:
Delphi-Quellcode:
const
DESKTOP_ALL = DESKTOP_READOBJECTS or DESKTOP_CREATEWINDOW or
                DESKTOP_CREATEMENU or DESKTOP_HOOKCONTROL or
                DESKTOP_JOURNALRECORD or DESKTOP_JOURNALPLAYBACK or
                DESKTOP_ENUMERATE or DESKTOP_WRITEOBJECTS or DESKTOP_SWITCHDESKTOP;
Auftruf von der Thread Function:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  ThreadID: DWORD;
  ThreadHandle: THandle;
begin
ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@ScreenFunction), nil, 0, ThreadID);
if ThreadHandle<>0 then CloseHandle(ThreadHandle);
end;
Und die Funktion:
Delphi-Quellcode:
function ScreenFunction(p:Pointer):Word;
var hDesktop : HDESK;
begin
result:=1;
if(form1.CheckBox1.checked=true) then begin
HDesktop := OpenDesktop ('myDesktop', 0, False, DESKTOP_ALL or GENERIC_ALL);
end
else begin
HDesktop := OpenDesktop ('default', 0, False, DESKTOP_ALL or GENERIC_ALL);
end;
if (HDesktop <> 0) then
begin
   if SetThreadDesktop (HDesktop) then
   begin
      ScreenCapture(form1.Image1.Picture.Bitmap);
      CloseDesktop (HDesktop);
   end;
end;
end;
last but not least, die ScreenHot Function:
Delphi-Quellcode:
procedure ScreenCapture(Bmp: TBitmap);
var
  DeskWnd: HWnd;
  DeskDC: HDC;
  DeskCv: TCanvas;
  R: TRect;
  W, H: Integer;
begin
  if Bmp = nil then Exit;
  DeskWnd := GetDesktopWindow;
  DeskDC := GetWindowDC(DeskWnd);
  DeskCv := TCanvas.Create;
  DeskCv.Handle := DeskDC;
  W := Screen.Width;
  H := Screen.Height;
  R := Bounds(0, 0, W, H);
  try
    Bmp.HandleType := bmDIB;
    Bmp.PixelFormat := pf24Bit;
    Bmp.Width := W;
    Bmp.Height := H;
    Bmp.Canvas.CopyMode := cmSrcCopy;
    Bmp.Canvas.CopyRect(R, DeskCv, R);
  finally
    DeskCv.Free;
    ReleaseDC(DeskWnd, DeskDC);
  end;
end;
Den Desktop erstelle ich vorher. Mit dem ThreadObjekt wie Ihr gesagt hattet, ist SetThreadDesktop leider immer False.

Harry M. 7. Jan 2007 01:07

Re: ScreenShot von nichtsehbaren Desktop
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das tut was soll.
Dank Union! Er hat mich via PN auf einen Umstand aufmerksamgemacht den ich so nicht erkannt habe.

Olli 7. Jan 2007 06:00

Re: ScreenShot von nichtsehbaren Desktop
 
Ist das jetzt bloß unheimlich optimiert, oder verstehe ich hier irgendwas nicht??? :gruebel:

Code:
[color=gray][...][/color]
   pDesktopName : array[0..255] of char;
[color=gray][...][/color]
         GetUserObjectInformation(OpenInputDesktop(0, false, GENERIC_ALL), UOI_NAME, @pDesktopname, 256, dwLen);
         [color=red]SetString(DesktopName, pDesktopName, dwLen-1);[/color]

         hDesktop := OpenDesktop([color=red]PAnsiChar(Desktopname)[/color], 0, false, GENERIC_ALL);
[color=gray][...][/color]
Bei dieser Form der Optimierung kann auch der Compiler nicht mehr mithalten, denke ich ... :mrgreen:

@Union: kann es denn nicht auch mehr als nur eine WinSta0 auf TS-Systemen geben?
Apropos: wie steht's denn mit der Vista- und TS-Kompatibilität??? Schon jemand getestet?

@Sascha999999999: Du postest hier wild weiter. Hast du schonmal angeschaut was die Beispiele (e.g. Union) so machen? Ich vermisse da mindestens ein wichtiges Element in deinem Code (Stichwort: WinSta). Im übrigen gibt es gute Gründe nicht immer alle Rechte anzufordern. Beispielsweise könnte dein Code schon wieder nicht funktionieren, wenn er unter einem weniger privilegierten Konto ausgeführt wird.

Union 7. Jan 2007 13:33

Re: ScreenShot von nichtsehbaren Desktop
 
Zitat:

Zitat von Olli
@Union: kann es denn nicht auch mehr als nur eine WinSta0 auf TS-Systemen geben?

Das schon, aber pro Session nur eine.

Olli 7. Jan 2007 15:31

Re: ScreenShot von nichtsehbaren Desktop
 
Zitat:

Zitat von Union
Zitat:

Zitat von Olli
@Union: kann es denn nicht auch mehr als nur eine WinSta0 auf TS-Systemen geben?

Das schon, aber pro Session nur eine.

Also war deine Funktion nicht vorgesehen um aus einem Service zu laufen?!

Union 7. Jan 2007 15:33

Re: ScreenShot von nichtsehbaren Desktop
 
Zitat:

Also war deine Funktion nicht vorgesehen um aus einem Service zu laufen?!
Das schon, aber nicht unbedingt um Screenshots von "fremden" Sessions zu machen.

Olli 7. Jan 2007 15:44

Re: ScreenShot von nichtsehbaren Desktop
 
Zitat:

Zitat von Union
Zitat:

Also war deine Funktion nicht vorgesehen um aus einem Service zu laufen?!
Das schon, aber nicht unbedingt um Screenshots von "fremden" Sessions zu machen.

Bei TS wäre doch jegliche (RDP-)Session eine fremde, außer jene die auf der Konsole läuft, was dann aber spätestens mit Vista auch der Vergangenheit angehört.

Nachtrag: Nee, Kommando zurück, über die Native API könnte es doch gehen ...

Sascha999999999 10. Jan 2007 14:07

Re: ScreenShot von nichtsehbaren Desktop
 
nein, sorry das ich es erst jetzt erwähne aber es sollte eigendlich kein Servies sein!

geht es auch Ohne?

und muss der Winstation Kram sein?

Olli 10. Jan 2007 14:28

Re: ScreenShot von nichtsehbaren Desktop
 
Zitat:

Zitat von Sascha999999999
geht es auch Ohne?

Ja, wahrscheinlich sogar besser, aber nicht für alle Desktops.

Zitat:

Zitat von Sascha999999999
und muss der Winstation Kram sein?

Ja.

Sascha999999999 11. Jan 2007 14:20

Re: ScreenShot von nichtsehbaren Desktop
 
[quote="Olli"]
Zitat:

Zitat von Sascha999999999
geht es auch Ohne?

Ja, wahrscheinlich sogar besser, aber nicht für alle Desktops.

was heißt "aber nicht für alle Desktops"?

Sascha999999999 11. Jan 2007 14:29

Re: ScreenShot von nichtsehbaren Desktop
 
Liste der Anhänge anzeigen (Anzahl: 1)
sorry, aber bei mir sind die Weiß!

himitsu 8. Nov 2009 20:12

Re: ScreenShot von nichtsehbaren Desktop
 
Jupp, selbes Problem.
Bei mir ist auch alles nur Weiß.

Vom normalen/sichtbaren Desktop "default" klappt es, aber nicht bei einem nicht Sichtbaren :cry:

Delphi-Quellcode:
Procedure THandler.ScreenShot(Desktop: String; Stream: TStream; Quality: Byte = 100);
  Var Desk: HDESK;
    OldDesk: HDESK;
    Canvas: TCanvas;
    Bitmap: TBitmap;
    Jpeg:   TJPEGImage;
    R:      TRect;

  Begin
    Desk := OpenDesktop(PChar(Desktop), 0, False, DESKTOP_CREATEMENU
      or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE or DESKTOP_HOOKCONTROL
      or DESKTOP_WRITEOBJECTS or DESKTOP_READOBJECTS or DESKTOP_SWITCHDESKTOP
      or GENERIC_WRITE);
    OldDesk := GetThreadDesktop(GetCurrentThreadId);
    SetThreadDesktop(Desk);
    Try
      Jpeg := TJPEGImage.Create;
      Try
        Bitmap := TBitmap.Create;
        Try
          Canvas := TCanvas.Create;
          Try
            Canvas.Handle := GetWindowDC(GetDesktopWindow);
            R := Rect(0, 0, Screen.Width, Screen.Height);
            Bitmap.Width := Screen.Width;
            Bitmap.Height := Screen.Height;
            Bitmap.Canvas.CopyRect(R, Canvas, R);
          Finally
            ReleaseDC(0, Canvas.Handle);
            Canvas.Free;
          End;
          //Image.Width := Bitmap.Width;
          //Image.Height := Bitmap.Height;
          Jpeg.CompressionQuality := Quality;
          Jpeg.Assign(Bitmap);
        Finally
          Bitmap.Free;
        End;
        Jpeg.SaveToStream(Stream);
      Finally
        Jpeg.Free;
      End;
    Finally
      SetThreadDesktop(OldDesk);
      CloseDesktop(Desk);
    End;
  End;
[add]
Ach ja, ich versuche nicht irgendeinen Desktop zu lesen.
Mein Programm hat Einen mit CreateDesktop erstellt und genau diesen möchte ich nun auch gern "sehen" können :(

Delphi-Quellcode:
Desktop := CreateDesktop(PChar('Run' + IntToStr(GetCurrentProcessId)),
  nil, nil, 0, DESKTOP_CREATEMENU or DESKTOP_CREATEWINDOW or DESKTOP_ENUMERATE
  or DESKTOP_HOOKCONTROL or DESKTOP_WRITEOBJECTS or DESKTOP_READOBJECTS
  or DESKTOP_SWITCHDESKTOP or GENERIC_WRITE, nil);

himitsu 9. Nov 2009 10:16

Re: ScreenShot von nichtsehbaren Desktop
 
http://fnse.de/S02/15S.gif


MSDN
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.

Also liegt es wohl wirklich nur an dem "unsichtbar".

Dezipaitor 9. Nov 2009 22:12

Re: ScreenShot von nichtsehbaren Desktop
 
Scheint mir ganz sinnig zu sein.
Nur der Desktop, der gerade Eingaben empfängt, generiert auch Zeichennachrichten. Alles andere wäre ja Verschwendung von Resourcen, oder nicht?

Ich habe es nicht probiert, aber vielleicht kann man eine neue WindowStation mit einem Desktop aufmachen. Da nur Winsta0 mit dem Keybboard und Monitor verbunden ist, könnte es gut sein, dass andere Windowstations eigene Zeichenbereiche, unabhängig vom echten Desktop, besitzen.

himitsu 9. Nov 2009 22:29

Re: ScreenShot von nichtsehbaren Desktop
 
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 MSDN-Library durchsuchenPrintWindow half nix, wobei dieses noch 'ne Unschöne Nebenwirkung hatte,
denn wenn der Desktop sichtbar war, verschanden die zu "druckenden" Fenster für ein/zwei Sekunden vom Bildschirm :shock:
http://www.delphipraxis.net/internal...t.php?t=139750

Zitat:

Nur der Desktop, der gerade Eingaben empfängt, generiert auch Zeichennachrichten.
Selbst wenn ich diese Nachrichten generiere, geht es anscheinend nicht.


Im Grunde sollte es eine Hintergrund-Remote-Desktop-Software für Arme werden, aber wenn man den Deskop nicht sieht, läßt es sich etwas schwer damit arbeiten.

Dezipaitor 9. Nov 2009 22:41

Re: ScreenShot von nichtsehbaren Desktop
 
Ich habe eine mögliche Lösung gegeben. Ich verstehe nicht, warum man trotzdem versucht etwas zum Laufen zu bringen, was so nicht entworfen wurde. Das ganze ist absichtlich so gebaut worden.

himitsu 9. Nov 2009 23:07

Re: ScreenShot von nichtsehbaren Desktop
 
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 Desktop, in welche dann alle Fenter kurz als Childs (MDI) eingebunden werden

aber ich glaub das heb ich mir für den Notfall auf.

Dezipaitor 9. Nov 2009 23:10

Re: ScreenShot von nichtsehbaren Desktop
 
Du kannst den Service in einer eigenen Winstation laufen lassen. Das interessiert den nicht :)

himitsu 10. Nov 2009 08:26

Re: ScreenShot von nichtsehbaren Desktop
 
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.

Zitat:

Zitat von Union
Delphi-Quellcode:
GetUserObjectInformation(OpenInputDesktop(0, false, GENERIC_ALL), UOI_NAME, @pDesktopname, 256, dwLen);
SetString(DesktopName, pDesktopName, dwLen-1);
hDesktop := OpenDesktop(PAnsiChar(Desktopname), 0, false, GENERIC_ALL);
if hDesktop <> 0 then

OK, abgesehn davon, daß der mit OpenInputDesktop geöffnete Desktop laut MSDN auch wieder geschlossen werden muß was er hier nicht wird...

Aber versteh ich den Code richtig?
Man öffnet den Desktop der WindowStation, besorgt sich den Namen und öffnet ihn dann nochmal?

Also theoretisch würde es doch dann reichen den zuerstgefundenen Desktop gleich zu benutzen? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:51 Uhr.
Seite 1 von 2  1 2      

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