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

  • _Filewritetoline geht nur wenn neue datei erstellt wurde oO

    • misterspeed
    • 25. Februar 2012 um 22:55

    Ohne es getestet zu haben wage ich mal zu Behaupten, dass dein Fehler nicht am if...then...else liegt, was für mich sehr sinnvoll und richtig ausschaut, sondern an der Nutzung des falschen Datentyps beim Overwrite Parameter der _filewritetoline() Funktion. du übergibst hier einen String, da du die Zahl 1 in Anführungszeichen setzt. Strings haben wenn ich mich recht entsinne in Autoit immer den Integer Wert 0, was gleichbedeutend mit "nicht überschreiben" ist. Übergebe also einfach mal eine 1 ohne Anführungszeichen, dann sollte es meiner Meinung nach funktionieren.

    EDIT:

    Das fileopen() und fileclose() ist im übrigen zum einen falsch angewendet, zum anderen bei der Funktion _filewritetoline() nicht notwendig bzw nutzbar, da dies bereits intern in der Funktion erledigt wird. Fileopen macht nur Sinn wenn man filewrite() oder fileread() verwendet.

  • au3 aus exe starten ... open include problem

    • misterspeed
    • 25. Februar 2012 um 22:46

    Alternativ kann man auf das include auch verzichten wenn man die benutzten Funktionen und ggf. Konstanten aus der UDF in das jeweilige Script übernimmt. Nichts anderes macht das include ja.
    Bei umfangreicheren Scripten ist es aber wohl sinnvoller das komplette include Verzeichnis der Autoit Installation mitzuliefern.

  • Fenster nicht verlassen

    • misterspeed
    • 24. Februar 2012 um 21:57

    Für die Berietstellung eines Datenträgers und ggf. exklusiven Support (*unsure*). Könnte man jetzt auch mit der Bereitstellung einer API plus entsprechenden Support vergleichen... ^^

  • Fenster nicht verlassen

    • misterspeed
    • 24. Februar 2012 um 21:14
    Zitat von Jeahaha

    ich würde winactive mit einer 50 msec loop machen ;D


    Und ich würde an deiner Stelle zuerst den Thread lesen bevor ich Dinge vorschlage die zum einen schon vorgeschlagen wurden und zum anderen durch deutlich bessere und elegantere Vorschläge als wenig sinnvoll deklassiert wurden.


    Was das nutzen eines fremden Dienstes anbelangt würde ich behaupten, dass hier mehrere Dinge zu beachten sind:

    1. Nutzungsbedingunen lesen
    2. Kommerzielle oder Nichkommerzielle Nutzung? Oftmals darf man Dinge nur für nichtkommerzielle Zwecke frei verwenden.
    3. Frag nach, aber nicht hier sondern beim Anbieter des Dienstes (google)


    Zitat von name22

    ...irgendwie Konsequenzen haben könnte, wenn man das Verhalten eines ganz normalen Browsers emuliert.

    Grundsätzlich hast du Recht, aber man kann durch Automatisierung auch einen Zustand erreichen der bei weitem nicht mehr dem entspricht was ein einzelner Benutzer von Hand tun könnte. Somit stört man ggf. den Betrieb und verstösst gegen die Nutzungsbedingungen. Eine Vielzahl von zeitgleichen Anfragen könnte ggf. sogar eine Straftat darstellen ([D]DOS -> Computersabotage). Man muss hier also schon auch differenzieren wie und in welchem Umfang man einen Dienst nutzt. Ein weiterer Punkt ist die kommerzielle Nutzung. Ich denke nicht, dass Google damit einverstanden ist, wenn dritte an kostenlos bereitgestellten Diensten verdienen. Aber genau deshalb gibt es ja Nutzungsbedingungen die man im Zweifel lesen sollte.

  • Warten bis eine Datei vollständig kopiert wurde

    • misterspeed
    • 21. Februar 2012 um 23:16

    Na und? Schadet ja wohl nicht weitere alternative Lösungswege zu posten, welche für andere Benutzer mit ähnlichen Problemen nützlich sein könnten.

  • Internetadresse abfragen

    • misterspeed
    • 16. Februar 2012 um 20:29
    [autoit]


    InetRead()

    [/autoit]

    Liefert dir den HTML Quellcode der aufgerufenen Seite zurück, welchen du dann weiter auswerten kannst. Beispiel zur Anwendung siehe Hilfe.

  • Beendenoptionen beim Prozess, etc.?

    • misterspeed
    • 5. Februar 2012 um 15:14

    Jupp ebenfalls ein Weg, jedoch würde ich anstelle von @scriptname eher @AutoItPID verwenden, da dies eindeutig ist und nicht mit gleichnamigen Programmen oder Instanzen des Programms kollidiert.
    Das selbe gilt auch für die Prüfung im Hauptprogramm, auch hier sollte eher run benutzt werden damit man den CheckerProzess dann anhand der PID prüfen und beenden kann statt anhand des Prozess Namens.

  • Beendenoptionen beim Prozess, etc.?

    • misterspeed
    • 5. Februar 2012 um 14:18

    Das beenden per Taskmanager kann man wohl nur daran erkennen wenn man beim normalen beenden z.B. in eine Logdatei schreibt, dass das Programm ordnungsgemäß beendet wurde und dies beim nächsten Start prüft. Auf ein Beenden per Taskmanager kann man also bestenfalls beim nächsten Programmstart reagieren.

    Der Rest ist kein Problem:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("TrayMenuMode",1) ; Default tray menu items (Script Paused/Exit) will not be shown.
    $trayexit = TrayCreateItem("Mein Programm beenden")

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 625, 445, 192, 124)
    $Button1 = GUICtrlCreateButton("exit", 176, 144, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    MsgBox(0,"","exit by X")
    Exit
    Case $Button1
    MsgBox(0,"","exit by Button")
    Exit
    EndSwitch
    if TrayGetMsg()=$trayexit Then
    MsgBox(0,"","exit by Tray")
    Exit
    EndIf
    WEnd

    [/autoit]
  • Kontextmenü bei bestimmten Dateitypen erstellen

    • misterspeed
    • 3. Februar 2012 um 20:51
    Zitat von Protex

    Servous, habe das ganze eben mal ausprobiert, gibt ein kleines Prob .. als Parameter mit %1 sind eine Maximale Anzahl an Zeichen gegeben geschätzt 25 oder so wenn man nun eine Datei auf dem Desktop zb hat ist der Pfad zulange und wird nicht als Parameter Korrekt übergeben :/

    Nö da gibts keine Begrenzung, also zumindestens solange sich der Pfad noch innerhalb der normalen Windows Einschränkungen bezüglich Pfadlänge befindet. Dein Fehler ist es vermutlich lediglich, dass du die Parameter nicht in Anführungszeichen setzt und der Pfad in autoit (oder eben dem Zielprogramm) somit dann in mehrere Parameter zerteilt wird, siehe Hilfe zu cmdline aufrufen.

    So sollte ein korrekter Registry-Wert Eintrag ausschaun:

    Code
    "E:\Files\ggdgdgdgdgdg\dfgdggdg\dfgdfgdgdgd\dfgdgdgdggdgdgdg\Wav2Ac3.exe" "%1" ParameterNr2

    "%1" steht für den Dateipfad
    Parameter2 steht in meinem Fall für den Programm Modus. Ich habe 2 Kontextmenu Einträge, die jeweils einen anderen Paramaeter2 haben. Dadurch kann ich mein Script dann in 2 verschiedenen Modi starten.

  • Kontextmenü bei bestimmten Dateitypen erstellen

    • misterspeed
    • 3. Februar 2012 um 19:29

    Hier sollte alles wesentliche stehen:

    https://autoit.de/index.php?page…&amp;highlight=


    Über die MSDN Webseite findet man Unmengen an Informationen gerade auch in Bezug auf Unterordner. Selbst habe ich keine Unterordner benötigt, war mir auch zu kompliziert, da dies leider nicht ganz so simpel realisiert werden kann.

  • IE Tab URL auslesen funktioniert nicht

    • misterspeed
    • 3. Februar 2012 um 15:47

    Die Frage ist doch wozu es zwingend Tabs sein müssen. Was soll erreicht werden?

    Willst du Dinge automatisieren? Dann ist ein sichtbares Fenster ohnehin nicht erforderlich und es spielt keine Rolle wieviele Fenster vorhanden sind, da diese unsichtbar gehalten werden können und nur zu Debug Zwecken sichtbar sein sollten.
    Stören dich nur die vielen IE Prozesse? Die sind auch bei Tabbed Browsing vorhanden.

    Soll der User interagieren können? Dann kommen ebenfals multiple Fenster in Frage, das Fenster/Tab Problem kann man durch das einbetten der seperaten Fenster in eine GUI lösen, somit kannst du ein Tab Fenster simulieren, welches in Wahrheit aus mehreren eigenständigen Browserfenstern besteht. Siehe dazu die Forensuche, Begriffe wie Autoit Browser und ie embedded sollten da mehrere Beispiele liefern wie man sowas realisiert bekommt.


    Soweit ich weiß ist die IE.au3 nicht brauchbar wenn man mit Tabs arbeiten will, was wohl daran liegen dürfte, dass Tabbed Browsing in IE6 noch nicht vorhanden war.


    EDIT:

    Hier mal eine solche embedded Variante, bei der alle Tabs im 10sek Takt neugeladen werden

    https://autoit.de/index.php?page…2550#post232550

  • "Vordergrund-GUI" für vorhandene Anwendung

    • misterspeed
    • 3. Februar 2012 um 15:25

    Hmm sollte ein brauchbares Warenwirtschaftssystem nicht selbst in der Lage sein Brutto/Netto Umrechnungen zu erledigen? Das was du da vor hast klingt mit verlaub Gesagt nach ziemlicher Murkserei.

    Zitat


    4. Wie sieht es mit Pflege und Wartung aus?
    Programme von heute sind morgen meist schon ein alter Hut. Doch wer hier immer "up to date" sein will, der muss oft tief in die Tasche greifen. SelectLine Software geht auch hier einen neuen und anwenderfreundlichen Weg. In einer monatlichen Wartungspauschale sind alle Updates und Upgrades inbegriffen. Versionswechsel? Ebenfalls inklusive! Sie sind immer auf dem neuesten Stand und können Ihre Kosten kalkulieren.

    5. Kann die Software auch meine individuellen Wünsche berücksichtigen?
    Bereits mit unseren Einstiegslösungen bieten wir eine so große Funktionsvielfalt, dass wir den Bedarf unserer Kunden meist komplett abdecken. Auf der anderen Seite gibt es immer wieder notwendige Individualfunktionen, die - je nach Branche und Unternehmen - für einen reibungslosen Geschäftsbetrieb erforderlich sind. Unsere Softwarelösungen können mit Ihrem Erfolg mitwachsen. Ein Programm von SelectLine Software zu erwerben bedeutet Investitionssicherheit für viele Jahre.

    Darf man dem Glauben schenken wäre es vielleicht ratsam sich mit dem Hersteller zu unterhalten anstatt selbst etwas dazu zu schustern was das Programm derzeit nicht kann.


    Ok zurück zu deiner Frage:

    So wie ich das verstehe müsste dein Programm permanent in kurzen Intervallen das Programmfenster auf Eingaben / aktuelle Auswahl überwachen und das zuletzt aktive Control auslesen. Sollte denke ich durchaus realisierbar sein.

    pseudocode:

    [autoit]


    $win="fensterhandle des zu überwachenden programms"
    $value=""

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

    ; gui erstellung.... mit set on top wenn du es immer im vordergrund haben willst

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

    ;
    while 1
    $focus=wingetstate($win)
    if $focus = true then $value = getcontrolvalue(getfocusedcontrol()) ; value wird nur ausgelesen wenn das fenster noch den focus hat, ansonsten steht in value noch der wert der vor dem focus verlust ermittelt wurde... natürlich so nur pseudocode
    $msg=guigetmsg()
    switch $msg
    case $exit
    exit
    case $button1
    funktion1($value)
    endswitch
    sleep(20) ; kleine pause, da deine mausschubser sicher nicht so schnell klicken und tippen
    wend

    [/autoit]
  • IE Tab URL auslesen funktioniert nicht

    • misterspeed
    • 3. Februar 2012 um 14:28

    Ersetze die __ienavigate() durch _iecreate() dann funktioniert das auch wie du möchtest. Tabbed browsing ist soweit ich weiß mit der ie.au3 nicht realisierbar, da man die Tabs nicht ansprechen kann. Bei der ff.au3 gibt es die Funktion tabsetselected um den Tab zu wechseln. Wohl auch ein Grund, warum die Funktion __ienavigate nicht supported wird und stattdessen _ienavigate benutzt werden soll:


    Code
    ; Description ...: ** Unsupported version of _IENavigate (note second underscore in function name)
    ;					** Last 4 parameters insufficiently tested.
    ;					**    - Flags and Target can create new windows and new browser object - causing confusion
    ;					**    - Postdata needs SAFEARRAY and we have no way to create one
  • Benutzername beim Herunterfahren

    • misterspeed
    • 2. Februar 2012 um 16:23

    Ich würde einfach die Ereignisanzeige verwenden, dort werden Dinge wie Neustarts oder Shutdowns ausführlich dokumentiert. Desweiteren kann dann auch gleich eine Aufgabe geplant werden die ausgeführt wird bei der betreffenden Ereignis ID (unter windows 2003 musste man das glaube ich noch mit eventtriggern machen... google hilft). Ich verwende zwar Windows 2008R2, aber auch unter Windows 2003 sollten sich diese Dinge in den Logs befinden.

    Ereignis Anzeige->Windows Protokolle->System:

    [Blockierte Grafik: http://i.imgur.com/EpTzJ.png]

  • Random alles andere als Random?

    • misterspeed
    • 29. Januar 2012 um 14:50

    Joar srandom(@autoitPID) scheint schon zu reichen, die Pause im main Script ist ebenfalls unnötig.

  • Random alles andere als Random?

    • misterspeed
    • 29. Januar 2012 um 14:29

    Seltsam, vielleicht läuft dein System schon länger? Das seltsame ist auch, dass bei mir bei jeder erneuten Ausführung immer der Wert 3693 rauskommt wenn das srandom drin ist. Ist es auskommentiert kommen bei jedem Durchgang andere Werte, jedoch trotzdem identische Werte zu den anderen Threads heraus.

    Hab hier nochmal ein aktuelles Testscript, damit wir auch vom selben Script sprechen:


    main.au3

    Spoiler anzeigen
    [autoit]


    #include <Constants.au3>
    #include <array.au3>
    Global $thread[4]
    Global $line[4]

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

    $thread[1] = Run(@ScriptDir & "\stdout3.exe 1","",@SW_HIDE,$STDIN_CHILD + $STDOUT_CHILD)
    $thread[2] = Run(@ScriptDir & "\stdout3.exe 2","",@SW_HIDE,$STDIN_CHILD + $STDOUT_CHILD)
    $thread[3] = Run(@ScriptDir & "\stdout3.exe 3","",@SW_HIDE,$STDIN_CHILD + $STDOUT_CHILD)

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

    Sleep(500) ; needed to make sure all threads are ready

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

    For $i=1 to 3
    $line[$i] = StdoutRead($thread[$i])
    if StringInStr($line[$i],"thread started") Then
    ConsoleWrite($line[$i])
    StdinWrite($thread[$i],"start work")
    Sleep(300) ; <--------- makes threads running timeshifted
    EndIf
    Next

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

    ;~ ConsoleWrite(@CRLF & "------------ WAITING SOME TIME ------------" & @CRLF & @CRLF)
    ;~ Sleep(15000)

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

    $done=0
    do
    for $i = 1 to 3
    if $line[$i]=-1 then ContinueLoop
    $line[$i] = StdoutRead($thread[$i])
    if $line[$i] <> "" Then ConsoleWrite($line[$i])
    if StringInStr($line[$i],"work done") Then
    $done += 1
    $line[$i]=-1
    EndIf
    Next
    Until $done=3

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

    For $i = 1 to 3
    StdinWrite($thread[$i],"exit")
    $line[$i]=""
    Next

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

    $done = 0
    do
    For $i = 1 to 3
    if $line[$i]=-1 then ContinueLoop
    $line[$i] = StdoutRead($thread[$i])
    if $line[$i] <> "" Then ConsoleWrite($line[$i])
    if StringInStr($line[$i],"exited by master") Then
    $done += 1
    $line[$i]=-1
    EndIf
    Next
    Until $done =3

    [/autoit]

    stdout3.au3

    Spoiler anzeigen
    [autoit]


    $threadident = $cmdline[1]

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

    ConsoleWrite("thread started " & $threadident & @CRLF)

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

    do
    Sleep(100)
    until StringInStr(ConsoleRead(),"start work")

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

    worktodo()
    ConsoleWrite("work done " & $threadident & @CRLF)

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

    do
    Sleep(100)
    until StringInStr(ConsoleRead(),"exit")

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

    ConsoleWrite("exited by master " & $threadident & @CRLF)
    Sleep(1000)
    Exit

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

    Func worktodo()
    $test=timerinit()
    SRandom($test)
    Local $ergebnis=0
    for $i=1 to 10
    Sleep(1000)
    $ergebnis += $i* $ergebnis + random(1000,9999,1)
    ;$ergebnis += $i* $ergebnis + _random() ; resolves issue
    consolewrite("I am working (" & $ergebnis & ")! " & $threadident & " Timerinitvalue: " & $test & @CRLF)
    Next
    EndFunc

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

    func _random()
    Local $random = 1
    $random = Random($threadident,$threadident*2000,1)
    Return $random
    EndFunc

    [/autoit]

    Consolen Ausgabe:

    Code
    thread started 1
    thread started 2
    thread started 3
    I am working (3693)! 1 Timerinitvalue: 222403695098
    I am working (3693)! 2 Timerinitvalue: 222406602158
    I am working (3693)! 3 Timerinitvalue: 222410897938
  • Random alles andere als Random?

    • misterspeed
    • 29. Januar 2012 um 11:07

    Hmm nö mit timerinit im srandom erhalte ich wieder 3 identische Ergebnisse, selbst dann noch wenn ich eine volle Sekunde Pause zwischen den thread starts habe.
    Ich verwende im übrigen noch die Autoit Version 3.3.6.1

    Code
    thread started 1
    thread started 2
    thread started 3
    I am working (3693)! 1
    I am working (3693)! 2
    I am working (3693)! 3

    EDIT:

    Vielleicht wurde ja eine sony Variante des random Algorithmus verwendet :D

    [Blockierte Grafik: http://i.imgur.com/pZ7Cz.jpg]

  • Random alles andere als Random?

    • misterspeed
    • 28. Januar 2012 um 20:49

    Ich nehm das mal zurück, auch bei 20ms sleep plus srandom in den threads kann es noch zu identischen random Ergebnissen kommen. Etwa bei jedem 3. bis 4. Durchlauf

    Code
    thread started 1
    thread started 2
    thread started 3
    I am working (7331)! 2
    I am working (7331)! 1
    I am working (3378)! 3
  • Random alles andere als Random?

    • misterspeed
    • 28. Januar 2012 um 20:22

    Tatsache 20ms sleep in der main.au3 plus Srandom(@MSEC) in der worktodo() Funktion scheinen das Problem zu lösen.

    Nungut ein wirkliches Problem war es nie, hatte mich nur interessiert, weil ich ursprünglich die threadident Variable per Random setzen wollte und dann in der Ausgabe lauter identische Thread Antworten hatte. Dachte zuerst in der main.au3 stimmt was nicht, deswegen hab ich das dann mal zu obigem Script umgebaut um festzustellen, dass die random Funktion nicht das macht was sie eigentlich machen sollte.

    Letzten Endes aber für meine eigentlichen Scripte nicht relevant, da handelt es sich um sehr unterschiedliche Teilprogramme die auch alles andere als synchron laufen. Das Testscript sollte mir nur helfen stdin und stdout besser zu verstehen.

    Trotzdem gut zu wissen, dass man sich auf die Zufälligkeit der random Funktion nicht immer verlassen kann.

  • Random alles andere als Random?

    • misterspeed
    • 28. Januar 2012 um 19:59
    Zitat von Marsi

    Um das zu verhindern kannst du ein Sleep(100) (oder weniger. habs jetzt nicht getestet) zwischen die Run Befehle im Mainskript setzen.

    Dann läufts !

    lg
    M

    //Edit: Geteset:
    Mit Sleep(10) dazwischen haben bei mir immer 2 Skripte die gleiche Seed.
    Mit Sleep(20) haben alle eine unterschiedliche.
    --> Die Seed wird in 10ms intervallen festgelegt.

    Nope kann ich nicht ganz bestätigen, habe das sleep da eingefügt wo es sinnvollerweise sein sollte

    [autoit]


    StdinWrite($thread[$i],"start work")
    Sleep(800)

    [/autoit]

    Selbst bei 800ms erhalte ich teilweise noch 2 gleichlaufende Threads:

    Code
    thread started 1
    thread started 2
    thread started 3
    I am working (8693)! 1
    I am working (32438)! 1
    I am working (9753)! 2
    I am working (9753)! 3

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™