Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Focus Fenêtre

2 réponses
Avatar
Johan MATHE
Bonjour,

En utilisant les WxWidgets, j'essaie de faire en sorte qu'une fenêtre
(ouverture de fichier en l'occurence) soit au premier plan du focus sous
windows. Le problème est que la méthode self.settopwindow ne suffit pas
car elle met la fenetre au premier plan relativement à python alors que
je veux que la fenêtre ait le focus absolu par rapport à toutes les
applications en cours sous windows (l'appel de cette fenetre est
déclenché par un socket, c'est donc une application tierce qui a le
focus à ce moment là...).

J'avais pensé à des appels système windows en important des dll système.
Qu'en pensez vous ? Une ou des idées/pointeurs ?

Merci

Johan

2 réponses

Avatar
Méta-MCI
Bonjour !

Ce problème est fréquent, et, AMHA, pas spécialement windows.

En pratique, c'est incroyable le nombre de logiciels qui ont de bonnes
raisons, pour que certaines de leurs fenêtres apparaissent au premier plan.
Dès lors, comment définir "l'ordre des priorités" ?

En pratique, j'ai deux solutions, mais pour windows uniquement.

Ces solutions sont :
- topwindow.exe un logiciel qui met une fenêtre, repérée par son titre,
au premier plan ;
- par appel de AutoItX, la version ActiveX de AutoIt, qui permet, entre
autres, de manipuler les fenêtres de windows


Cependant, je pense qu'il doit exister des possibilités similaire, en
utilisant PyWinAuto (http://www.openqa.org/pywinauto), ou en cherchant dans
les recoins de PyWin32 (http://sourceforge.net/projects/pywin32)

Tiens-nous au courant...


@-salutations

Michel Claveau
Avatar
jean-michel bain-cornu
Bonjour,
En utilisant les WxWidgets, j'essaie de faire en sorte qu'une fenêtre
(ouverture de fichier en l'occurence) soit au premier plan du focus sous
windows. Le problème est que la méthode self.settopwindow ne suffit pas
car elle met la fenetre au premier plan relativement à python alors que
je veux que la fenêtre ait le focus absolu par rapport à toutes les
applications en cours sous windows (l'appel de cette fenetre est
déclenché par un socket, c'est donc une application tierce qui a le
focus à ce moment là...).


En utilisant wx.Window.Raise(myframe) (ou myframe.Raise()) on obtient un
comportement standard qui est de faire clignoter l'icône de
l'application sur la barre des tâches si la fenêtre est masquée, et si
l'icône est visible sur la barre des tâches. On voit ça sur xp, à voir
ce que ça donne sur 2000/98.
C'est un comportement qui est considéré comme honnête, mais peut-être
cela ne te suffit-il pas ?
D'après ce que j'ai compris, l'application qui a le vrai premier plan
doit donner son autorisation pour permettre à une autre fenêtre de la
supplanter. Ce qui n'est pas fait dans toutes les applis. Donc il faut
bricoler (avec l'API ?) mais ce n'est pas considéré comme académique.
Explique à tes clients ;-) que c'est de la faute de windows...
A+
jm