problème avec fonction send

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Accessvision
Niveau 3
Niveau 3
Messages : 42
Enregistré le : mar. 11 oct. 2022 16:14
Status : Hors ligne

Re: problème avec fonction send

#21

Message 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 ?
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: problème avec fonction send

#22

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Accessvision
Niveau 3
Niveau 3
Messages : 42
Enregistré le : mar. 11 oct. 2022 16:14
Status : Hors ligne

Re: problème avec fonction send

#23

Message 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?
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: problème avec fonction send

#24

Message 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)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Accessvision
Niveau 3
Niveau 3
Messages : 42
Enregistré le : mar. 11 oct. 2022 16:14
Status : Hors ligne

Re: problème avec fonction send

#25

Message 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.
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: problème avec fonction send

#26

Message 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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
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: problème avec fonction send

#27

Message 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à.....
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Accessvision
Niveau 3
Niveau 3
Messages : 42
Enregistré le : mar. 11 oct. 2022 16:14
Status : Hors ligne

Re: problème avec fonction send

#28

Message 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?
Accessvision
Niveau 3
Niveau 3
Messages : 42
Enregistré le : mar. 11 oct. 2022 16:14
Status : Hors ligne

Re: problème avec fonction send

#29

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: problème avec fonction send

#30

Message 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")
 
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Accessvision
Niveau 3
Niveau 3
Messages : 42
Enregistré le : mar. 11 oct. 2022 16:14
Status : Hors ligne

Re: problème avec fonction send

#31

Message par Accessvision »

Bonjour,
Étant débutant, je n'ai pas compris votre code.
Pourriez-vous me l'expliquer?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: problème avec fonction send

#32

Message 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]") 
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Accessvision
Niveau 3
Niveau 3
Messages : 42
Enregistré le : mar. 11 oct. 2022 16:14
Status : Hors ligne

Re: problème avec fonction send

#33

Message 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?
Accessvision
Niveau 3
Niveau 3
Messages : 42
Enregistré le : mar. 11 oct. 2022 16:14
Status : Hors ligne

Re: problème avec fonction send

#34

Message 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
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2086
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: problème avec fonction send

#35

Message par TommyDDR »

Merci de mettre votre code entre les balises :
[ code_au3] et [ /code_au3]
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Répondre