cs_Kikouman
Messages postés4Date d'inscriptionlundi 3 février 2003StatutMembreDernière intervention17 février 2004
-
11 févr. 2004 à 10:40
cs_Kikouman
Messages postés4Date d'inscriptionlundi 3 février 2003StatutMembreDernière intervention17 février 2004
-
17 févr. 2004 à 11:01
Hello à tous,
J'ai un problème (comme tous ceux qui chat icic ;) ) Je crée en ce moment une petite application (C/Win32/DirectX) qui utilise tout le bureau sauf la barre des tâches de Windows. Un truc que je fais sans prb avec la fonction "FindWindowEx" pour récupére un RECT qui me donne la taille du bureau de Windows. Seulement voilà, si quelqu'un s'amuse à déplacer la barre des tâches, ma fenêtre ne s'ajuste pas. Par exemple si à l'initialisation de mon porg la barre des tâches est en bas, si un gars la déplace ensuite à gauche, mon application laisse une bande en bas du bureau de la taille de la barre des tâches ...
J'ai essuite essayé de faire du sub-classing du bureau de Windows, mais j'ai un pote qui me dit que de sub-classer Explorer.exe et surtout l'une de ses procédures c'était un peu chaud surtout concernant la sécurité et la stabilité de mon prog et de Explorer. J'ai cherché à récupérer les infos dans le registre mais rien. Donc ma dernière, idée serait de récupérer tous les messages Windows (je ne sais pas comment faire) pour récupérer un truc du genre WM_SIZE...
Bref si quelqu'un a une idée pour que je puisse avoir un jour la possibilité d'afficher une fenêtre Windows qui adapte sa taille automatiquement en plein écran moins la taille de la barre des tâches même quand on déplace la barre des tâches, je suis prenneur !
cs_Kikouman
Messages postés4Date d'inscriptionlundi 3 février 2003StatutMembreDernière intervention17 février 2004 11 févr. 2004 à 12:39
on problème est aussi lié à la performance ... Car il est indiqué un peu partout dans les MSDN que si tu fais un hook il faut en sortir le plus vite possible, en gros ne jamais laisser un hook permanent. De l'autre côté, l'option du timer j'y est pensé mais faire un test toute les secondes par exemple ne va-t-il pas ralentir mon application ou Windows d'autant que je vais cumuler avec DirectX qui n'aime pas trop être interrompu ...
Mais merci de ton intervention.
J'ai chercher encore un peu et comme j'ai facilement le handle du SysListView32 (la fenêtre avec les icones de Windows) je vais tester un truc du genre ListView_GetVewRect avec la fonction SendMessage () passé dans ma procédure windows... Enfin je vais voir.
garslouche
Messages postés583Date d'inscriptionmardi 26 novembre 2002StatutMembreDernière intervention29 mai 20151 12 févr. 2004 à 10:36
Pour récupérer le RECT de la partie "non-barre de taches" il y a une API :
SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0)
C'est un peu mieux que ce que tu fais parcequ'il peut y avoir plusieurs barres de tâches (la barre Office par exemple).
Pour le hook je pense aussi que c'est trop lourd pour si peu. Le timer toutes les secondes me parait très suffisant, et ce n'est pas gourmand en CPU!
Si vraiment tu veux un truc nickel je crois que tu peux utiliser GetWindowThreadProcessId et AttachThreadInput pour récupérer les messages d'une fenêtre. Mais ça je ne le maitrise pas trop...
On ne force pas une curiosité, on l'éveille. .................................................Daniel Pennac
cs_Kikouman
Messages postés4Date d'inscriptionlundi 3 février 2003StatutMembreDernière intervention17 février 2004 12 févr. 2004 à 11:34
Merci beaucoup pour ces informations Mr Pennac,
Je vais essayer la fonction SystemParametersInfo() pour voir ce que ça change. Mais sans vouloir te contrarier avec mon astuce de faire FindWindow successivement de :
Progman -> SHELLDLL_DefView -> SysListView21
je pense qu'il est difficile que mon RECT ne retourne pas la bonne fenêtre. Mais bon tas technique marche surement très bien et je vais l'essayer de ce pas.
Merci aussi pour la piste GetWindowThreadProcessId (). J'ai matté les MSDN, et apparament ca revient à matter les messages dans les thread d'une autre application. Ce qui semple impliquer que mon application soit multithreadée ... et autant te dire que j'en ai fait et que je n'ai pas super envie de m'y remettre ;)
Mais bon je garde ça sous le coude.
Merci aussi pour ton avis sur le timer, et je sens que c'est ce que je vais finir par faire avec un timer à 1 sec par exemple.
- Kikouman -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Mais ça na pas fonctionné comme je le voulai... Dans le RECT je récupère juste la définition de Windows (de tout le bureau) et c'est tout, même si la barre des tâches est apparente et même si j'ai une barre Windows sur le bord de mon écran. Ma façon de faire semble plus efficace :