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

Beiträge von Andy

  • Script proplem? vllt datei pfad eingeben?

    • Andy
    • 27. September 2009 um 01:46

    Hi,
    habe dir mal das Script bissl umgebaut und Kommentare eingefügt, damit du verstehst was dort los ist^^

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MpBot by repins94", 180, 291, 297, 132)
    GUISetCursor(0)
    GUISetBkColor(0x808080)
    $Label1 = GUICtrlCreateLabel("Scripted by Repins94", 16, 256, 151, 25)
    GUICtrlSetFont(-1, 11, 800, 4, "Comic Sans MS")
    GUICtrlSetColor(-1, 0x800000)
    $Button1 = GUICtrlCreateButton("Start", 24, 24, 137, 41, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Pause", 24, 88, 137, 41, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Ende", 24, 152, 137, 41, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")

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

    HotKeySet("{F1}", "_Start")
    HotKeySet("{F3}", "_Ende")
    HotKeySet("{Pause}", "_Pause")

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

    Global $start = 0 ;Button wurde noch nicht gedrückt, global heisst, die Variable gilt auch innerhalb der Funktionen!
    Global $pause = 0 ; Pausebutton wurde noch nicht gedrückt
    Global $t ;startzeit des timers merken

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _Start() ; Startfunktion aufrufen, Variable $start wird auf 1 gesetzt
    Case $Button2
    _pause() ; Pausefunktion aufrufen, Variable $start wird auf 0 gesetzt
    Case $Button3
    _Ende()
    EndSwitch

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

    If $start = 1 Then ;wenn der startbutton gedrückt wurde und...
    If TimerDiff($t) > 500 Then ;...wenn mehr wie eine halbe sekunde seit start des timers vergangen ist dann
    Send("{2}") ;die 2 senden
    ToolTip("send {2} wird ausgeführt...")
    $t = TimerInit() ;startzeit des timers merken
    EndIf
    Else ;wenn start nicht gedrückt wurde, dann ist pause^^
    ToolTip("Zur Zeit ist Pause!!! Start drücken!")
    EndIf

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

    WEnd

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

    Func _Start()
    $start = 1
    $t = TimerInit() ;startzeit des timers merken
    ToolTip("Start wurde gedrückt")
    EndFunc ;==>_Start

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

    Func _Ende()
    MsgBox(0, 0, "Ende wurde gedrückt, in 5 Sekunden wird das Programm geschlossen!", 5)
    Exit
    EndFunc ;==>_Ende

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

    Func _pause()
    ToolTip("Pause wurde gedrückt..." & @CRLF)
    Sleep(1000)
    $start = 0
    EndFunc ;==>_pause

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

    Func Close()
    Exit
    EndFunc ;==>Close

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

    Anmerkungen von mir dazu:
    - Das Sleep() hält dein Programm für diese Zeit an, d.h. alle Maus-Klicks auf die Buttons werden in dieser Zeit nicht registriert!
    Im Prinzip ist es Geschmacksache, aber ich würde überall, wo du bestimmte Zeit "warten" musst, den Eventmodus verwenden, damit du nicht diese Klimmzüge über den Timer machen musst.
    Dem Eventmodus ist es nämlich egal, ob du in deinem Programm mit einem Sleep(23451223) einige Minuten die Programmausführung angehalten hast, er "unterbricht" gewissermassen das Sleep() und macht sofort weiter...
    - Den Call() -Befehl brauchst du nicht unbedingt, du kannst die Funktionen auch so wie in meinem Beispiel aufrufen
    - Alle Deklarationen von Variablen und Hotkeyset() und GuiOnEvent() gehören IMMER VOR DIE ENDLOSSCHLEIFE! Stehen sie dahinter, werden sie niemals abgearbeitet...
    - Der Übersicht halber gehören die Funktionen alle HINTER DIE SCHLEIFE!
    - Wenn du mit Scite arbeitest, drück ab und zu mal (bei Extras) auf TIDY AUTOIT SOURCE oder Ctrl+T , dann wird der Code automatisch "schön" gesetzt^^


    ansonsten viel Spass mit AutoIt
    ciao
    Andy

    */edit*/ Man könnte die Pausefunktion komplett wegfallenlassen....mach das Script kürzer und ändere es so, daß man die Pause mit einem 2. Tastendruck auf die Pausetaste wieder beendet^^

  • _DayIntervalToDateArray & @Hour & @min

    • Andy
    • 27. September 2009 um 00:22

    Hi,
    was ich bisher absolut nicht begriffen habe, was soll dieses "Tage=80" (in meiner Ini steht Tage=64 ).
    Ich würde die INI so aufbauen:

    Zitat

    [Task1]
    Tage=Montag,Mittwoch,Samstag, Sonntag
    Uhrzeit=00:14
    Quelle=c:\blablob\tralala\test
    Ziel=f:\sicherungen\test

    [Task2]
    Tage=Donnerstag,Sonntag
    Uhrzeit=16:22
    Quelle=c:\kasjdfhakjh\traadaalala\test
    Ziel=f:\sicherungen\skdjfh

    [Task3]
    Tage=Donnerstag,Freitag
    Uhrzeit=19:14
    Quelle=c:\kasjdfhakjh\traadaalala\test
    Ziel=f:\sicherungen\skdjfh

    Alles anzeigen


    damit kannst du erstens recht einfach die Liste in der GUI füllen und auch die Abfrage der Zeiten wird einfach:
    Das Dienstprogramm....läuft rund um die Uhr....

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    dim $Wochentag[8]=[7,"Sonntag","Montag","Dienstag","Mitttwoch","Donnerstag","Freitag","Samstag"]

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

    while 1

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

    $heutigerWochentag=$wochentag[@WDAY]
    $aktuelleUhrzeit=@hour&":"&@min

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

    $asections=IniReadSectionnames("backup.ini")

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

    for $i=1 to ubound($asections) -1
    $data=IniReadSection("backup.ini",$asections[$i])
    if stringinstr($data[1][1],$heutigerwochentag) and $data[2][1]=$aktuelleUhrzeit Then ;wenn wochentag und uhrzeit wie in der INI, dann

    ; RUN ("Backupprogramm.exe " &$data[3]&" "&$data[4]) ; backup von quelle nach ziel
    $logline=@mday&"/"&@mon&"/"&@year&" "&$heutigerwochentag&" "&$data[2][1]&" Backup von "&$data[3][1]& " nach "&$data[4][1]
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$logline' & @lf & @lf & 'Return:' & @lf & $logline) ;### Debug MSGBOX
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $logline = ' & $logline & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    filewriteline("Backup.log",$logline)
    endif
    next

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

    sleep(60000) ; eine minute warten, damit die Minutenzeit eins höher ist und die backups nicht mehrfach angestossen werden

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

    wend

    [/autoit]

    Und mit deiner GUI fütterst/änderst du nur die INI....

  • Was ist besser?

    • Andy
    • 25. September 2009 um 22:34

    Generell ist es sinnvoll, die Forensuche zu bemühen....
    z.B. so....Google sucht in AutoIt.deDa ca 80% aller Fragen im Wochenturnus wiederkehren, wirst du da sicher fündig, einfach mal die Scripte ausprobieren und gucken was die so machen....Fragen nerven nur, wenn man das Gefühl hat, dir soll einer "den Arm aus der Sonne legen" ^^

  • Hilfe mit .avi-video Wiedergabe

    • Andy
    • 25. September 2009 um 22:29

    *****Glaskugel reib...und reib....und reib........nix erscheint!***** Da wirst du wohl dein Script zeigen müssen.....

  • Speicherleck in GDI+ _GDIPlus_BitmapLockBits() ?

    • Andy
    • 25. September 2009 um 22:26
    Zitat

    Wenn die Funktion verlassen wird, werden alle lokalen Variablen gelöscht

    Das gilt für Variablen, aber nicht für Strukturen! Genau das Problem hatte ich...in einer Func Strukturen definiert, die ich im nachhinein alle "von aussen" wieder löschen musste, dabei ist mir auch diese Lockbit-Geschichte aufgefallen....Die Pointer auf die Struktur kann man ja ByRef nach aussen weitergeben, oder per Return....

  • MsBox makierbar machen

    • Andy
    • 25. September 2009 um 19:33

    Naja, das Script hast du doch schon, in der Zeit, in der du das Posting geschrieben hast, wäre die GUI (wie von dir vorgeschlagen) schon 5x gescriptet! ;)

  • etwas machen bis pixelsearch nicht mehr fündig wird

    • Andy
    • 25. September 2009 um 19:30

    Hallo,
    was ich in diesem Zusammenhang immer extrem seltsam finde: genaue Koordinaten und Pixelfarben kann man also herausfinden, selbst als Hexzahl, aber für einen Blick in die Hilfe zu "Pixelsearch" (kostet nur ein F1 ! ) und das dort angegebene Beispiel anpassen ist zu schwer? Auch die Fehlermeldung von AutoIt ist nicht zu verachten "SYNTAX ERROR" und sogar das FALSE ist markiert.....also weg damit! Und schon funktioniert das Script!
    ciao
    Andy

  • MsBox makierbar machen

    • Andy
    • 25. September 2009 um 18:45

    Window-Info ist dein Freund, lies einfach das Control der Msgbox aus....

    *EDIT* Markiert wird aber dadurch nichts.....

  • WOL / Kein Übergabe der MAC-Adresse

    • Andy
    • 25. September 2009 um 18:37

    autoBert
    diese Idee hatte ich auch schon, aber dann hat mich

    Zitat

    Wenn ich die .exe per Dateiebene direkt im Verzeichnis öffne, wird die MAC - Adresse mit übergeben und es funktioniert.

    gewundert. In deinem Vorschlag würde die WAKE.EXE im @scriptdir ausgeführt, dort würde sie die Textdatei aber bei händischem Aufrufen (im Verzeichnis \WOL\1\ ) nie finden....

  • Mac adressen wechseln

    • Andy
    • 25. September 2009 um 18:15
    Zitat

    Frage stellt sich mir, warum bzw. wozu Du es benötigst.

    Da die MAC eindeutig vergeben bzw. zuzuordnen ist, gibt es nur extrem wenige "seriöse" Fälle/Anwendungen für einen Wechsel der MAC. Auf dei Antwort bin ich jedenfalls mal gespannt^^

  • WinwaitActive - timeout kleiner als 1 Sekunde

    • Andy
    • 25. September 2009 um 13:56

    Hi,
    In der Regel setzt man den Timeout-Parameter etwas höher (einige Sekunden) um dem aufgerufenen Fenster Zeit zu geben um auf unvorhergesehene Ereignisse zu reagieren.
    Man stellt so gewissermaßen sicher, daß das Fenster auch nach einer "angemessenen Zeit" nicht aktiv ist, also ist bei der Rückgabe von 0 irgendetwas schief gegangen...
    Mit einigen Millisekunden Timeout ist der WinWaitActive-Befehl m.E. sinnlos, es soll damit ja extra so lange gewartet werden, bis das Fenster aktiv ist.
    ciao
    Andy

  • WOL / Kein Übergabe der MAC-Adresse

    • Andy
    • 25. September 2009 um 13:45

    Hi,
    öffnet die WAKE.EXE die Textdatei mit der MAC "automatisch" oder musst du die Textdatei als Parameter übergeben?

  • Speicherleck in GDI+ _GDIPlus_BitmapLockBits() ?

    • Andy
    • 25. September 2009 um 09:53
    Zitat

    Wie werden eigentlich die beiden DllStructs $tRect und $tData (_GDIPlus_BitmapLockBits) wieder freigegeben

    Naja, die Struct hat eine Größe von 40 Byte (nochmal 14 für den Header sind zusammen 54Byte), die lässt man unter den Tisch fallen. Neulich las ich von einem Compiler, welcher bei jedem Byte nicht "ordentlich freigegebenem" Speicher eine Fehlermeldung rauswirft. Bei meiner Art zu Scripten hätte ich da keinen Spass mehr^^

    Um dieses Speicher-Gepfriemel nicht auf die Spitze zu treiben wurde doch m.E. die "Garbage Collection" erfunden, alles was nach einem gewissen Zeitraum nicht zuzuordnen ist, kommt in den Müll, d.h. wird vom System freigegeben. Aber du hast schon Recht, genau so bin ich nämlich auf das Problem gekommen. Bei einigen Bytes ist das noch egal, aber wenn das Script haufenweise Speicher reserviert und nicht mehr freigibt, und dann nach 5 Minuten Windows aufgrund von Speichermangel die Ohren anlegt, dann ist das Geheule über das sog. "WinDOOF" wieder groß....dabei sitzt das größte Problem meistens zwischen den Ohren 40cm vor dem Bildschirm^^
    Jedenfalls vielen Dank für deine Info!

  • Wieso stürzt mein Script ab?

    • Andy
    • 24. September 2009 um 21:28

    Hi
    wenn ich die html-Seite von hand aufrufe bekomme ich dort im Fenster im player die Info "Problem beim Verbindungsaufbau" im Flashplayer. 2% Prozessorlast
    In der GUI sieht man nur ein kreuzchen statt des players....

    omfg^^
    nun hab ich 50% Last und keine GUI mehr, ABSTURZ^^

  • Speicherleck in GDI+ _GDIPlus_BitmapLockBits() ?

    • Andy
    • 24. September 2009 um 20:28

    Hi,
    wie HIER beschrieben, reserviert _GDIPlus_BitmapLockBits() einen "temporären" Puffer, der aber durch ein UnLock nicht mehr freigegeben wird...

    Spoiler anzeigen
    [autoit]

    #include <ScreenCapture.au3>
    _GDIPlus_Startup()

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

    for $i=1 to 10

    sleep(1000)

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

    $hbscreen1=_ScreenCapture_Capture("", 0, 0, -1, -1, False)
    $pbitmap1 = _GDIPlus_BitmapCreateFromHBITMAP($hbScreen1); reserviert auch Speicher, aber der wird von _GDIPlus_ImageDispose($pBitmap1) wieder freigegeben

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

    $BitmapData1 = _GDIPlus_BitmapLockBits($pbitmap1, 0, 0, _GDIPlus_ImageGetWidth($pbitmap1), _GDIPlus_ImageGetHeight($pbitmap1), $GDIP_ILMREAD, $GDIP_PXF24RGB) ; reserviert einen Puffer von B*H*3 Byte
    If @error Then MsgBox(0, "", "Error locking region " & @error)

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

    _GDIPlus_BitmapUnlockBits($pbitmap1, $BitmapData1) ;gibt den Puffer nicht mehr frei :(
    If @error Then MsgBox(0, "", "Error UNlocking region " & @error)

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

    sleep(5000)

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

    _WinAPI_DeleteObject($hbscreen1)
    _GDIPlus_ImageDispose($pBitmap1)

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

    next

    [/autoit]

    Einfach mal das Script starten und im Task-Manager sieht man, daß die Speicherauslastung alle 5 Sekunden um ca 5MB (22´´) steigt.
    Gibt es eine andere Möglichkeit, den Pointer auf die Bitmapdaten zu bekommen?
    ciao
    Andy

  • Einfaches Skript - läuft als 32bit nicht auf 64bit

    • Andy
    • 24. September 2009 um 15:34

    Hi,
    ich vermute, daß (logischerweise) je nach System (32/64Bit) andere System-dll´s vom Betriebssystem aufgerufen werden. Ich bin sicher, daß wenn man zu diesem Script eine 32Bit(User32 oder etwas in dieser Richtung)-dll "hinzulinken" könnte, dann würde das Script auch in einem 64Bit-System fehlerfrei laufen.
    Irgendein Aufruf irgendeiner API-Funktion schiesst quer....

  • AutoIt und 64bit

    • Andy
    • 23. September 2009 um 23:36

    Hi,
    wie Greenhorn schon schrieb, hast du von den "nativen" 64Bit nur etwas, wenn du auch die entsprechenden Funktionen verwendest, d.h.bei einem "Installationsscript" wirst du wohl weniger etliche Gigabyte Adressraum und andere spezielle "schnelle" 64-Bit-Prozessorbefehle nutzen. Da hat das 64-Bitprogramm keinerlei Vorteile gegenüber 32 Bit....
    Bei Bildbearbeitung und ähnlichem kann das schon anders aussehen. Aber da stellt sich die Frage, ob man sich so etwas mit AutoIt überhaupt antuen muss^^
    Ich drücke es mal aus meiner Sicht aus, 64Bit braucht in der "Normalo"-AutoIt-Welt zzt noch kein Mensch.
    Daher würde ich bei 32 Bit-Programmen (und Installation) bleiben. Auch mit Sicht auf die Weitergabe von Scripten.
    Wenn du wirklich mal mit einem Script mal den 4-Gig-Addressraum sprengen musst, dann kompiliere es einfach in der parallel laufenden 64-Bit-Version ;)
    ciao
    Andy

    Zitat

    und du kannst die Skripte immernoch als 32Bit Version kompillieren lassen wenn du willst.

    so siehts aus..

  • GeForce GTX260 Problem

    • Andy
    • 22. September 2009 um 20:02
    Zitat

    Fazit: Rücktritt eher unwahrscheinlich, wegen fehlender Vereinbarung der Beschaffenheit

    FALSCH! Die vereinbarte Beschaffenheit geht davon aus, daß die Grafikkarte NICHT fiept. Seit Urzeiten gibt es Grafikkarten, NIEMALS ist dort ein Fiepen in irgendeiner Art und Weise vorgekommen! Wenn die Eigenschaft des Produktes derart gravierend geändert wurde, daß das Fiepen nun Bestandteil ALLER Grafikkarten ist, dann ist diese Änderung der Eigenschaft dem Kunden mitzuteilen! ich jedenfalls habe keine Info auf Seiten des Herstellers gefunden, der als "Feature" der Grafikkarte nun ein gegenüber dem Vorgängermodell hinzugefügtes Fiepen mitteilt^^

    Aber du hast Recht...es ist müßig sich darüber Gedanken zu machen. Ähnliche Vorkommnisse haben allerdings schon etliche Firmen in den Ruin getrieben...wegen einiger "gesparter" Cent...

  • GeForce GTX260 Problem

    • Andy
    • 22. September 2009 um 19:25
    Zitat

    aber es geht ums Prinzip, findet ihr nicht auch ?

    Eine nicht Vertrags-(Vereinbarungs)gemäße Eigenschaft einer Ware stellt einen Mangel dar. Weder in deinem Kaufvertrag, noch in der Beschreibung (habe im i-Net nur eine "Installationsanweisung" gefunden) und auch nicht in der Werbung dieser Grafikkarte ist das Fiepen als eine (normale) Eigenschaft beschrieben. Im Prinzip liegt somit sogar eine arglistige Täuschung seitens des Händlers (Herstellers) vor, da diesem diese negative(!) Eigenschaft vor der Veräußerung bekannt war, er diese dir aber nicht mitgeteilt hat!

    Da die Alternative gerade bei Grafikkarten ziemlich groß ist, würde ich den Weg des unzufriedenen Kunden gehen: Karte zu eBay und ein anderes Produkt kaufen.....

  • Strings vergleichen

    • Andy
    • 22. September 2009 um 16:34

    teste das mal.....

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $hDLL = DllOpen("LevenshteinDistance.dll")

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

    $Str1 = '"Sweet About Me":Gabriella Cilmi'
    $Str2 = 'Gabriella Cilmi: "Sweet About Me"'

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

    $arr1=stringsplit($str1,""" :",0)
    _arraysort($arr1,1)
    _arraydisplay($arr1)
    $str1=_arraytostring($arr1,"")
    $arr2=stringsplit($str2,""" :",0)
    _arraysort($arr2,1)
    _arraydisplay($arr2)
    $str2=_arraytostring($arr2,"")

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

    $dist=CompTstr($str1, $str2)
    msgbox(0,0,$dist)
    DllClose($hDLL)

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

    func CompTstr($s, $t)
    local $n, $m
    $n = StringLen($s)
    $m = StringLen($t)
    if $n < $m then $n = $m
    $arDLL = DllCall($hDLL, "int", "LevenshteinDistance", "str", $s, "str", $t)
    _arraydisplay($ardll)
    If IsArray($arDLL) Then Return ($n - $arDLL[0]) / $n
    endfunc

    [/autoit]

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™