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. misterspeed

Beiträge von misterspeed

  • Registry: Vorher, Nachher Vergleich

    • misterspeed
    • 14. August 2012 um 12:38

    Kann durchaus sein. Allerdings gilt das Limit scheinbar nicht pro Dimension, sondern pro Array. Mehr als 16.777.216 Felder gesamt sind nicht erlaubt.

    EDIT:

    Arraydisplay kann auch mehr als 65k Zeilen anzeigen:

    [autoit]


    #include <array.au3>

    [/autoit][autoit][/autoit][autoit]

    dim $aTest[80000][3]
    $aTest[79999][0]="test"

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay($aTest)

    [/autoit]
  • Registry: Vorher, Nachher Vergleich

    • misterspeed
    • 14. August 2012 um 12:29
    Zitat von Scritch

    Aber ich bekomme ja nichtmal die komplette Datei in ein Array für die Bearbeitung, da bei Arrays bei 65.530 Einträgen Schluss ist.


    Stimmt nicht. Das Limit liegt wenn ich das recht in Erinnerung habe irgendwo bei 16 Mio. pro Dimension und maximal 64 Dimensionen sind erlaubt. Man kann also theoretisch über 1 Milliarde Einträge in einem Array haben.

    [autoit]


    dim $aTest[10000000]

    [/autoit][autoit][/autoit][autoit]

    $aTest[9999999]="test"
    MsgBox(0,"",$aTest[9999999])

    [/autoit]
  • Texte formatieren

    • misterspeed
    • 14. August 2012 um 12:03

    Dafür gibt es richedit controls. Mit einem normalen Edit kommste da nicht weit.

    [autoit]


    _GUICtrlRichEdit_Create()

    [/autoit]
  • Tastatureingabe bei der Windows Aufgabenplanung

    • misterspeed
    • 14. August 2012 um 11:39

    Ahja und wenn das Script z.B. auf einem PC ausgeführt werden soll auf dem zwar Benutzer angemeldet, aber nicht aktiv verbunden sind, also kein Desktop angezeigt wird (getrennte Remoteverbindung z.B. oder gesperrter Computer), dann greifen send und click Befehle bzw. alle Interaktionen mit Fenstern auch nicht.

  • Tastatureingabe bei der Windows Aufgabenplanung

    • misterspeed
    • 13. August 2012 um 18:23

    Joar hab ich wohl übersehn, da dein script ja unformatiert angezeigt wird. Anderer Browser und aktiviertes javascript hilft btw. damit der Autoit Tag funktioniert.
    Die send Befehle haben soweit ich weiß alle eins gemeinsam, das Fenster bzw das Control müssen bei Tastaturbefehlen den Focus haben (winactivate, winwaitactive, controlfocus usw. helfen da...), kann man auch in der Hilfe von controlsend nachlesen.

    Außerdem muss das Fenster auch existieren, das prüft man mit winexists.

  • Tastatureingabe bei der Windows Aufgabenplanung

    • misterspeed
    • 13. August 2012 um 18:05

    Weil du das falsch machst? Du sendest ALT machst ne Pause und sendest T. Was passiert wenn du das von Hand machst? ALT drücken loslassen, 2 Sekunden warten und T drücken... da passiert dann eben nix. :P

    Wie man Tastenkombinationen sendet kannst du unter anderem hier nachlesen:

    http://translation.autoit.de/onlinehilfe/functions/Send.htm


    Für ALT+T wäre das also

    [autoit]


    send("!t")

    [/autoit]

    Funktioniert bei controlsend natürlich genauso.

  • Tastatureingabe bei der Windows Aufgabenplanung

    • misterspeed
    • 13. August 2012 um 17:57

    Öhm und warum willste das so umständlich machen? Tasks kann man wunderbar per cmdline anlegen, dafür braucht man keine GUI automatisierung...

    EDIT:

    Siehe hier: http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx

  • Klassichen OpenDialog ansteuern?

    • misterspeed
    • 13. August 2012 um 14:39

    Davon ab gibt es bei den meisten Programmen geschicktere Möglichkeiten um eine Datei zu öffnen. Mal versucht das Programm mit Kommandozeilenparametern zu starten?

    Die meisten Programme unterstützen zumindestens das Datei öffnen per cmdline Parameter:

    [autoit]


    $pathtofile = "C:\test.datei"
    run('"C:\test\testprogramm.exe" "' & $pathtofile & '"')

    [/autoit]

    Wirklich helfen kann man dir btw auch nicht solange du weder den Programmnamen nennst, deine bisherigen Versuche postest, noch weitergehende Infos wie z.B. das Ergebnis von au3info lieferst.

  • TCP/IP funktioniert nicht im Netzwerk

    • misterspeed
    • 12. August 2012 um 18:53

    Ohne mir das genauer anzusehn und zu testen würde ich den Fehler in erster Linie beim Router suchen. Vermutlich hast du dort kein Portforwarding der entsprechenden Ports zu den IP Adressen der Rechner im Netz eingerichtet.

    Soweit ich das sehe sind sowohl "Client" als auch "Server" jeweils Server und hören auf einem eigenen Port. Du hast also keine typische Client Server Kommunikation bei der immer der Client die Verbindung aufbaut, sondern ein P2P System bei dem jeder beteiligte eine Verbindung einleiten kann. Das bedeutet, dass der jeweilige Listening Port per Portforwarding im Router erreichbar gemacht werden muss.

    Bedeutet:

    Client IP: 192.168.1.5 -> Port 4322 muss auf Client IP weitergleietet werden
    Server IP: 192.168.1.6 -> Port 4321 muss auf Server IP weitergleietet werden


    Zusätlich muss (sofern vorhanden) die lokale Firewall an den Rechnern eine eingehende Kommunikation auf dem betreffenden Port erlauben.


    EDIT:

    Ahja deine Scripte versuchen im übrigen eine Verbindung zur eigenen IP herzustellen. Selbstverständlich muss hier die IP des Zielrechners zum connecten verwendet werden. Ansonsten funktionierts natürlich nur wenn die Scripte auf dem selben Rechner laufen und somit die selbe IP verwenden.

  • CMD-Line | Wie soll das ganze funktionieren?

    • misterspeed
    • 12. August 2012 um 16:56

    Deswegen prüft man bei der Auswertung der Parameter ja auch immer zuerst die Größe des Arrays durch $cmdline[0] (oder per ubound, kommt aufs gleiche raus) und spricht die Arrayelemente nur dann an wenn sie existieren, wie das auch wunderbar im Beispiel des ersten Posts gemacht wird. Einen wirklichen Vorteil sehe ich nicht den String $cmdlineraw zur Auswertung zu nutzen.

  • Problem beim Auslesen eines Werts mit "SteinBetween"

    • misterspeed
    • 11. August 2012 um 23:20

    :rofl:

  • Programm starten und Tastenkombi ausführen

    • misterspeed
    • 11. August 2012 um 18:25
    Zitat von Simulac

    Versuch mal statt Run(), Shellexecute

    Immer wieder erstaunlich wie es zu diesem Tipp kommen kann. Erstmal klappt der Programmstart laut lizard ja, also kann sein Problem auch nix mit dem Startaufruf der exe Datei zu tun haben. Zum zweiten ist shellexecute kein deut besser als run, der Hauptunterschied zwischen beiden Funktionen:

    Shellexecute öffnet eine beliebige Datei mit dem in Windows hinterlegten Standardprogramm.
    Run öffnet lediglich mit Windows ausführbare Dateien, also exe, bat, com usw.

    Will man also ein programm starten ist run völlig ausreichend. Will man hingegen eine Bilddatei mit dem Standardprogramm des Benutzers öffnen nimmt man shellexecute. Auf dem einen System wird das ganze dann mit der Windows Vorschau geöffnet, auf einem anderen System kann das Photoshop, Gimp oder was weiß ich sein. Möchte man das nicht dem Zufall überlassen ist shellexecute schonmal nicht unbedingt die erste Wahl. Letzten Endes kann man shellexecute aber natürlich auch zum öffnen von ausführbaren Dateien verwenden.


    @ lizard:

    Peethebee meinte das so:

    [autoit]


    Run ("K8Control IO.exe")
    WinWait ("K8Kontrol IO") ; wartet bis das fenster überhaupt existiert
    WinActivate ("K8Kontrol IO") ; aktiviert das Fenster (also bringt es in den Vordergrund)
    WinWaitActive ("K8Kontrol IO") ; wartet bis das Fenster aktiv ist
    ;Send ("{^L}") <-- dürfte btw falsch sein
    Send ("^l") ; <-- so müsste es passen
    Exit

    [/autoit]
  • Gui im Systray verstecken

    • misterspeed
    • 10. August 2012 um 21:39

    Siehe Hilfe zu traygetmsg().

    Zitat


    Rückgabewert
    Gibt das Ereignis zurück.
    Das "Ereignis", das zurückgegeben wird, ist die Control-ID des Controls, das die Nachricht sendet, oder es ist ein spezielles Ereignis (wie wenn die Maus auf das Tray-Icon klickt).
    Wenn keine Nachricht vorhanden ist, wird 0 als Ereignis zurückgegeben.
    Event IDs
    0 kein Vorgang
    Control ID die ID des Controls gibt eine Nachricht aus
    $TRAY_EVENT_PRIMARYDOWN die erste (linke) Maustaste wurde gedrückt
    $TRAY_EVENT_PRIMARYUP die erste (linke) Maustaste wurde losgelassen
    $TRAY_EVENT_SECONDARYDOWN die zweite (rechte) Maustaste wurde gedrückt
    $TRAY_EVENT_SECONDARYUP die zweite (rechte) Maustaste wurde losgelassen
    $TRAY_EVENT_PRIMARYDOUBLE die erste (linke) Maustaste wurde doppelgeklickt
    $TRAY_EVENT_SECONDARYDOUBLE die zweite (rechte) Maustaste wurde doppelgeklickt

    Alles anzeigen
  • Dienst (Service) Monitoring Tool

    • misterspeed
    • 9. August 2012 um 19:09

    Also erstmal erstellt man ein und das selbe Label nicht mehrfach, insbesondere nicht innerhalb einer Endlosschleife. Das führt nämlich in wenigen Sekunden zu tausenden übereinanderliegenden Labeln und letzten Endes zum Programmabsturz sobald das Limit an maximal erlaubten Controls erreicht wird. Dazu kommt enormes Flackern des controls.

    Wie ändert man den Inhalt eines Labels oder den meisten anderen controls richtig?

    [autoit]


    guictrlsetdata($input,"neuer Text")

    [/autoit]


    Zweitens kann die GUI natürlich niemals auf Eingaben reagieren, wenn man vor der Endlosschleife der GUI eine weitere Endlosschleife platziert.
    Stattdessen gehört die Statusabfrage in die Hauptschleife deines Scriptes. Da ein 3sekündiges sleep in der Hauptschleife zu extremem laggen der GUI führen würde musst du stattdessen einen Timer verwenden. Das ganze würde dann in etwa so ausschaun:


    Spoiler anzeigen
    [autoit]


    global $timer= timerinit()
    global $service = "wuauserv"

    [/autoit] [autoit][/autoit] [autoit]

    while 1

    [/autoit] [autoit][/autoit] [autoit]

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Start
    RunWait("net.exe start wuauserv")
    ;$Input = GUICtrlCreateLabel(" " & _RetrieveServiceState(@ComputerName, $service), 96, 32, 105, 21)
    guictrlsetdata($input," " & _RetrieveServiceState(@ComputerName, $service))
    Case $Stop
    RunWait("net.exe stop wuauserv")
    ;$Input = GUICtrlCreateLabel(" " & _RetrieveServiceState(@ComputerName, $service), 96, 32, 105, 21)
    guictrlsetdata($input," " & _RetrieveServiceState(@ComputerName, $service))
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    if timerdiff($timer) >= 3000 then
    $data = " " & _RetrieveServiceState(@ComputerName, $service)
    if $data <> guictrlread($input) then guictrlsetdata($input,$data) ; nur wenn sich überhaupt was geändert hat setzten wir den neuen Labeltext, das verhindert ein Flackern des Controls
    $timer = timerinit() ; timer muss wieder auf 0 gesetzt werden
    endif

    [/autoit] [autoit][/autoit] [autoit]

    wend

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Videolänge herausfinden

    • misterspeed
    • 8. August 2012 um 20:13

    Hatte mir das auch nur aus dem englsichen Forum kopiert. Details zu den verwendeten Objekten / Funktionen findet man btw bei MSDN. Solche sachen selbst dort zufinden ist aber auch nicht mein Ding, dafür gibts ja Gottseidank sehr begabte Menschen in diversen Foren. :)

  • Videolänge herausfinden

    • misterspeed
    • 8. August 2012 um 19:54

    Da gibt es mehrere Möglichkeiten. Man könnte z.B. den cmd Befehl "xcopy" verwenden und per processexists prüfen ob der Kopierprozess noch läuft. Sofern eine prozentuale Rückmeldung an den Benutzer gewünscht ist müsste man dann noch den stdout stream mitschneiden/auswerten, oder eben das xcopy cmd Fenster sichtbar ausführen. (bin mir jetzt nicht sicher ob xcopy den Verlauf anzeigt, denke aber schon)

    Ich selbst verwende in einem meiner Scripte die Windows Kopierfunktion inklusive dem dafür typischen Kopierdialog. Erspart mir die Arbeit den Kopierfortschritt selbst zu visualisieren. Das ganze habe ich in eine seperate helper.exe ausgelagert und prüfe dann im Hauptprogramm mit processexists ob die helper.exe noch läuft. Pfade und co. werden per cmdline Parameter an die helper.exe übergeben.


    Spoiler anzeigen
    [autoit]


    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    ;~ 4 Do not display a progress dialog box.
    ;~ 8 Give the file being operated on a new name in a move, copy, or rename operation if a file with the target name already exists.
    ;~ 16 Respond with "Yes to All" for any dialog box that is displayed.
    ;~ 64 Preserve undo information, if possible.
    ;~ 128 Perform the operation on files only if a wildcard file name (*.*) is specified.
    ;~ 256 Display a progress dialog box but do not show the file names.
    ;~ 512 Do not confirm the creation of a new directory if the operation requires one to be created.
    ;~ 1024 Do not display a user interface if an error occurs.
    ;~ 2048 Version 4.71. Do not copy the security attributes of the file.
    ;~ 4096 Only operate in the local directory. Don't operate recursively into subdirectories.
    ;~ 9182 Version 5.0. Do not copy connected files as a group. Only copy the specified files.

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _FileCopy($iFile,$oPath)
    Local $FOF_RESPOND_YES = 16
    Local $FOF_SIMPLEPROGRESS = 256
    $oShell = ObjCreate("shell.application")
    $oShell.namespace($oPath).CopyHere($iFile,$FOF_RESPOND_YES)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _FileMove($iFile,$oPath)
    Local $FOF_RESPOND_YES = 16
    Local $FOF_SIMPLEPROGRESS = 256
    $oShell = ObjCreate("shell.application")
    $oShell.namespace($oPath).MoveHere($iFile,$FOF_RESPOND_YES)
    EndFunc

    [/autoit]
  • Videolänge herausfinden

    • misterspeed
    • 7. August 2012 um 21:35

    Ich verwende dafür "Movie Thumbnailer", welches auf ffmpeg aufbaut. FLV wird angeblich supported, hab ich aber selbst nie gebraucht.

    http://moviethumbnail.sourceforge.net/

  • Videolänge herausfinden

    • misterspeed
    • 7. August 2012 um 20:30

    Reine neugierde, weil ich selbst Screen/Thumb Erstellung inklusive Upload auf einen Bilderhost (imgur) in einem meiner Programme nutze. Sofern du ebenfalls den Upload auf einem Bilderhost implementiert hast würd ich mich für Details interessieren, suche noch nach gut automatisierbaren, schnellen und zuverlässigen Alternativen zu imgur, da es dort in letzter Zeit hin und wieder zu Problemen beim Upload kam.

  • Videolänge herausfinden

    • misterspeed
    • 7. August 2012 um 19:08

    Darf man fragen was dein Programm im Detail macht? Screenshoterstellung von Videos evtl.?

  • Videolänge herausfinden

    • misterspeed
    • 7. August 2012 um 18:59

    Statt ffmpeg würde ich aber eher mediainfo verwenden.

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™