[..] PixelSearch sur fenetre inactive

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

[..] PixelSearch sur fenetre inactive

#1

Message 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)
autoit info .jpg
bouton de deconnexion.jpg
bouton de deconnexion.jpg (5.77 Kio) Vu 1099 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 :-)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] PixelSearch sur fenetre inactive

#2

Message 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. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] PixelSearch sur fenetre inactive

#3

Message 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 !
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] PixelSearch sur fenetre inactive

#4

Message 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 process
Func 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],"")
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [..] PixelSearch sur fenetre inactive

#5

Message 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 ->
ScreenShot.jpg
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+
Répondre