1

Bonjour!

Je poste encore parce que j'ai des problèmes avec l'activation des fenêtres par un programme C++ sous windows XP.
En effet, les fonctions [ SetActiveWindow ] et [ setFocus ] ne garantissent pas que windows donne le focus à une fenêtre (d'où la valeur de retour booléenne :-/ ).
Et quand windows refuse de donner le focus à une fenêtre, il fait clignoter son onglet en orange.

Je voudrais désactiver ce comportement, trouver un moyen de forcer l'activation des fenêtres (comme avec TweakUI, mais de préférence sans avoir à envoyer des messages de clics de souris aux fenêtres).
Est-ce que vous connaissez des modifs de registre qui permettent de faire cela? Des fonctions C++?

2

Je crois que la clé de registre doit exister mais je ne saurais te le garantir. (Je bidouille rarement la gestion des fenêtres) Car la protection anti vol de focus est peut-être codée assez profondément dans User32...
Et simuler des clics de souris aura à mon avis peu de chances de fonctionner. Est-ce que tu as déjà testé ?
Par contre il doit y avoir un moyen propre de faire ça (Enfin... Plus ou moins...) que tu pourrais trouver en regardant du coté des API d'accessibilité, mais sinon je connais probablement un moyen "pas propre" de procéder...
Aussi, essaye de regarder du coté des remplacements du shell Windows, voir si ils utilisent un API propre... (Et je pense que oui, mais c'est un des domaines ou je ne connais pas trop les API Windows sorry) Sinon je te donnerai la solution moins propre.

Ou bien sinon, fouille MSDN. ^^
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

3

Le problème est que ce comportement est désormais considéré comme néfaste (suite aux abus de certains applis par le passé), et donc Microsoft essaie d'empêcher les applications de faire ça. (Exemple)

Les clics de souris, déjà ça impose que ton appli tourne sur un compte admin (j'ai pas vérifié, mais si c'est pas le cas ce serait une sacré faille de sécurité, donc ça m'étonnerait), et il est possible qu'ils aient anticipé ce contournement du système aussi...
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4

Ah ouais, je savais pas que le réglage en base de registres avait disparu, mais tant mieux. (Cela dit, la gestion du focus est quand même devenue vachement bordélique grin Heureusement qu'on a pas à s'en soucier dans 99% des cas)
Enfin, il me semble que malgré ça j'ai encore croisé des problèmes de vol de focus. (Mais comme je vais pas tous les jours sous Win7 je ne vais pas l'affirmer plus que ça…)
Sinon, je viens de réfléchir pour les remplacements de shell ou alt-tab, et en fait il doit rien y avoir de spécial. Par contre y'a peut-être vraiment moyen de faire un truc avec les API d'accessibilité… (UI Automation) Et j'ai vraiment pas envie d'en lire la doc grin
(Et sinon il y a la solution plus crade, dont on ne devrait pas parler sur ce topic en fait… Parce qu'elle risquerait de fonctionner…)
Les clics marcheront peut-être pas, par contre une solution hardcore serait d'implémenter un genre de driver de périphérique HID. (Solution peut-être même la plus propre, mais pas du tout simple à implémenter)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

5

Oui, un driver HID devrait pouvoir marcher... sauf qu'il faudra que l'appli tourne en admin pour pouvoir le charger, et qu'en 64 bits faudra faire signer numériquement le driver... tongue

Enfin bon, clairement, gon33 cherche à faire un truc qui est activement combattu... je pense que dans ce cas, il vaut mieux y réfléchir à deux fois pour savoir si c'est vraiment une bonne idée hehe (difficile de juger vu qu'il n'a pas expliqué pourquoi il cherchait à forcer le focus).
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

6

(Je suppose que c'est pour la même raison que la dernière fois mais bon ^^)
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

7

Ah, j'avais pas regardé le pseudo smile

Oui dans ce cas, un driver HID serait probablement la solution "logique", vu que c'est un périphérique d'entrée après tout.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

8

Oui oui, c'est la même raison.
D'ailleurs Tobii a proposé une solution de ce type là qui a l'air assez efficace : ils affichent toutes les fenêtres à l'écran sous forme de miniatures, puis permettent de choisir avec le regard. Mais bien sur, le code est fermé...
De là à savoir si c'est une bonne idée, je ne sais pas. C'est pour ça que je teste.