aide pour traduire un VBScript en autoit

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Cautex
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 05 juin 2012 18:24
Status : Hors ligne

aide pour traduire un VBScript en autoit

#1

Message par Cautex »

Bonjour,

je travaille actuellement sur l’implantation d'un système de géolocalisation via GPS avec des tablettes windows 10 . Après pas mal de recherches j'ai trouvé un VBScript qui fonctionne très bien mais que je n'arrive pas à traduire en Autoit (je bloque sur la ligne 8 et 16). Si quelqu'un peu m'aider à traduire ça serai top :)

VBScript:
Dim latlongfactory
Dim rptLong, rptLat
Dim report
Dim keepSleeping
Dim fs, f
Dim ts

Set latlongfactory = Wscript.CreateObject("LocationDisp.LatLongReportFactory", "llf_")
Set fs = Wscript.CreateObject("Scripting.FileSystemObject")

f = fs.BuildPath(CurrentDirectory, "gpsTempFile.txt")

keepSleeping = True
latlongfactory.ListenForReports(1000)

Sub llf_NewLatLongReport(report)    
    rptLong = report.Longitude
    rptLat = report.Latitude
    keepSleeping = False
End Sub

Do While keepSleeping
    Wscript.Sleep(20)
Loop

Set ts = fs.CreateTextFile(f, True)
ts.WriteLine rptLat & "," & rptLong
ts.Close

Set fs = Nothing
Set latlongfactory = Nothing
set report = Nothing
tentative de traduction mais qui ne fonctionne pas (à cause des lignes 3 et 9 je suppose):
global $latlongfactory,$rptLong,$rptLat,$report,$keepSleeping

$latlongfactory = ObjCreate("LocationDisp.LatLongReportFactory", "llf_")
if @error then exit ConsoleWrite("ObjCreate: erreur"&@error&@cr)

$keepSleeping = True
$latlongfactory.ListenForReports(1000)

func llf_NewLatLongReport($report)
    $rptLong = $report.Longitude
    $rptLat = $report.Latitude
    $keepSleeping = False
EndFunc

$timeout = TimerInit()

Do
   Sleep(20)
   if TimerDiff($timeout) > 10000 then exit ConsoleWrite("Aucun résultat gps trouvé dans le délai imparti"&@cr)
Until $keepSleeping = False

ConsoleWrite("Résultat de la position GPS - longitude="&$rptLong&" Latitude="&$rptLat&@cr)

$latlongfactory = -1
$report = -1

ConsoleWrite("Fin du script"&@cr)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: aide pour traduire un VBScript en autoit  

#2

Message par mikell »

Comme il s'agit de capter des évènements sur l'objet grâce à une fonction tu pourrais essayer ObjEvent

Code : Tout sélectionner

$latlongfactory = ObjCreate("LocationDisp.LatLongReportFactory")
ObjEvent($latlongfactory, "llf_")
etc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Cautex
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 05 juin 2012 18:24
Status : Hors ligne

Re: aide pour traduire un VBScript en autoit

#3

Message par Cautex »

Merci mikell, j'ai essayé de faire ça mais apparement je ne suis pas encore bon ...

extrait du script:
$latlongfactory = ObjCreate("LocationDisp.LatLongReportFactory", "llf_")

$objevent = ObjEvent($latlongfactory, "llf_NewLatLongReport")

$keepSleeping = True
$latlongfactory.ListenForReports(1000)

Func llf_NewLatLongReport($report)
Edit: j'ai étudié la doc sur msdn mais je ne maîtrise pas vraiment -> https://msdn.microsoft.com/en-us/librar ... s.85).aspx
en gros j'ai la réponse sous les yeux mais je n'arrive pas à l'appliquer ^^
Cautex
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 05 juin 2012 18:24
Status : Hors ligne

Re: aide pour traduire un VBScript en autoit

#4

Message par Cautex »

pour info j'ai exécuté le script ci-dessous et j'ai obtenu un résultat qui m'indique bien que la puce gps fonctionne mais je suis toujours bloqué avec le fonctionnement de l'objet "LocationDisp.LatLongReportFactory" pour réussir à récupérer la longitude et latitude ....

script:
Global $latlongfactory, $rptLong = -1, $rptLat = -1, $report, $keepSleeping

$latlongfactory = ObjCreate("LocationDisp.LatLongReportFactory","llf_" )
If @error Then Exit ConsoleWrite("ObjCreate1: erreur" & @error & @CR)

$objevent = ObjEvent($latlongfactory, "NewLatLongReport","NewLatLongReport")

$keepSleeping = True
$latlongfactory.ListenForReports(1000)

Func NewLatLongReport($report)
   ConsoleWrite("func NewLatLongReport appelée"&@cr)
   $rptLong = $report.Longitude
   $rptLat = $report.Latitude
   $keepSleeping = False
EndFunc   ;==>llf_NewLatLongReport

