Click sur un bouton récalcitrant

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
vince
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 02 déc. 2020 09:58
Status : Hors ligne

Click sur un bouton récalcitrant

#1

Message par vince »

Bonjour,

je dois installer un logiciel en mode silencieux, mais celui-ci affiche un message malgré tout.
Donc je veux utiliser AutoIt pour cliquer sur le Bouton "OK" du message, mais j'ai tout essayé et cela ne fonctionne pas.

Voici le code ci-dessous.
J'ai essayé toutes les possibilités offertes par Send, ControlSend et ControlClick sans succès.
Pour vérification, j'ai récupéré le texte du bouton avec ControlGetText et ça retourne bien "OK".
Donc il n'y a pas d'erreur au niveau des $hWnd et $hdl.
Merci d'avance pour votre aide.
Local $hWnd = WinActivate("readme.wri")
If $hWnd Then
   
   WinWaitActive("readme.wri", "", 10)

   $hdl = ControlGetHandle($hWnd,"","[CLASS:Button; INSTANCE:1]")
   ControlFocus($hWnd,"",$hdl)
   
   Send("{ESC}")
   Send("{ENTER}")
   ControlSend($hWnd, "", "", "{ENTER}")
   ControlSend($hWnd, "", "", "{ESC}")
   ControlSend($hWnd, "", $hdl, "{ENTER}")
   ControlSend($hWnd, "", $hdl, "{ESC}")

   ControlClick($hWnd,"","[TEXT:OK]")
   ControlClick($hWnd,"","[CLASS:Button; INSTANCE:1]")
   ControlClick($hWnd,"",$hdl)

   
   $sText = ControlGetText($hWnd,"",$hdl)
   MsgBox(0, "", "Le texte dans Edit1 est: " & $sText) ; Affiche "OK"
   
EndIf
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Click sur un bouton récalcitrant

#2

Message par Tlem »

Bonsoir.
Quelle est cette application mystérieuse qui ne peux être installée silencieusement ?
Avez vous essayé les commutateurs : /s ou /s ?
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é".
vince
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 02 déc. 2020 09:58
Status : Hors ligne

Re: Click sur un bouton récalcitrant

#3

Message par vince »

C'est KaleidaGraph 4.1, un vieux logiciel qui est encore utilisé à mon boulot.
J'utilise bien le commutateur /s et mis à part le message qui s'affiche, le reste de l'installation se fait bien de façon silencieuse.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Click sur un bouton récalcitrant

#4

Message par Tlem »

Bonjour.
Utilisez l'outil AutoIt Windows Info pour voir les éléments de cette fenêtre. Faites nous une capture des deux fenêtres et on vous aidera au mieux.
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é".
vince
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 02 déc. 2020 09:58
Status : Hors ligne

Re: Click sur un bouton récalcitrant

#5

Message par vince »

Bonjour,

désolé pour le délai de réponse.
Voici une capture du message récalcitrant :
msg.png
msg.png (6.42 Kio) Vu 2262 fois
Et une copie de ce qu'affiche AutoIt Windows Info :
>>>> Window <<<<
Title: C:\Program Files (x86)\KaleidaGraph 4.0\Readme.wri
Class: #32770
Position: 356, 350
Size: 562, 145
Style: 0x96C80284
ExStyle: 0x00010101
Handle: 0x00000000000A02CC

>>>> Control <<<<
Class: Button
Instance: 1
ClassnameNN: Button1
Name:
Advanced (Class): [CLASS:Button; INSTANCE:1]
ID:
Text: OK
Position: 478, 84
Size: 68, 23
ControlClick Coords: 30, 13
Style: 0x50000001
ExStyle: 0x00000000
Handle: 0x0000000000010424

>>>> Mouse <<<<
Position: 867, 473
Cursor ID: 0
Color: 0xE1E1E1

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
OK


>>>> Hidden Text <<<<
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Click sur un bouton récalcitrant

