Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi CreateDesktop, SwitchDesktop, ... (https://www.delphipraxis.net/31064-createdesktop-switchdesktop.html)

Dax 3. Okt 2004 18:55


CreateDesktop, SwitchDesktop, ...
 
Ich habe ein der Win32-SDK gelesen, man könne mit CreateDesktop einen neuen Desktop erstellen, mit SwitchDesktop auf einen anderen Desktop wechseln, ich glaube, mit OpenDesktop öffnet man einen solchen. Aber wozu sind diese Funktionen alle gut? Kann mir jemand genauer erklären, wie sie funktionieren?

Danke.

Ultimator 3. Okt 2004 18:56

Re: CreateDesktop, SwitchDesktop, ...
 
Ich weiß es nicht genau, aber ich könnte mir vorstellen, dass es so ist wie unter Linux mir den 4 Desktops...

Dax 3. Okt 2004 19:00

Re: CreateDesktop, SwitchDesktop, ...
 
Aber was genau machen die Funktionen, und wofür braucht man sie?

w3seek 3. Okt 2004 19:24

Re: CreateDesktop, SwitchDesktop, ...
 
wenn du ctrl+alt+del drueckst wechselt winlogon in einen (secured) desktop. Eine Window Station besteht aus mehreren desktops, Fenster handles etc gehoeren zu einer Window station, d.h. die fenster handles sind in allen desktops einer window station gueltig. Ein prozess kann (wenn es ein gui programm ist) einer Window Station zugeordnet werden, in der seine handles (also fenster, menues, ... - nicht aber gdi handles wie pens und brushes) und objekte erstellt werden sollen. Da ja jeder Prozess aus mind. 1 thread besteht, kann man einem Thread einen Desktop in der Window Station zuordnen. Wenn jetzt dein Programm (also dein Hauptthread im Programm) ein Fenster erstellt, wird es in dem Desktop erstellt dem der Thread zugeordnet ist. ein Desktop ist eben sozusagen ein "bildschirm" in dem Fenster angeordnet werden koennen - und diese werden von einer window station (also einem "fenstermanager") verwaltet. Den Zugriff auf Handles die Threads gehoeren die in einem anderen Desktop sind, ist nur moeglich wenn entsprechende Zugriffsrechte auf diesen Desktop (und window station) bestehen - deswegen hat man beispielsweise keinen Zugriff auf die secured Desktops ;)

Sorry fuer die daemliche erklaerung, weiss nicht wie ich es besser erklaeren soll ;)

Dax 4. Okt 2004 15:09

Re: CreateDesktop, SwitchDesktop, ...
 
Kennt jemand ein Tuturial, das die benutzung dieser FUnktionen ausführlich beschreibt? w3seeks's Erklärung hätte nicht unbedingt sein müssen (@w3s: Mach dir nichts draus, aber das wusste ich schon vorher. ;)), aber ein wenig geholfen hat es schon. Trotzdem weiss ich immer noch nicht, wie man diese FUnktionen konkret benutzt...

Assarbad 11. Okt 2004 19:56

Re: CreateDesktop, SwitchDesktop, ...
 
http://pluralsight.com/wiki/default....eBook.HomePage

Oder das Vorgängerbuch "Programming Windows Security"

Das Problem ist übrigens nicht annähernd so trivial wie es sich in w3seeks Beschreibung anhört. Du brauchst mindestens einen Helferservice. Falls du Interesse hast sowas zu benutzen, empfehle ich Bei Google suchenNetExec. Denn um ehrlich zu sein, der Aufwand rechtfertigt den Preis für diese Software durchaus ;)

Dax 12. Okt 2004 06:27

Re: CreateDesktop, SwitchDesktop, ...
 
Eigentlich wollte ich nur einen Desktop-Switcher programmieren, wie er bei Linux/KDE standardmäßig dabei ist... :gruebel: Trotzdem Danke!

Steve 12. Okt 2004 06:57

Re: CreateDesktop, SwitchDesktop, ...
 
Sowas habsch mir auch schonmal überlegt, aber wozu das Rad neu erfinden: XP Powertoys, Virtual Desktop Manager (Teil der XP Powertoys, 550 KB)

Ist halt nur für XP

Aber letztendlich läuft das imho so, dass kein neuer Desktop erzeugt wird, sondern lediglich die Fenster in verschiedenen virtuellen Desktops angezeigt werden können und jeder virt. Desktop ein anderes Hintergrundbild haben kann.

Zitat:

Zitat von MSDVM Helpfile
Virtual Desktop Manager overview
Use the Virtual Desktop Manager to organize a busy desktop. If you usually have many Windows open at a time, you can now organize them on four different desktops. Using shortcut keys or the Quick Switch buttons on the taskbar, you can switch between the desktops.
For example, you can open your e-mail program on one desktop, an Internet chess game on the second, several Internet sessions on the third, and multiple database sessions on the fourth.
The highlighted Quick Switch button on the taskbar indicates the current active desktop. You can also assign different backgrounds to each desktop to make it easy to identify which desktop is active.
To move a program from one desktop to another, click the program's button on the taskbar, or press ALT+TAB. To prevent the movement of programs between desktops, turn off Shared Desktops. To view all the desktops at once, use Preview mode.


