Page 1 sur 1
[..] PixelSearch sur fenetre inactive
Posté : mar. 02 août 2016 13:05
par JulienBoul
Bonjour,
Je cherche à déconnecter un logiciel qui m'est facturé au temps de communication lorsque la fenêtre n'est plus active. Hors, celui ci est protégé, Autoit Info ne me donne justement aucune info (pas de bouton identifié sur l'interface etc)

- bouton de deconnexion.jpg (5.77 Kio) Vu 1104 fois
Pouvez vous me dire s'il vaut mieux que je travaille en couleur de pixel ou en controlclic sachant qu'il ne faut pas que l'utilisateur qui est sur une autre fenêtre soit géné? Comment procéderiez vous? Je suis plus à la recherche du concept, connaissant mal les fonctionnalités d'Autoit, plutôt que du code brut.
Merci de votre curiosité et de votre aide

Re: [..] PixelSearch sur fenetre inactive
Posté : mar. 02 août 2016 18:33
par Tlem
Il faut voir si votre fenêtre est capable de recevoir des raccourcis clavier lorsqu'elle est en premier plan.
Si oui, peu-être pouvez-vous envoyer ces raccourcis directement à la fenêtre.

Re: [..] PixelSearch sur fenetre inactive
Posté : mer. 03 août 2016 09:14
par JulienBoul
Haha, trop simple, ils ont bien conçu le truc... Pas de tabulation possible et aucun raccourcis clavier logique pour quoi que ce soit. Leur logiciel est verrouillé de chez verrouillé. Il y a bien quelques tabulations possibles, mais uniquement concernant les champs de données, l'interface est lisse de toute accroche...
Sur la méthode, suis je dans le vrai? N'y a-t-il aucune autre solution "sous marine" qui permette de cliquer sur le bouton juste sous la croix de mon logiciel lorsqu'il n'est plus au premier plan? C'est rageant à la vue de la puissance d'Autoit !
Re: [..] PixelSearch sur fenetre inactive
Posté : mer. 03 août 2016 10:32
par walkson
Bonjour,
Vous avez essayé le code de Jguinch?
https://www.autoitscript.fr/forum/viewt ... =6&t=10670
Sinon j'utilise ce code pour retrouver le handle d'un programme
#include <Array.au3>$handle = WinHandFromPID
("Gadjet62.exe")If $handle[0][0] > 0 Then $handleR = $handle[1][1];_ArrayDisplay($handle)MsgBox(0,"",$handleR); Returns an array of all Windows associated with a given processFunc WinHandFromPID
($prog, $winTitle = "", $timeout = 5) Local $secs = TimerInit() $pid = ProcessExists($prog) If $pid = "" Then Exit MsgBox(0,"Erreur","programme non reconnu") Do If $winTitle = "" Then $wins = WinList() Else $wins = WinList($winTitle) EndIf For $i = UBound($wins) - 1 To 1 Step -1 ;ConsoleWrite(">>>" & $wins[$i][1] & @CR) If (WinGetProcess($wins[$i][1]) <> $pid) Or (BitAND(WinGetState($wins[$i][1]), 2) = 0) Then _ArrayDelete($wins, $i) Next $wins[0][0] = UBound($wins) - 1 If $wins[0][0] Then Return SetError(0, 0, $wins) Sleep(1000) Until TimerDiff($secs) >= $timeout * 1000 Return SetError(1, 0, $wins)EndFunc ;==>WinHandFromPID
A partir du handle, il est possible d'utiliser WinActive() ou WinSetState() etc...
Peut être une solution ?
[Edit] Je savais que j'avais un code plus simple
#include <Array.au3>#include <WinAPIProc.au3> Run("notepad.exe")$pid = ProcessWait("notepad.exe")Local $aData = _WinAPI_EnumProcessWindows($pid)_ArrayDisplay($aData, '_WinAPI_EnumProcessWindows')ControlSetText($aData[1][0], "", "Edit1", "This is some text")$iCount = ControlCommand($aData[1][0], "", "Edit1", "GetLineCount", "")MsgBox(0,"","nb ligne " & $iCount)WinKill($aData[1][0],"")
Re: [..] PixelSearch sur fenetre inactive
Posté : jeu. 04 août 2016 10:32
par JulienBoul
Bonjour walkson,
Je ne comprend pas comment exploiter le Handle d'un programme. Voici ce que ça m'affiche avec ton script ->
Code : Tout sélectionner
Row|Col 0|Col 1
[0]|1|
[1]|0x002803F4|HwndWrapper[DefaultDomain;;db9510d7-df8c-45e7-9925-47a163fb7fa2]
Pour ce qui est du script outil de Jguinche, il me donne ->
Grande déception...
Néanmoins, l'outil est vraiment top, ça permet un scan de la page et de trouver des trucs sur lesquels on serait passé sans s'en rendre compte, vraiment pratique et je l'utiliserai pour mes prochains script !
En tout cas merci de ta curiosité intellectuelle et de ton aide, ça me permettra de grandir pour mes prochains scripts
A+