#6

Message par walkson »

Bonjour,

Code : Tout sélectionner

$hnd = WinActivate("C:\Program Files (x86)\KaleidaGraph 4.0\Readme.wri","")
Sleep(1000)
ControlClick($hnd,"","Button1")
Après si cela ne fonctionne pas, la solution serait d'attribuer l’extension WRI à NotePad et de fermer celui-ci
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Click sur un bouton récalcitrant

#7

Message par Tlem »

Bonjour.
Vous pouvez aussi essayer ces différentes possibilités :

Code : Tout sélectionner

ControlClick("[CLASS:#32770]", "","[CLASS:Button; INSTANCE:1]")

Code : Tout sélectionner

ControlClick("C:\Program Files (x86)\KaleidaGraph 4.0\Readme.wri", "","[CLASS:Button; INSTANCE:1]")

Code : Tout sélectionner

ControlClick("[REGEXPTITLE:(?i)(.*Readme.wri)]", "","[CLASS:Button; INSTANCE:1]")
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é".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Click sur un bouton récalcitrant

#8

Message par mikell »

Je pencherais pour la 1ère de ces 3 alternatives
Une fenêtre d'alerte #32770 est en général le résultat d'une manoeuvre précédente inappropriée...
Sinon il reste le très pratique WinKill("[CLASS:#32770]") :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
vince
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 02 déc. 2020 09:58
Status : Hors ligne

Re: Click sur un bouton récalcitrant

#9

Message par vince »

Bonjour,

j'ai essayé toutes vos propositions, même le kill et rien ne fonctionne sauf la solution d'attribuer l’extension WRI à NotePad.

Je trouve quand même bizarre qu'autoit ne puisse rien faire.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Click sur un bouton récalcitrant

#10

Message par walkson »

Bonjour,
Peut être avec ProcessClose ( "process" )
Avec ce code produit par scriptomatic, vous récupérez tous les process avec leur PID, une simple recherche détermine le processus qui déclenche la fenêtre

Code : Tout sélectionner

;Généré par AutoIt ScriptOMatic

$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"

$OutputTitle = ""
$Output = ""
$OutputTitle &= "Computer: " & $strComputer  & @CRLF
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Process", "WQL", _
                                          $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