$timeout = TimerInit()
$statut = -1
#cs info sur les valeurs de la variable $statut
   0=Report not supported.
   1=Error.
   2=Access denied.
   3=Initializing.
   4=Running.
#ce
$ReportInterval = -1
Do
   Sleep(20)
   If $statut <> $latlongfactory.Status Then
      $statut = $latlongfactory.Status
      ConsoleWrite("timer="&int(TimerDiff($timeout))&" $statut=" & $statut & @CR)
   EndIf
   If $ReportInterval <> $latlongfactory.ReportInterval Then
      $ReportInterval = $latlongfactory.ReportInterval
      ConsoleWrite("timer="&int(TimerDiff($timeout))&" $ReportInterval=" & $ReportInterval & @CR)
   EndIf
   If TimerDiff($timeout) > 25000 Then Exit ConsoleWrite("timer="&int(TimerDiff($timeout))&" Aucun résultat gps trouvé dans le délai imparti" & @CR)
Until $keepSleeping = False
ConsoleWrite("timer="&int(TimerDiff($timeout))&" Résultat de la position GPS - longitude=" & $rptLong & " Latitude=" & $rptLat & @CR)

$latlongfactory.close
$latlongfactory = -1
$report = -1
ConsoleWrite("Fin du script" & @CR)
Résultat de fonctionnement:
>Running:(3.3.14.2):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\XXXXX\Desktop\Nouveau AutoIt v3 Script.au3"    
--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
timer=22 $statut=0
timer=22 $ReportInterval=1000
timer=5027 $statut=3
timer=9294 $statut=4
timer=25009 Aucun résultat gps trouvé dans le délai imparti
!>15:42:21 AutoIt3.exe ended.rc:60
+>15:42:21 AutoIt3Wrapper Finished.
>Exit code: 60    Time: 30.2
Cautex
Niveau 2
Niveau 2
Messages : 21
Enregistré le : mar. 05 juin 2012 18:24
Status : Hors ligne

Re: aide pour traduire un VBScript en autoit

#5

Message par Cautex »

Merci mikell, ça fonctionne :)

voici le code:
Global $latlongfactory, $rptLong = -1, $rptLat = -1, $report, $keepSleeping
$latlongfactory = ObjCreate("LocationDisp.LatLongReportFactory" )
If @error Then Exit ConsoleWrite("ObjCreate1: erreur" & @error & @CR)
$objevent = ObjEvent($latlongfactory,  "llf_","NewLatLongReport")
$keepSleeping = True
$latlongfactory.ListenForReports(1000)
Func llf_NewLatLongReport($report)
   $rptLong = $report.Longitude
   $rptLat = $report.Latitude
   $keepSleeping = False
EndFunc   ;==>llf_NewLatLongReport
$timeout = TimerInit()
Do
   Sleep(100)
   If TimerDiff($timeout) > 25000 Then Exit ConsoleWrite("timer="&int(TimerDiff($timeout))&" Aucun résultat gps trouvé dans le délai imparti" & @CR)
Until $keepSleeping = False
ConsoleWrite("timer="&int(TimerDiff($timeout))&" Résultat de la position GPS - longitude=" & $rptLong & " Latitude=" & $rptLat & @CR)
et voici le résultat :
--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
timer=12112 Résultat de la position GPS - longitude=0.12164527 Latitude=48.85230053
+>16:23:43 AutoIt3.exe ended.rc:0
+>16:23:43 AutoIt3Wrapper Finished.
>Exit code: 0    Time: 12.69
Edit: et voici la fonction pour l'intégrer dans vos scripts (ça devrait fonctionner avec n'importe quel appareil windows ayant une puce gps embarquée):
$return = _get_gps_position()
if @error then
   ConsoleWrite("erreur:"&$return&@cr)
Else
   ConsoleWrite("position gps:"&$return&@cr)
   ConsoleWrite("adresse google map:http://maps.google.com/?q="&$return&@cr)
EndIf
func _get_gps_position()
   Global $rptLong = -1, $rptLat = -1
   $latlongfactory = ObjCreate("LocationDisp.LatLongReportFactory" )
   If @error Then return SetError(1,0,"ObjCreate error")
   ObjEvent($latlongfactory,  "llf_","NewLatLongReport")
   If @error Then return SetError(1,0,"ObjEvent error")
   $latlongfactory.ListenForReports(1000)
   $timeout = TimerInit()
   Do
      Sleep(100)
      If TimerDiff($timeout) > 25000 Then return SetError(1,0,"timer="&int(TimerDiff($timeout))&" Aucun résultat gps trouvé dans le délai imparti")
   Until $rptLong <> -1
   return $rptLat&","&$rptLong
EndFunc
Func llf_NewLatLongReport($report)
   $rptLong = $report.Longitude
   $rptLat = $report.Latitude
EndFunc   ;==>llf_NewLatLongReport
Répondre