Page 2 sur 2

Re: problème avec fonction send

Posté : jeu. 13 oct. 2022 11:21
par Accessvision
Oui, si j’ai bien compris la question, le focus va bien dans cette fenêtre là, est-ce que c’est bien ça ?

Re: problème avec fonction send

Posté : jeu. 13 oct. 2022 13:35
par walkson
Bonjour,
Le problème est que la fenêtre "#32770" est bloquante et donc le code attend sa fermeture. Le ControlClick() ne peut pas agir
Il faut lancer votre programme à partir d'un autre code.
Autre problème ControlClick() a besoin du handle de la fenêtre. Voici ce que je vous propose, dans un code lancé manuellement
ShellExecute("C:\777") qui devra être votre programme. "C:\777" n'existant pas dans le cas présent, une fenêtre "#32770" s'ouvrira
Vous lancez ce code depuis scite

Code : Tout sélectionner

#include <WinAPISysWin.au3>

	$hnd =  _WinAPI_FindWindow ( "#32770", "C:\777" )
	ConsoleWrite(">> " & $hnd & @CRLF)
	ControlFocus ( $hnd,"","Button1" )
	ControlClick($hnd,"","Button1")
Il récupère le handle et agit sur la fenêtre. Biensûr le code est à adapter à vos besoins

Re: problème avec fonction send

Posté : jeu. 13 oct. 2022 14:11
par Accessvision
Bonjour,
"c:\777" correspond à quel programme? car le programme qui appartient à l'extension est déjà lancé vu que c'est mon lecteur d'écran.
Ai-je mal compris?

Re: problème avec fonction send

Posté : jeu. 13 oct. 2022 15:01
par walkson
"c:\777" ne correspond à rien. Il permet d'ouvrir la fenêtre d’alerte "#32770" qui signale que le programme n'existe pas
Quand vous lancez votre programme shellexecute("include\webaccess.nvda-addon") vous avez une fenêtre d'alerte, c'est ce que j'ai reproduit avec ShellExecute("C:\777")
Il faut donc lancer d'un coté shellexecute("include\webaccess.nvda-addon") et de l'autre le code qui agit sur cette fenêtre d'alerte en modifiant "c:\777" par le titre de votre fenêtre d’alerte "#32770" (sans faire d'erreur)

Re: problème avec fonction send

Posté : jeu. 13 oct. 2022 16:18
par Accessvision
Rebonjour,
Voici le code:
#cs ----------------------------------------------------------------------------

AutoIt Version: 3.3.16.1
Author: myName

Script Function:
Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <WinAPISysWin.au3>
$hnd = _WinAPI_FindWindow ( "#32770", "Installation de l'extension" )
ConsoleWrite(">> " & $hnd & @CRLF)
ControlFocus ( $hnd,"","Button3" )
ControlClick($hnd,"","Button3")
j'ai lancé la fenêtre d'installation manuellement juste pour voir si ça marchait, et pour rester fidèle au post, ça ne marche toujours pas.
Je pense qu'à un moment il n'y aura plus de solution.

Re: problème avec fonction send

Posté : jeu. 13 oct. 2022 21:06
par walkson
Je suis étonné car j'ai testé sur différents programmes sans problème
Essayez cela
Vous compilez shellexecute("include\webaccess.nvda-addon") dans le même dossier que le code et vous nommez le EXE en BBB.exe
Lancez BBB.exe pour vérifier que webaccess.nvda-addon fonctionne puis tout fermer
Vous exécutez le code suivant

Code : Tout sélectionner

#include <WinAPISysWin.au3>
ShellExecute(@ScriptDir & "\BBB.exe")
Sleep(1000)
	$hnd =  _WinAPI_FindWindow (  "#32770", "Installation de l'extension" )
	ConsoleWrite("<< " & $hnd & @CRLF)
	MsgBox(0,"class",_WinAPI_GetClassName ( $hnd ) & @CRLF & _WinAPI_GetWindowText($hnd) ,2)

	ControlFocus ( $hnd,"","Button3" )
	Sleep(2000)
	ControlClick($hnd,"","Button3")
Dans la console vous devez avoir le handle de "#32770" et un message (MsgBox()) vous donnant le nom de la classe et le titre de la fenêtre
Si pas de résultat, essayez avec l'antivirus désactivé, le problème peut venir de là
N'oubliez pas, exe et code dans le même dossier et bien-sûr webaccess.nvda-addon en marche quand vous lancez le code

Re: problème avec fonction send

Posté : jeu. 13 oct. 2022 21:26
par walkson
Après il y a cette solution qui donne toutes les fenêtres visibles dans un tableau

Code : Tout sélectionner

