1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BLinz

Beiträge von BLinz

  • 4-Stellige PIN für EUMEX generieren

    • BLinz
    • 3. Juni 2017 um 18:47

    AutoIt ist ja hervorragend dazu geschaffen andere Programme zu steuern.

    Dein vorgehen sollte wir folgt sein (auch wenn dich jetzt ein wenig erschlägt):

    • Eumex Programm durch AutoIt starten
    • Einen Handle (Zeiger) auf das Fenster mit der PIN-Eingabe holen
    • Darüber einen Zeiger auf das Input-Control holen (das ist das Feld für die PIN)
    • An das Control die Pin senden
    • Ein Zeiger auf die Schaltfläche holen
    • Die Schaltfläche klicken
    • Dann versuchen(!!) eine Zeiger auf das Fenster der Fehlermeldung zu holen. Klappt das nicht, z.B. per MsgBox die zuletzt verwendete PIN ausgeben.

    1 bis 6 kannst du auch weglassen, nimm chesstigers Schleife und baue dort deinen Code ein.
    Aber Schritt 7 ist deine Lösung. Wenn du keinen Zeiger bekommst hast du deinen Code.

    Die Funktionen die du brauchen könntest sind WinExists und ControlgetHandle - schau dir mal die Beispiele in der Hilfe dazu an.
    Um die Namen der/des Controls etc. herauszufinden - bei der Installtion von AutoIt wurde das Tool "AutoIt Windows Info" mit installiert, das sollte dir die notwendigen Daten verraten.

    BLinz

  • Stottern unter Windows 10

    • BLinz
    • 3. Juni 2017 um 18:14

    Da ich beruflich auch bei Kunden Support leiste bin ich mal so dreist und schiebe "Vorher unter Windows 7 / 8 ging es doch noch" mal beiseite.

    Ich könnte mir gut ein Problem mit der Grafikkarte (oder dessen Treiber) oder dem Mainboard vorstellen.
    Mein privater Uralt-Rechner (>5 Jahre, dank SSD läuft das Ding aber flott) hat in 3D-Spielen z.B, ein Problem wenn der Grafikkartenspeicher zu sehr ausgelastet wird.
    Bzw. wenn die Übertakter-RAM Module zu warm werden hängt die Kiste (haben nun eigenen Lüfter, so einen Mist kaufe ich nie wieder)

    Als Geheimtipp 1 hätte ich folgenden Vorschlag:
    Ziehe mal alle USB-Geräte ab. Wirklich alle, auch USB-Dongles oder den Empfänger für Funktastatur und Maus. Test weise mal eine andere Maus anschließen und prüfen ob das Problem noch auftritt, ggf. nach Reboot.
    Bei einem Onkel spielte ein Rechner in der Firma ein halbes Jahr lang regelmäßig Amok (CPU 100%, langsam)... es war der Empfänger für die Maus (vorher wurde 2x CPU, 2x Mainboard und 1x das Netzteil getauscht und 2x neu Installiert- ohne Erfolg).
    Seit dem teste ich immer USB mit als erstes ...

    Und Geheimtipp 2: Schau mal in die Ereignisanzeige von Windows. Oft findet sich das was.

    Geheimtipp 3: Wenn die CPU zu heiß wird hättest du auch solche Symptome - CPU Lüfter läuft? Leerlauf hin oder her. Ggf. mit Software CPU-Temperatur auslesen

    Ansonsten wäre "Systematische Fehlersuche" hier mein Schlagwort, so habe ich die obigen Fehler auch gefunden:

    • Hardwarefehler ausschließen

      • Nach BIOS Updates schauen
      • Nach Mainboard googln ob es dafür bekannte Probleme gibt (immer genaues Modell!
      • dito CPU
      • dito Grafikkarte
      • Andere Grafikkarte Testen (wenn man sich eine leihen kann)
      • dito RAM
      • Einfach mal alle Kabel und Anschlüsse prüfen. GGf. mal abziehen und neu Stecken. Eventuell sitzt ein Festplattenstecker nicht richtig etc.
      • BIOS auf Werkseinstellungen setzen (Einstellungen vorher notieren) - unbedingt den Bootmodus (UEFI oder Legacy oder wie es bei deinem Rechner heißt) ggf. wieder richtig einstellen
    • Softwarefehler:

      • Windows 8 hatte den Fehler nicht? "Einspruch, Hörensagen!". Alte Festplatte nehmen, Win 8 installieren und schauen ob es wirklich nicht auftritt.
      • Wenn Win 8 es wirklich nicht hat: Das ganze mal mit einem jungfräulichen Windows 10 testen

    Das ganze in beliebiger Reihenfolge.

    Gruß,
    BLinz

  • Kleines Desktop-Spiel (ChipHunter)

    • BLinz
    • 3. Juni 2017 um 17:50

    Es auf meinem Desktop zu spielen war definitiv eine blöde Idee ... alles durcheinander ....

    Aber Lob und Anerkennung an Oscar!

  • Programm bei Mausbewegung sofort beenden

    • BLinz
    • 2. Juni 2017 um 12:16
    Zitat von Oscar

    Hast Du mein Script aus Post#6 mal ausprobiert.
    Das funktioniert nämlich viel einfacher. ^^

    Jepp, um einiges eleganter ... :Face: und funktioniert genauso gut.

    Wenn ich jetzt noch den roten Zauberschweif bekommen nehme ich dein statt mein Script :D

  • Programm bei Mausbewegung sofort beenden

    • BLinz
    • 2. Juni 2017 um 11:52

    So, hier nun eine funktionierende Version.
    Sieht unter Windows 10 auch schön flüssig aus (unter Windows 7 je nach Rechner mal smooth, mal ruckelig)

    AutoIt: MouseMove_V2.au3
    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=Icon256-32.ico
    #AutoIt3Wrapper_Outfile=MouseMove.exe
    #AutoIt3Wrapper_Res_Comment=2017 (c) Bernhard Linz
    #AutoIt3Wrapper_Res_Description=MouseMove.exe
    #AutoIt3Wrapper_Res_Fileversion=1.0.0.7
    #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
    #AutoIt3Wrapper_Res_SaveSource=y
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Timers.au3>
    AutoItSetOption("MustDeclareVars",1)
    Global $a_OriginalMousePosition = MouseGetPos()
    Global $i_Movespeed = 5
    Global $i_PixelToMove = 200
    
    
    ; Prüft ob die Maus sich auf einer unerwarteten Koordinate befindet. Wenn ja wird das Programm beendet
    Func _CheckUnexpectedMouseMove($a_ExpectedMousePositionX, $a_ExpectedMousePositionY)
    	Local $a_CurrentMousePosition = MouseGetPos()
    	If $a_ExpectedMousePositionX <> $a_CurrentMousePosition[0] Or $a_ExpectedMousePositionY <> $a_CurrentMousePosition[1] Then
    		Exit 1
    	EndIf
    EndFunc
    
    
    ; Prüfen ob uns Parameter zu Zeigergschwindigkeit per Commandline übergeben wurden
    If $CmdLine[0] > 0 Then
    	$i_Movespeed = Round($CmdLine[1],0)
    EndIf
    If $i_Movespeed > 100 Then
    	$i_Movespeed = 100
    EndIf
    If $i_Movespeed < 0 Then
    	$i_Movespeed = 0
    EndIf
    
    
    ; Wenn die Geschwindigkeit mit 0 übergeben wird bewegen wir den Mauszeiger "unsichtar"
    If $i_Movespeed = 0 Then
    	MouseMove($a_OriginalMousePosition[0] + 1, $a_OriginalMousePosition[1] + 1, 0)
    	MouseMove($a_OriginalMousePosition[0], $a_OriginalMousePosition[1], 0)
    	Exit 0
    EndIf
    
    
    ; Ok, wir sind bis hierher gekommen, also schön Sichtbar den Mauszeiger spazieren fahren:
    For $i = 0 To $i_PixelToMove Step 1
    	; 1. Mauszeiger um einen Pixel bewegen
    	MouseMove($a_OriginalMousePosition[0], $a_OriginalMousePosition[1] + $i, 0)
    	; 2. kurze Pause damit der Benutzer Zeit hat die Maus zu bewegen - und der Zeiger sich langsam bewegt
    	Sleep($i_Movespeed)
    	; 3. prüfen ob der Zeiger noch dort ist wo er sein sollte
    	_CheckUnexpectedMouseMove($a_OriginalMousePosition[0], $a_OriginalMousePosition[1] + $i)
    Next
    For $i = 0 To $i_PixelToMove Step 1
    	MouseMove($a_OriginalMousePosition[0] + $i, $a_OriginalMousePosition[1] + $i_PixelToMove, 0)
    	Sleep($i_Movespeed)
    	_CheckUnexpectedMouseMove($a_OriginalMousePosition[0] + $i, $a_OriginalMousePosition[1] + $i_PixelToMove)
    Next
    For $i = $i_PixelToMove To 0 Step -1
    	MouseMove($a_OriginalMousePosition[0] + $i_PixelToMove, $a_OriginalMousePosition[1] + $i, 0)
    	Sleep($i_Movespeed)
    	_CheckUnexpectedMouseMove($a_OriginalMousePosition[0] + $i_PixelToMove, $a_OriginalMousePosition[1] + $i)
    Next
    For $i = $i_PixelToMove To 0 Step -1
    	MouseMove($a_OriginalMousePosition[0] + $i, $a_OriginalMousePosition[1], 0)
    	Sleep($i_Movespeed)
    	_CheckUnexpectedMouseMove($a_OriginalMousePosition[0] + $i, $a_OriginalMousePosition[1])
    Next
    MouseMove($a_OriginalMousePosition[0], $a_OriginalMousePosition[1], 0)
    Exit 0
    Alles anzeigen

    Die Idee hatte ich schon vorher, hatte aber unnötige Sorgen wegen des Overkills an MausPosition Abfragen.


    Ich setz das Thema mal auf gelöst ... auch wenn der "rote Zauberschweif" des Mauszeigers noch fehlt ... (wie mache ich eigentlich einen Kreis ....)

    Dateien

    MouseMove_V2.au3 3 kB – 464 Downloads
  • Programm bei Mausbewegung sofort beenden

    • BLinz
    • 2. Juni 2017 um 10:40

    So, ich spare mir mal das einzelne Zitieren und antworte pauschal:

    Gruppenrichtlinien:
    Na klar hat das seinen Grund, alle Einwände von euch sind berechtigt. Moralisch bin ich da ganz bei euch.
    Aber ...
    Ich nutze das bei einem Kunden mit ca. 4.000 Arbeitsplätzen weltweit. Die Rechner sind alle gleich, alle haben unter anderem diese Richtlinie für den Bildschirmschoner und sogar ein Firmeneigenes Energieprofil.
    Und in diesem Netzwerk verteilt sind nun 12 Test-Arbeitsplätze auf denen automatisiert Performancetest verschiedener Anwendungen durchgeführt werden (Diverse Branchensoftware / Sharepoint usw).
    Diese Rechner stehen da irgendwo ohne Maus, Tastatur und Bildschirm - hoffentlich sicher verschlossen.

    Selbstverständlich sind das die gleichen Rechner mit den gleichen Richtlinien wie alle anderen - das soll ja auch so damit das Ergebnis realistischer ist. Die bekommen die selben Updates und Programme per Softwareverteilung wie alle anderen. Ausnahme ist eine zusätzliche Richtlinie welche eine automatische Anmeldung ausführt und das Testprogramm startet (prüfe gerade das als Dienst zu realisieren)

    Die Lösung für dieses "Problem" such ich nur ... weil ich wissen will ob es machbar ist.
    Und weil sich der Mauszeiger natürlich immer dann gerade bewegt wenn ich gerade was mit der Maus an dem einen Testrechner machen will der bei mir am Schreibtisch steht.

    ControlSend
    Muss ich noch testen aber ich meine das wird ignoriert - sprich das reicht nicht. Teste ich aber Dienstag noch mal. Aber siehe auch nächsten Abschnitt.

    Taste statt Mauszeiger:
    Müsste ich testen ... aber das ist gar nicht mein Problem. Wie man oben im Code sehen kann, kann man auch die Zeit 0 übergeben. Das schiebt er die Maus einen Pixel hin und her. Das reicht völlig und keiner merkt im Normalfall etwas.

    Die Maus bewege ich unter anderem so "großzügig" damit man es sieht. Mein lokaler Testrechner läuft den ganzen Tag mit einem eigenen Bildschirm hier. Alle Naselang kommt einer aus den Fachabteilung und schaut wie weit ich bin. Weshalb mein ganzes Testprogramm auf dem Bildschirm die ganze Zeit blitzt, blinkt und funkelt wie ein Rapper mit Goldketten und LED-Armbänder in weißen Shorts in einer Disco mit Schwarzlicht und Lasershow.
    Am liebsten würde ich das auch noch eine farbige Mausspur hinterziehen lassen die dann verblasst.

    Gruß,
    BLinz


    PS: Ich forsche gerade an dem hier: 2 Mauszeiger ... gibt es irgendwo einen Leitfaden wie das mit den ganzen DllStruct etc. genau funktioniert? Sprich wie ich mir das selbst anhand einer Information X herleite?

  • Programm bei Mausbewegung sofort beenden

    • BLinz
    • 1. Juni 2017 um 22:08
    Zitat von BLinz

    Ich bin in der Hilfe auf _WinAPI_RegisterRawInputDevices gestoßen - im Beispiel wird auf die Mausdaten zugegriffen.
    Leider reagiert das Programm auch bei MouseMove ... AutoIt ist einfach zu gut

    LOL ... ausgerechnet die Mauskoordinaten werden mit der normalen AutoIt Function ausgelesen, den ganzen Rest holen holen die woanders her.

  • Programm bei Mausbewegung sofort beenden

    • BLinz
    • 1. Juni 2017 um 22:04
    Zitat von Oscar

    Wenn Du verhindern willst, dass der Bildschirmschoner "zuschlägt", warum deaktivierst Du ihn dann nicht?

    Weil der Benutzer das nicht darf 8|

    Ist per Gruppenrichtlinie gesetzt, die Programme laufen alle nur mit den Rechten eines normalen Benutzers - und darf fast gar nichts (außer ein paar lokale Programme zu starten oder eine Citrix-Sitzung zu starten)

    Das ist jetzt kein dramatisches Problem ... ich würde es nur cool finden es gelöst zu haben.

    Ich bin in der Hilfe auf _WinAPI_RegisterRawInputDevices gestoßen - im Beispiel wird auf die Mausdaten zugegriffen.
    Leider reagiert das Programm auch bei MouseMove ... AutoIt ist einfach zu gut :thumbup:

  • Programm bei Mausbewegung sofort beenden

    • BLinz
    • 1. Juni 2017 um 17:32

    Ich brauche mal wieder eine Idee.
    Um den Energiesparmodus / Bildschirmschoner zu verhindern lasse ich regelmäßig die Maus bewegen.
    Dazu dient das folgende 2 Minuten Programm:

    AutoIt: MouseMove.au3
    #NoTrayIcon
    AutoItSetOption("MustDeclareVars",1)
    Local $a_CurrentMousePosition = MouseGetPos()
    Local $i_Movespeed = 50
    If $CmdLine[0] > 0 Then
    	$i_Movespeed = Round($CmdLine[1],0)
    EndIf
    If $i_Movespeed > 100 Then
    	$i_Movespeed = 100
    EndIf
    If $i_Movespeed < 0 Then
    	$i_Movespeed = 0
    EndIf
    If $i_Movespeed = 0 Then
    	MouseMove($a_CurrentMousePosition[0] + 1, $a_CurrentMousePosition[1] + 1, 0)
    	MouseMove($a_CurrentMousePosition[0], $a_CurrentMousePosition[1], 0)
    Else
    	MouseMove($a_CurrentMousePosition[0], $a_CurrentMousePosition[1] + 100, $i_Movespeed)
    	MouseMove($a_CurrentMousePosition[0] + 100 , $a_CurrentMousePosition[1] + 100,$i_Movespeed)
    	MouseMove($a_CurrentMousePosition[0] + 100 , $a_CurrentMousePosition[1],$i_Movespeed)
    	MouseMove($a_CurrentMousePosition[0], $a_CurrentMousePosition[1], $i_Movespeed)
    EndIf
    Exit 0
    Alles anzeigen

    Einfach per F5 starten, wenn keine Parameter übergeben werden nimmt es Default-Werte. Ihr seht den Mauszeiger bewegen.

    Ich habe das Programm kompiliert also .exe im gleichen Pfad wie mein Hauptprogramm liegen.
    Das Hauptprogramm nutzt die Funktion _Timer_GetIdleTime() aus und startet ggf. per ShellExecute das obige Programm.

    Damit meine Anwender sehen das was passiert bewege ich den Mauszeiger 100x100 Pixel im Quadrat.
    Soweit, so gut.

    Nun hätte ich gerne das sobald man die echte/reale Maus bewegt sich das Programm sofort beendet.

    Blöd ist halt das wir ja den Mauszeiger gerade selbst bewegen ... ich hab es mal in einer Schleife mit Einzelschritten probiert ...
    Ist natürlich ruckelig ... aber was Frage ich ab? Die Maus bewegt ja gerade das Programm ...
    Ich könnte versuche eine Abweichung vom geplanten Pfad zu finden ... klingt aber nach Glückssache.

    BLinz

  • Listview-Datenbank v3

    • BLinz
    • 30. Mai 2017 um 12:33

    Zufällig genau das was ich gerade brauche :)

    Beim ändern der Fenstergröße (nach rechts größer machen) schwirren bei mir Linien von der linken oberen Ecke/Seite aus durch das Bild,
    sieht aus wie der Rahmen einer Group, habe aber auf Anhieb nichts gefunden was oben links bei 0,0 beginnt

  • Brauche Ideen für Zeitmessung zwischen 2 Rechnern

    • BLinz
    • 18. Mai 2017 um 13:57
    Zitat von chip

    Ohne dir auf die Füße treten zu wollen, aber da wirst du verlieren. Alleine schon weil dir nicht bekannt ist, dass es etwas genaueres als NTP nämlich PTP gibt.

    Das habe ich natürlich schon in Erwägung gezogen *hust* aber Millisekunden ist genau genug, Micro- oder Nanosekunden müssen es nicht sein.

  • Bräuchte Hilfe bei der Umsetzung meiner IP Abfrage

    • BLinz
    • 17. Mai 2017 um 22:27
    Zitat von madd1n

    Bekomme ab und zu (nicht immer) die IP nicht via _StringBetween ausgelesen.

    Der erste Schritt für mich wäre ein Debugging ... was steht denn drin in $sPaket wenn es nicht klappt?
    Und darauf hin, da hat alpines völlig recht, musst du dir eine Fehlerbehandlung bzw. einen Plan B im Programm bauen.

    Meine fertigen Programme sind immer 3 mal so groß wie der ursprüngliche Prototyp ... Weil wich mich auf nichts verlasse. Nicht darauf das ein Array ein Array ist, nicht darauf das ein Auslesen etc. geklappt hat usw.

    Ich baue mir immer eine "Debbugging" Funktion die ich per $B_Debug = True einschalten kann ... und in meinen Programm schreibe ich ich dann jedesmal wenn ich einen Wert bekomme eine Debug Zeile dazu.

    AutoIt
    Global $b_Debug = True
    
    
    Func _PrintDebug($s_Message)
       MsgBox(0, "Debug", $s_Message)
    EndFunc
    
    
    ...
    ...
    $sPaket = _WinHttpSimpleRequest($hHoas, "GET")
    _PrintDebug($sPaket)
    Alles anzeigen

    Meistens baue ich ein EditControl in meine GUIs it ein wo das dann ständig mit läuft - interessanter und informativer als ein Fortschrittsbalken - und nicht so nervig wie MsgBoxen.
    Falls du den SciTE benutzt: mit dem Cursor auf die Variable gehen und STRG + SHIFT + D drücken! Das ist die kurze Methode

  • Brauche Ideen für Zeitmessung zwischen 2 Rechnern

    • BLinz
    • 17. Mai 2017 um 22:09
    Zitat von chip

    Nochmal die Frage, warum trägst nicht bei beiden Rechnern den gleichen Zeitserver ein. Dann sparst dir den manuellen abgleich.

    Weil mir das nicht genau genug ist. Die verschiedenen Programmpunkte brauchen teilweise nur 100 bis 500 ms, da ist mir der Messfehler beim Sekunden genauen Messen zu groß.

    Zudem agiert mein Programm als normaler Benutzer, der darf die Uhr nicht stellen. Zudem brauche ich dann eine externe 3. Stelle die auch erreichbar ist (jupp, Domänencontroller geht auch).

    Ich habe heute erfolgreich den Zeitabgleich zwischen verschiedenen Rechnern programmiert, ich habe es dabei nach der Methode des NTP Protokolls gemacht, siehe https://www.meinberg.de/german/info/ntp-packet.htm
    Damit ermittle ich die Zeitunterschiede direkt zwischen 2 Rechnern. Ich wiederhole das ganze 2 mal da der erste Durchlauf hier im Kundennetzwerk immer länger dauert als die nachfolgenden :S

    Dabei konnte ich aber auch feststellen das nach einem NTP-Abgleich beider Rechner die Abweichung im unteren, zweistelligen Millisekunden-Bereich liegt.
    Allerdings sind die Meßpunkte des Kunden (=normale PC's) über die ganze Erdkugel verteilt und nutzen dementsprechend verschiedene Zeitserver / Domänencontroller.

    Morgen steht dann "wir starten auf 2 Rechnern etwas gleichzeitig" auf dem Plan (ein Rechner steht in Hamburg, einer in Polen) bzw. Rechner 1 ist Remote mit Rechner 2 verbunden und ich messe wie lange ein Programm auf Rechner 2 braucht und was Rechner 1 dazu aus der entfernen misst (Verzögerung durch Bildaufbau etc.)


    Zitat von Bitnugger

    Owe... dann hat er gar nichts mehr zu tun... und geht uns vor Langeweile evtl. noch ein... :D:ironie:

    Immerhin werde ich dafür bezahlt es genau zu machen ;) Und ich trete mit meinen "Programmierer" Wissen gegen ein kommerzielles Produkt an welches eine 6-stellige Summe kosten sollte ... und trotzdem das ganze nicht über eine Citrix-Sitzung konnte.

  • Brauche Ideen für Zeitmessung zwischen 2 Rechnern

    • BLinz
    • 16. Mai 2017 um 14:09
    Zitat von chip

    Und was machst wenn dein Webserver gerade Schluckauf hat und nicht sofort antwortet? Mir ist auch nicht klar warum nicht direkt in Windows dann den Zeitserver einträgst sodern das, recht unnötigerweise, selbst versuchst nachzupfuschen.

    Naja, eigentlich ist der Zeitabgleich zwischen 2 Rechnern das Thema.
    Ich setze das nach obiger Grundidee (mehrmals hintereinander abfragen um den Sekundenwechsel zu finden) um,
    das Ergebnis werde ich hier posten.

    Aber ich kann den hier erst einmal auf "erledigt" setzen.

  • Oberfläche auf Veränderung prüfen

    • BLinz
    • 13. Mai 2017 um 20:21
    Zitat von *wudu*

    Ok, danke für die Info.
    Komme leider erst wieder am Montag an den Rechner. Läuft das Info Tool vom USB Stick aus, oder muss ich installieren ?
    Welche Infos sind wichtig ?

    Findest du im Startmenü bei AutoIt ("AutoIt Window Info") als x64 und x86.
    Oder direkt im Installationsordner von AutoIt:

    C:\Program Files (x86)\AutoIt3
    und dort die

    • Au3Info.exe
    • Au3Info_x64.exe

    Zieh nach dem Start das Fadenkreuz (Kasten "Finder Tool") auf den Text in dem anderen Programm.
    Wenn du im Tool dann eine anzeige bekommst, ggf. sogar schon den Text, dann kannst du die Daten direkt auslesen.
    Dann kannst du mit

    WinGetHandle dir einen Zeiger auf das Fenster des anderen Programs holen,
    ControlGetHandle dir danach einen Zeiger auf das Control holen mit dem Text (Name des Controls verrät dir das Info Tool),
    GuiCtrlRead um den Text auszulesen.

    Je nachdem was für ein Control-Typ das ist musst ggf. eine andere Frunktion zum auslesen nehmen,
    schau die in der Hilfe den Teil mit den Befehlen an die mit _GuiCtrl.... beginnen.

  • Oberfläche auf Veränderung prüfen

    • BLinz
    • 13. Mai 2017 um 18:01
    Zitat von Crusoe

    Hallo :)
    Hast du die Mal die Funktion PixelSearch angeschaut?
    Viel hast du ja nicht verraten.
    Ich vermute, dass die Änderung die du suchst auch mit einer Farbänderung einhergeht.

    PixelChecksum könnte da noch einfacher sein - das berechnet ja einen Prüfsumme aus einem angegebenen Bereich - und wenn sich dort etwas ändert, ändert sich auch die Prüfsumme.
    Nutze ich gerade für mein Projekt "App-Performance-Monitoring" um Veränderungen am Bildaufbau zu finden (bzw. ob ein bekanntes Symbol erscheint)

  • Frage zu include bei nicht kompilierung

    • BLinz
    • 11. Mai 2017 um 19:36
    Zitat von autoiter

    Hallo @BLinz, und @paddy75,

    Das mag ich so nicht als einfache Möglichkeit stehen lassen. Du kannst auch das Skript bei dir kompilieren nachdem du in der ersten Zeile folgendes eingefügt hast:

    AutoIt
    #AutoIt3Wrapper_Run_Au3Stripper=y

    Dadurch wird eine Skriptdatei inklusive aller inkludierten Dateien erzeugt.
    Dazu benötigst du nur noch die AutoIt3.exe.

    Mhh, gerade mal getestet.
    Stimmt, die "_stripped.au3" die erzeugt wird hat dann alles drin. Sieht zwar nicht mehr so schön aus, wäre aber eine Version die ohne Includes auskommt.
    Wieder etwas gelernt

  • Brauche Ideen für Zeitmessung zwischen 2 Rechnern

    • BLinz
    • 11. Mai 2017 um 19:04

    Und ich noch einmal.

    Ich habe mein Testprogramm soweit verbessert das es den Sekundenwechsel auf dem Webserver treffen sollte.
    Dazu wird in einer Schleife die Zeit ständig abgefragt bis es einen Sekundenwechsel gab,
    dann startet ein scharfer Lauf bis zum nächsten Sekundenwechsel - der im Idealfall selbst ziemlich genau eine Sekunde braucht.
    Dann gibt es eine Meldung über die ermittelten Werte:


    AutoIt: Test_Serverzeit_per_http_auf_die_Sekunde_genau.au3
    ; Test Zeitabfrage aus dem Internet
    ; 2017 BLinz
    ; Es wird der angebene Webserver in einer Schleife abgefragt bis es einen Sekundenwechsel gab,
    ; dann erfolgt der scharfe Lauf bis zum nächsten Sekundenwechsel - um eben diesen ziemlich genau zu treffen.
    ; Die "genaue" Serverzeit sollte dann bei dem letzten Zeitwert minus der durchschnittlichen Laufzeit liegen
    
    
    Global $sText = "" 		; Antwortext für MsgBox
    Global $iTimeDiff1 		; Laufzeit zwischen 2 Sekundenwechseln, im Idealfall sollten 1.000ms dabei herauskommen
    Global $iTimeDiff2 = 0	; Hier addieren wir die Laufzeit einer einzelnen Abfrage zusammen, teilen wir durch $iCounter um den Durchschnitt zu erhalten
    Global $iTemp			; Temporär - Die Laufzeit des aktuellen Durchlaufs
    Global $iCounter = 0	; Hier Zählen wir die Anzahl der notwendigen Durchläufe zwischen 2 Sekundenwechsel
    Global $aAnswer			; Array in dem die Antwort des Webservers steht. [7] sind die Sekunden
    Global $iSecond			; Hier merken wir uns die vorherige Sekunde um einen Vergleich für den Wechsel zu haben
    Global $bPreRun = True	; Wird auf False gesetzt wenn wir den ersten Sekundenwechsel gefunden haben, dann messen wir bis zum 2. Wechsel
    
    
    
    
    ; Webseite die wir als Zeitquelle nutzen
    Global $site = "www.google.com"
    ; Abfrage vorbereiten
    Global $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
    $oHTTP.Open("GET", "http://" & $site & "/", False)
    
    
    ; Abfrage senden!
    $oHTTP.Send()
    
    
    ;Antwort an allen Leerzeichen und Doppelpunkten teilen:
    $aAnswer = StringSplit($oHTTP.GetResponseHeader("Date")," :",0)
    ; In $aAnswer[7] steht die aktuelle Sekunde die wir uns merken
    $iSecond = $aAnswer[7]
    
    
    While 1
    	; Timer für den aktuellen Durchlauf starten
    	$iTemp = TimerInit()
    	; Durchlaufzähler um 1 erhöhen
    	$iCounter = $iCounter + 1
    	; neue Abfrage starten
    	$oHTTP.Send()
    	; Zeit des Durchlaufs messen (Der StringSplit braucht 1 bis 2 ms)
    	$iTimeDiff2 = $iTimeDiff2 + TimerDiff($iTemp)
    	;Antwort an allen Leerzeichen und Doppelpunkten teilen:
    	$aAnswer = StringSplit($oHTTP.GetResponseHeader("Date")," :",0)
    	; Prüfen ob die Sekunde sich geändert hat
    	If $iSecond <> $aAnswer[7] Then
    		; Ja, hat sie!
    		If $bPreRun = True Then
    			; Wir sind noch im Vorlauf, alles für den scharfen Lauf vorbereiten
    			; beim nächsten Sekundenwechsel nicht hier abiegen:
    			$bPreRun = False
    			; Timer für Gesamtzeit (sollte am Ende nahe bei 1 Sekunde liegen)
    			$iTimeDiff1 = TimerInit()
    			; Durchschnittszähler wieder auf 0
    			$iTimeDiff2 = 0
    			$iCounter = 0
    			; Die Vergleichsekunde auf den Antwortwert setzen, wir wollen ja wieder auf den Sekundenwechsel warten
    			$iSecond = $aAnswer[7]
    		Else
    			; Wir sind nicht mehr im Vorlauf und sollten den Sekundenwechsel erwischt haben
    			ExitLoop
    		EndIf
    	EndIf
    WEnd
    ; Meldung zusammenbauen
    $sText = 	"Laufzeit zwischen Sekundenwechsel: " & Round(TimerDiff($iTimeDiff1),2) & "ms" & @CRLF & _
    			"Anzahl Durchläufe: " & $iCounter & @CRLF & _
    			"Durchschnittliche Abfragezeit: " & Round($iTimeDiff2/$iCounter,2) & "ms" & @CRLF & _
    			$oHTTP.GetResponseHeader("Date") & @CRLF
    ; und ausgeben
    MsgBox(0,"Zeiten von Google", $sText)
    Alles anzeigen

    Beispielausgabe:
    [Blockierte Grafik: https://znil.net/images/0/0a/ClipCapIt-170511-220659.PNG][Blockierte Grafik: https://znil.net/images/1/12/ClipCapIt-170511-222855.PNG]

  • Brauche Ideen für Zeitmessung zwischen 2 Rechnern

    • BLinz
    • 11. Mai 2017 um 18:06

    So, erste Lösung fand ich hier:
    https://www.autoitscript.com/forum/topic/14…all-workaround/

    Da wird sich die Zeit von einem Webserver geholt.
    Mein Test-Skript:

    AutoIt: Test_Zeit_von_Webservern
    ; Zeit von Google:
    $site = "www.google.com"
    $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
    $oHTTP.Open("GET", "http://" & $site & "/", False)
    $oHTTP.Send()
    $date = $oHTTP.GetResponseHeader("Date")
    MsgBox(0,"Zeit von Google", $date)
    
    
    ; Funktioniert scheinbar mit beliebigen Webservern:
    ; Apache2 unter Ubuntu 16.04
    $site = "znil.net"
    $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
    $oHTTP.Open("GET", "http://" & $site & "/", False)
    $oHTTP.Send()
    $date = $oHTTP.GetResponseHeader("Date")
    MsgBox(0,"Zeit von znil.net", $date)
    
    
    ; IIS 8.5 unter Windows Server 2012 R2
    $site = "email.linz.email"
    $oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
    $oHTTP.Open("GET", "http://" & $site & "/", False)
    $oHTTP.Send()
    $date = $oHTTP.GetResponseHeader("Date")
    MsgBox(0,"Zeit von email.linz.email", $date)
    Alles anzeigen

    Die Laufzeit für die Abfrage kann ich ja problemlos ermitteln.
    Ich könnte also den Client und den Server gegen einen beliebigen Webserver die Abweichung zur lokalen Zeit ermitteln lassen,
    damit hätten beide eine gemeinsame Referenzquelle ... mit einem möglichen Fehler von einer Sekunde ...

    Mit mehren Abfragen hintereinander sollte ich den Wert genauer hinbekommen ... und das nächste Test-Skript ...

  • Brauche Ideen für Zeitmessung zwischen 2 Rechnern

    • BLinz
    • 11. Mai 2017 um 17:23

    Ich werde es morgen erst einmal mit der Laufzeit der Pakete versuchen,
    Ich sende ja per TCP. Sprich wenn das Senden abgeschlossen ist sind auch alle Pakete drüben angekommen - mit Bestätigung.

    Den Wert nehme ich dann als Korrektur zum lokalen Zeitvergleich (Vergleich der beiden Systemuhren),
    ich werde dann ein paar Tests laufen lassen (Anzahl der Daten, Zeitunterschiede, Versuch etwas Synchron zu starten) und mal sehen was da so rauskommt.

    Jetzt lese ich mich erst einmal mehr in das NTP-Protokoll ein und wie der Abgleich funktioniert. Die Tools sagen mir schließlich die lokale, die entfernte Zeit und die Laufzeit für die Abfrage:


    Bash
    root@webserver01:~# ntpq -p
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
     0.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
     1.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
     2.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
     3.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
     ntp.ubuntu.com  .POOL.          16 p    -   64    0    0.000    0.000   0.000
    -v.bsod.fr       193.79.237.14    2 u    -   64    1    4.658   -2.854   0.145
    -ip139.ip-5-196- 145.238.203.14   2 u    1   64    1    0.369    2.814   0.621
    -shattrath.sceen 145.238.203.14   2 u    -   64    1    0.281    1.426   0.167
    +sumatra.ordimat 213.251.128.249  2 u    -   64    1    0.357   -0.152   0.134
     yoda.dousse.eu  92.243.6.5       3 u    1   64    1    4.590   -2.825   0.020
    -pfsense.berton. 145.238.203.14   2 u    -   64    1   24.792    5.219   0.826
    *time.gambitclou 213.251.128.249  2 u    -   64    1    0.400   -0.711   0.045
    -ks3357022.kimsu 140.203.204.77   2 u    -   64    1    1.977    1.207   0.144
    +ntp-3.arkena.ne 138.96.64.10     2 u    1   64    1    4.296   -1.672   0.067
     62.210.28.176 ( 84.255.209.79    4 u    1   64    1    4.642   -0.604   0.057
    Alles anzeigen

    Das wäre was ich will ... z.B. das mein Server-Modul als Zeitserver für den Client dient und dieser die Abweichung misst.
    Vielleicht kann ich das was nachbauen - oder per AutoIt nativ die Zeitabweichung zu einem festgelegten NTP-Server messen. Gibt ja diverse Beispiele mit AutoIt die Systemzeit zu synchronisieren ...

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™