Gruß
Stephan

edit: Teppfihler

Assarbad 12. Okt 2004 10:11

Re: CreateDesktop, SwitchDesktop, ...
 
Zitat:

Zitat von Steve
Aber letztendlich läuft das imho so, dass kein neuer Desktop erzeugt wird, sondern lediglich die Fenster in verschiedenen virtuellen Desktops angezeigt werden können und jeder virt. Desktop ein anderes Hintergrundbild haben kann.

Jupp, das ist der einzige Haken. NetExec macht es eben richtig ;)

phlux 12. Okt 2004 11:10

Re: CreateDesktop, SwitchDesktop, ...
 
für alle nicht xp user die auch gerne multiple desktops haben wollen empfehle ich: DarkDesktop

nailor 12. Okt 2004 11:17

Re: CreateDesktop, SwitchDesktop, ...
 
wobei dieses PowerToy imho einen kleinen Hau hat.

Steve 12. Okt 2004 11:21

Re: CreateDesktop, SwitchDesktop, ...
 
Zitat:

Zitat von nailor
wobei dieses PowerToy imho einen kleinen Hau hat.

imho hat's nen großen Hau :twisted:


Guß
Stephan :dance:

Dezipaitor 1. Feb 2007 09:30

Re: CreateDesktop, SwitchDesktop, ...
 
Delphi-Quellcode:
uses windows
var desktop : HDESK ;

desktop := CreateDesktop('mydesk',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);


SwitchDesktop(desktop);
SetThreadDesktop(desktop);
zurück gehts u.a. so:
Delphi-Quellcode:
var inputdesktop : HDESK ;
inputdesktop := OpenDesktop('default', 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);
      
   
SwitchDesktop(inputdesktop);
SetThreadDesktop(inputdesktop);
Folgendes ist ist zu beachten :
1. Wenn bereits Fenster auf dem normalen Desktop existieren, d.h. der Hauptthread Fenster besitzt.
Dann muss ein neuer Thread gestartet werden, damit der Prozess auf dem neuen Desktop Fenster erzeugen kann.
-> Das führt dazu, dass die VCL nur für den alten Desktop funktioniert und man nicht die VCL für den neuen Desktop verwenden kann.
Lösung dazu: WinAPI verwenden oder KOL.

2. Das Testen auf der lokalen Maschine ist schwierig. Denn sobald ein Breakpoint nach dem Desktopwechsel auftritt, oder die Anwendung eine Exception wirft, kommt man nicht mehr zurück zu Delphi.
Nur ein Beenden der Anwendung hilft (über telnet oder RPC von anderem PC mit taskkill bzw. pstaskkill)
Besser ist es einen zweiten PC oder auch eine VM zu benutzen und Remotedebugging zu machen.

3. Ein neuer Desktop ist komplett von anderen Anwendungen abgeschirmt. Diese können dort nicht platziert werden. D.h. für virtuelle Desktops ala Powertoys funktioniert das nach meiner Meinung nicht. Man muss Anwendungen in diesem Desktop erneut starten.

hannesgw 2. Mär 2009 09:27

Re: CreateDesktop, SwitchDesktop, ...
 
Hi kann mir vllt. einer von euch bitte sagen wie ich dann in diesem neu erzeugten Desktop eine Anwendung starte?
Mit ShellExecute funktioniert es irgendwie nich

Teekeks 2. Mär 2009 10:06

Re: CreateDesktop, SwitchDesktop, ...
 
Zitat:

Zitat von Ultimator
Ich weiß es nicht genau, aber ich könnte mir vorstellen, dass es so ist wie unter Linux mir den 4 Desktops...

[OT]
Du kannst dir üprigens beliebig viele virtuele Desktops einrichten... Ich hab 8 und brauche auch alle ^^
[/OT]

Dezipaitor 2. Mär 2009 21:35

Re: CreateDesktop, SwitchDesktop, ...
 
CreateDesktop erzeugt keinen "virtuellen Desktop". Wenn eine Anwendung mal auf dem Desktop ist, dann bleibt sie auch, bis alle GUI Handles zerstört wurden.

Mit "virtuellen Desktops" wird unter Windows der Trick verstanden, alle Fenster so zu verwalten, dass nicht immer alle sichtbar sind, sondern erst beim umschalten.

PsTo 6. Jul 2009 22:52

Re: CreateDesktop, SwitchDesktop, ...
 
Zitat:

Zitat von Dezipaitor
Delphi-Quellcode:
uses windows
var desktop : HDESK ;

desktop := CreateDesktop('mydesk',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);


SwitchDesktop(desktop);
SetThreadDesktop(desktop);
zurück gehts u.a. so:
Delphi-Quellcode:
var inputdesktop : HDESK ;
inputdesktop := OpenDesktop('default', 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);
      
   
SwitchDesktop(inputdesktop);
SetThreadDesktop(inputdesktop);

Wie wende ich das nun an ?
wenn ich jetzt zb bei einem button klick einen desktop erstellen will und bei einem anderen button klick wechseln will, wie mache ich das ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 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