Avec la fonction EnumDesktops, j'obtiens facilement la liste des desktop
(bureau virtuel).
Je souhaiterai récupérer pour chacun d'eux le HDESK nombre fonctionnant
comme un
Handle vers ces bureaux. Comment puis je faire ?
J'ai essayé
EnumThreadWindows
EnumChildWindows
EnumWindows
sans succès.
"Arnaud Debaene" a écrit dans le message de news: 41a50c1b$0$32265$
@rennes wrote: > Merci de ta réponse > > Oui, j'ai vu que l'on pouvait faire ainsi, mais ça me semble étrange. > En effet, on peut créer un desktop, les énumérés, les ouvrir et les > fermer. Ces derniers points ne rendent rien de visuel. Non, ca c'est SwitchDesktop.
> Ca signifie que le fait d'ouvrir ou de fermer un desktop ne fait > qu'allouer ou désallouer un pointeur. > Le sens de cette fonction n'est pas tellement en rapport avec le nom > dans ce cas. Ben oui, c'est cohérent avec le nommage de toute l'API Windows : OpenXXX ouvre un handle sur un objet de type XXX existant : OpenFile, OpenMutex, OpenSemaphore, OpenService, OpenWindowStation, etc...
> Question subsidiaire, comment fait on pour fermer un desktop, dans la > mesure ou le closedesktop ne > fait pas cela ? Comme tous les objets Windows, un desktop est détruit quand le dernier handle qui le référence est fermé. Dans le cas des desktops, j'imagine
qu'il
y a un cas particulier, qui est que le desktop n'est pas détruit s'il est visible et actif, même si aucune application n'a de handle dessus (mais ca semble assez évident...). Si tu veux "fermer un desktop" dans le sens le rendre non visible à l'écran, il suffit de faire un SwitchDesktop vers un autre desktop (il y a *toujours* un desktop actif par WindowStation).
> D'après ce que j'ai compris, on peut associé un > desktop à un thread et dans ce cas, le kill du thread tuerai ce > desktop. Est ce bien cela ? Pas du tout. Associer un thread avec un desktop défini simplement sur quel desktop seront affichées les fenêtres créées par le thread.
D'après tes remarques, j'ai l'impression que tu n'as pas saisi un point important : un desktop est non seulement une surface d'affichage de fenêtres, c'est aussi une limite de sécurité importante dans le modèle de sécurité de Windows : En effet, le desktop défini d'une part le presse-papier, et d'autre part il permet à différentes applications d'interagir entre elles et de se "piloter" les unes les autres à coup de message de fenêtre et de hooks. C'est pour cette raison que, par exemple, WinLogon tourne dans son propre desktop, afin qu'aucune application ne puisse "jouer" avec. Il faut toujours garder cet aspect à l'esprit lorsque l'on programme avec les desktops et les WindowStation.
Arnaud MVP - VC
Merci pour toutes ces informations à la fois claires et instructives.
"Arnaud Debaene" <adebaene@club-internet.fr> a écrit dans le message de
news: 41a50c1b$0$32265$626a14ce@news.free.fr...
@rennes wrote:
> Merci de ta réponse
>
> Oui, j'ai vu que l'on pouvait faire ainsi, mais ça me semble étrange.
> En effet, on peut créer un desktop, les énumérés, les ouvrir et les
> fermer. Ces derniers points ne rendent rien de visuel.
Non, ca c'est SwitchDesktop.
> Ca signifie que le fait d'ouvrir ou de fermer un desktop ne fait
> qu'allouer ou désallouer un pointeur.
> Le sens de cette fonction n'est pas tellement en rapport avec le nom
> dans ce cas.
Ben oui, c'est cohérent avec le nommage de toute l'API Windows : OpenXXX
ouvre un handle sur un objet de type XXX existant : OpenFile, OpenMutex,
OpenSemaphore, OpenService, OpenWindowStation, etc...
> Question subsidiaire, comment fait on pour fermer un desktop, dans la
> mesure ou le closedesktop ne
> fait pas cela ?
Comme tous les objets Windows, un desktop est détruit quand le dernier
handle qui le référence est fermé. Dans le cas des desktops, j'imagine
qu'il
y a un cas particulier, qui est que le desktop n'est pas détruit s'il est
visible et actif, même si aucune application n'a de handle dessus (mais ca
semble assez évident...). Si tu veux "fermer un desktop" dans le sens le
rendre non visible à l'écran, il suffit de faire un SwitchDesktop vers un
autre desktop (il y a *toujours* un desktop actif par WindowStation).
> D'après ce que j'ai compris, on peut associé un
> desktop à un thread et dans ce cas, le kill du thread tuerai ce
> desktop. Est ce bien cela ?
Pas du tout. Associer un thread avec un desktop défini simplement sur quel
desktop seront affichées les fenêtres créées par le thread.
D'après tes remarques, j'ai l'impression que tu n'as pas saisi un point
important : un desktop est non seulement une surface d'affichage de
fenêtres, c'est aussi une limite de sécurité importante dans le modèle de
sécurité de Windows : En effet, le desktop défini d'une part le
presse-papier, et d'autre part il permet à différentes applications
d'interagir entre elles et de se "piloter" les unes les autres à coup de
message de fenêtre et de hooks. C'est pour cette raison que, par exemple,
WinLogon tourne dans son propre desktop, afin qu'aucune application ne
puisse "jouer" avec. Il faut toujours garder cet aspect à l'esprit lorsque
l'on programme avec les desktops et les WindowStation.
Arnaud
MVP - VC
Merci pour toutes ces informations à la fois claires et instructives.
"Arnaud Debaene" a écrit dans le message de news: 41a50c1b$0$32265$
@rennes wrote: > Merci de ta réponse > > Oui, j'ai vu que l'on pouvait faire ainsi, mais ça me semble étrange. > En effet, on peut créer un desktop, les énumérés, les ouvrir et les > fermer. Ces derniers points ne rendent rien de visuel. Non, ca c'est SwitchDesktop.
> Ca signifie que le fait d'ouvrir ou de fermer un desktop ne fait > qu'allouer ou désallouer un pointeur. > Le sens de cette fonction n'est pas tellement en rapport avec le nom > dans ce cas. Ben oui, c'est cohérent avec le nommage de toute l'API Windows : OpenXXX ouvre un handle sur un objet de type XXX existant : OpenFile, OpenMutex, OpenSemaphore, OpenService, OpenWindowStation, etc...
> Question subsidiaire, comment fait on pour fermer un desktop, dans la > mesure ou le closedesktop ne > fait pas cela ? Comme tous les objets Windows, un desktop est détruit quand le dernier handle qui le référence est fermé. Dans le cas des desktops, j'imagine
qu'il
y a un cas particulier, qui est que le desktop n'est pas détruit s'il est visible et actif, même si aucune application n'a de handle dessus (mais ca semble assez évident...). Si tu veux "fermer un desktop" dans le sens le rendre non visible à l'écran, il suffit de faire un SwitchDesktop vers un autre desktop (il y a *toujours* un desktop actif par WindowStation).
> D'après ce que j'ai compris, on peut associé un > desktop à un thread et dans ce cas, le kill du thread tuerai ce > desktop. Est ce bien cela ? Pas du tout. Associer un thread avec un desktop défini simplement sur quel desktop seront affichées les fenêtres créées par le thread.
D'après tes remarques, j'ai l'impression que tu n'as pas saisi un point important : un desktop est non seulement une surface d'affichage de fenêtres, c'est aussi une limite de sécurité importante dans le modèle de sécurité de Windows : En effet, le desktop défini d'une part le presse-papier, et d'autre part il permet à différentes applications d'interagir entre elles et de se "piloter" les unes les autres à coup de message de fenêtre et de hooks. C'est pour cette raison que, par exemple, WinLogon tourne dans son propre desktop, afin qu'aucune application ne puisse "jouer" avec. Il faut toujours garder cet aspect à l'esprit lorsque l'on programme avec les desktops et les WindowStation.
Arnaud MVP - VC
Merci pour toutes ces informations à la fois claires et instructives.
Merci beaucoup.
"Thierry" a écrit dans le message de news:
Bonjour,
AMcD® a écrit :
>> Soit. >> >> Alors on va commencer par desktop.c, puis je vais chercher une >> solution pour poster le .ico. > > Fais simple, donne juste les codes hexa du .ico.
-- « Always look at the bright side of the life... »
Merci beaucoup.
"Thierry" <yarglah@com.invalid> a écrit dans le message de news:
XnF95AC8983A8F11pouletetcetc@212.27.42.75...
Bonjour,
AMcD® a écrit :
>> Soit.
>>
>> Alors on va commencer par desktop.c, puis je vais chercher une
>> solution pour poster le .ico.
>
> Fais simple, donne juste les codes hexa du .ico.
>> Soit. >> >> Alors on va commencer par desktop.c, puis je vais chercher une >> solution pour poster le .ico. > > Fais simple, donne juste les codes hexa du .ico.