#include <WinAPISysWin.au3>
#include <Array.au3>
	$array = _WinAPI_EnumWindows()
	_ArrayColInsert($array, 2)


	For $i = 1 To $array[0][0]
		$array[$i][2] = _WinAPI_GetWindowText($array[$i][0])
	Next
	_ArrayDisplay($array)
Il faut rechercher "#32770" (col 1) et le titre de la fenêtre (col 2) qui doivent être forcément là.....

Re: problème avec fonction send

Posté : ven. 14 oct. 2022 09:21
par Accessvision
Bonjour,
Quand je compile BBB.exe l'installation de webaccess.nvda-addon se lance bien.
Mais le deuxième script ne fonctionne pas.
Quand je lance le script pour lister les fenêtres actives, la fenêtre d'installation apparaît bien.
D'où peut venir le problème?

Re: problème avec fonction send

Posté : ven. 14 oct. 2022 10:08
par Accessvision
Rectification de mon message précédant, dans le code du premier message, la boite de dialogue s'ouvre bien avec la classe de la fenêtre mais n'execute pas l'action pour cliquer.

Re: problème avec fonction send

Posté : ven. 14 oct. 2022 14:18
par mikell
Je n'ai pas tout lu mais apparemment, comme walkson l'a dit la fenêtre est bloquante et empêche l'exécution de la suite du script, donc il faut l'ouvrir dans un processus différent
Exemple

; ça marche pas
Msgbox(0,"test1", "test1")
Sleep(100)
WinActivate("test1")
ControlClick("test1", "", "[CLASSNN:Button1]")

; ça marche
Run(@AutoItExe & ' /AutoIt3ExecuteLine "MsgBox(0, ''test2'', ''test2'')"')
Sleep(100)
WinActivate("test2")
ControlClick("test2", "", "[CLASSNN:Button1]")
Msgbox(0,"ok", "ok")
 

Re: problème avec fonction send

Posté : ven. 14 oct. 2022 15:04
par Accessvision
Bonjour,
Étant débutant, je n'ai pas compris votre code.
Pourriez-vous me l'expliquer?

Re: problème avec fonction send

Posté : ven. 14 oct. 2022 15:36
par mikell
Mais bien sûr Image
L'instruction "AutoIt3ExecuteLine" permet d'exécuter en ligne de commande une (et une seule) ligne de code dans un processus AutoIt distinct. Un peu comme lancer un 2ème script qui ne contiendrait qu'une ligne
Et pour lancer l'ouverture de ta fenêtre une seule ligne de code suffit...
Je peux pas tester, mais j'imagine que dans ton cas ça doit être quelquechose comme ça (à essayer)
Si ça ne marche pas, essayer de mettre le chemin complet de webaccess.nvda-addon dans le shellexecute

Code : Tout sélectionner

Run(@AutoItExe & ' /AutoIt3ExecuteLine "shellexecute(""include\webaccess.nvda-addon"")"')
Sleep(1000)
WinActivate("Installation")
ControlClick("Installation", "", "[CLASSNN:Button3]") 

Re: problème avec fonction send

Posté : ven. 14 oct. 2022 18:15
par Accessvision
Je viens de tester le code mais ça ne marche toujours pas.
La fenêtre d'installation s'ouvre mais il n'y a pas l'action de clique.
Avez-vous encore des solutions?

Re: problème avec fonction send

Posté : ven. 14 oct. 2022 22:23
par Accessvision
Bonsoir,
En alternative, j'ai vu que je pouvais convertir mon fichier nvda-addon en zip et l'extraire directement dans un répertoir.
J'ai téléchargé l'UDF 7ZipöUDF mais mon extraction ne fonctionne pas.
Voici mon code:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.16.1
 Author:         myName

 Script Function:
   Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include "7zip\7Zip.au3"
;$extract = _7ZIPExtract(0, "include\webaccess.zip", @AppDataDir & "\nvda2\addons")
$retResult = _7ZIPExtract(0, "include\webaccess.zip", @AppDataDir & "\nvda2\addons")
If @error = 0 Then
MsgBox(64, "_7ZIPExtractEx", $retResult)
Else
MsgBox(64, "_7ZIPExtractEx", "Erreur lors de l'extraction de l'archive")
EndIf
$dir = @AppDataDir & "\nvda2\webModules"
DirCreate($dir)
;msgbox(0,"test","le dossier a été créé à"&$dir)
FileCopy ("include\mbn.json", $dir)
Y a-t-il un problème dans la syntaxe?
Ou l'UDF est-elle plus mise à jour?
Merci pour la suite des propositions

Re: problème avec fonction send

Posté : sam. 15 oct. 2022 01:50
par TommyDDR
Merci de mettre votre code entre les balises :
[ code_au3] et [ /code_au3]