Page 1 sur 1

[..] Clavier visuel sur mesure

Posté : dim. 16 juin 2013 19:00
par captainfranki
Bonjour,

Je vous expose mon problème :
Suite à l'achat d'une tablette sous Windows 8 (et non pas RT), je souhaite faire une sorte de clavier visuel mais avec seulement certaines touches pour facilité l'usage de certains programmes en mode tactile.

Du coup, j'ai créer une fenêtre avec un font invisible sauf pour les contrôles, et j'ai placé cette fenêtre au premier plan en permanence.

Voici comment j'ai penser mon script :
- Le script enregistre la dernière fenêtre active
- Je clique sur un bouton de ma gui (donc ma gui à le focus)
- Le script donne le focus a la dernière fenêtres active
- le script envoie le caractère en question

Sauf que si j'appuie (par mégarde) dans la partie invisible de ma gui (au lieu d'un bouton), le focus lui est donné et donc la dernière fenêtré active c'est ma gui.
Ce qui fait que le caractère est envoyer à ma gui ...

J'ai donc essayer divers choses, qui fonctionne, mais lorsque j'appuie plusieurs fois d'affilé, la dernière fenêtre active deviens quand même ma gui :

Code : Tout sélectionner

If WinGetTitle("[ACTIVE]", "") <> "Raccourcis" Then $handle = WinGetHandle("[ACTIVE]", "")
mais aussi : ici, la fenêtre ne peux plus avoir le focus, mais les contrôles sont du coup inaccessible.

Code : Tout sélectionner

BitOR($WS_EX_TOPMOST,$WS_EX_TRANSPARENT,$WS_EX_LAYERED,$WS_EX_COMPOSITED))
Je ne sais pas si vous avez une idée ? J'aimerais empêcher ma gui de prendre le focus, mais si mes boutons ne sont plus cliquable ... C'est quand même embêtant pour un clavier visuel sur mesure x')

Dans tout les cas, je vous remercie !

Re: [..]Clavier visuel sur mesure

Posté : dim. 16 juin 2013 20:23
par mikell
Essaie avec WinList

Code : Tout sélectionner

Hotkeyset("a", "test")
While 1
Wend

Func test()
Local $var = WinList(), $n
For $i = 1 to $var[0][0] 
    If $var[$i][0] <> "" And BitAND(WinGetState($var[$i][1]), 2) Then 
       $n += 1
       If $n = 2 Then Exitloop
   EndIf
Next
MsgBox(0, $n, $var[$i][0])
Endfunc
Une fenêtre maintenue au 1er plan sera toujours la 1ère, la fenêtre active suivante toujours la 2ème