If IsObj($colItems) then
   Local $Object_Flag = 0
   For $objItem In $colItems
      $Object_Flag = 1
      $Output &= "Caption: " & $objItem.Caption & @CRLF
      $Output &= "CommandLine: " & $objItem.CommandLine & @CRLF
      $Output &= "CreationClassName: " & $objItem.CreationClassName & @CRLF
      $Output &= "CreationDate: " & WMIDateStringToDate($objItem.CreationDate) & @CRLF
      $Output &= "CSCreationClassName: " & $objItem.CSCreationClassName & @CRLF
      $Output &= "CSName: " & $objItem.CSName & @CRLF
      $Output &= "Description: " & $objItem.Description & @CRLF
      $Output &= "ExecutablePath: " & $objItem.ExecutablePath & @CRLF
      $Output &= "ExecutionState: " & $objItem.ExecutionState & @CRLF
      $Output &= "Handle: " & $objItem.Handle & @CRLF
      $Output &= "HandleCount: " & $objItem.HandleCount & @CRLF
      $Output &= "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
      $Output &= "KernelModeTime: " & $objItem.KernelModeTime & @CRLF
      $Output &= "MaximumWorkingSetSize: " & $objItem.MaximumWorkingSetSize & @CRLF
      $Output &= "MinimumWorkingSetSize: " & $objItem.MinimumWorkingSetSize & @CRLF
      $Output &= "Name: " & $objItem.Name & @CRLF
      $Output &= "OSCreationClassName: " & $objItem.OSCreationClassName & @CRLF
      $Output &= "OSName: " & $objItem.OSName & @CRLF
      $Output &= "OtherOperationCount: " & $objItem.OtherOperationCount & @CRLF
      $Output &= "OtherTransferCount: " & $objItem.OtherTransferCount & @CRLF
      $Output &= "PageFaults: " & $objItem.PageFaults & @CRLF
      $Output &= "PageFileUsage: " & $objItem.PageFileUsage & @CRLF
      $Output &= "ParentProcessId: " & $objItem.ParentProcessId & @CRLF
      $Output &= "PeakPageFileUsage: " & $objItem.PeakPageFileUsage & @CRLF
      $Output &= "PeakVirtualSize: " & $objItem.PeakVirtualSize & @CRLF
      $Output &= "PeakWorkingSetSize: " & $objItem.PeakWorkingSetSize & @CRLF
      $Output &= "Priority: " & $objItem.Priority & @CRLF
      $Output &= "PrivatePageCount: " & $objItem.PrivatePageCount & @CRLF
      $Output &= "ProcessId: " & $objItem.ProcessId & @CRLF
      $Output &= "QuotaNonPagedPoolUsage: " & $objItem.QuotaNonPagedPoolUsage & @CRLF
      $Output &= "QuotaPagedPoolUsage: " & $objItem.QuotaPagedPoolUsage & @CRLF
      $Output &= "QuotaPeakNonPagedPoolUsage: " & $objItem.QuotaPeakNonPagedPoolUsage & @CRLF
      $Output &= "QuotaPeakPagedPoolUsage: " & $objItem.QuotaPeakPagedPoolUsage & @CRLF
      $Output &= "ReadOperationCount: " & $objItem.ReadOperationCount & @CRLF
      $Output &= "ReadTransferCount: " & $objItem.ReadTransferCount & @CRLF
      $Output &= "SessionId: " & $objItem.SessionId & @CRLF
      $Output &= "Status: " & $objItem.Status & @CRLF
      $Output &= "TerminationDate: " & WMIDateStringToDate($objItem.TerminationDate) & @CRLF
      $Output &= "ThreadCount: " & $objItem.ThreadCount & @CRLF
      $Output &= "UserModeTime: " & $objItem.UserModeTime & @CRLF
      $Output &= "VirtualSize: " & $objItem.VirtualSize & @CRLF
      $Output &= "WindowsVersion: " & $objItem.WindowsVersion & @CRLF
      $Output &= "WorkingSetSize: " & $objItem.WorkingSetSize & @CRLF
      $Output &= "WriteOperationCount: " & $objItem.WriteOperationCount & @CRLF
      $Output &= "WriteTransferCount: " & $objItem.WriteTransferCount & @CRLF
   Next
  If $Object_Flag = 0 Then Msgbox(1,"Sortie WMI",$OutputTitle)
   ConsoleWrite($Output)
   FileWrite(@TempDir & "\Win32_Process.TXT", $Output )
   Run(@Comspec & " /c start " & @TempDir & "\Win32_Process.TXT" )
Else
   Msgbox(0,"Sortie WMI","Aucun objets WMI trouvés pour la Classe :" & "Win32_Process" )
Endif


Func WMIDateStringToDate($dtmDate)
	Return (StringMid($dtmDate, 5, 2) & "/" & _
	StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
	& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
EndFunc


J'ai créé une extension bidon pour afficher la fenêtre "#32770", le résultat du code me donne
Caption: rundll32.exe
CommandLine: "C:\Windows\system32\rundll32.exe" C:\Windows\system32\shell32.dll,OpenAs_RunDLL C:\Users\PC\Desktop\Nouveau document texte.popo
CreationClassName: Win32_Process
CreationDate: 12/17/2020 17:51:40
CSCreationClassName: Win32_ComputerSystem
Description: rundll32.exe
ExecutablePath: C:\Windows\system32\rundll32.exe
ExecutionState:
Handle: 2628
.....
Ayant le PID, je suis sûr de fermer le bon processus
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre