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

Beiträge von limette

  • MausMove in Schleife setzten + Abruch

    • limette
    • 31. Juli 2008 um 14:50

    Lol ! :D
    Du hast gekürzt, indem du den Step variabel gesetzt hast,
    ich hab gekürzt, indem ich auf gerade oder ungerade teste xD

    Jetzt noch kombinieren, dann ham wir's ;)

    Edit: öhm, nein eher nicht. So wird auch nur einmal bestimmt, welcher Step gewählt wird,
    du musst aber bei jedem neuen $x wieder wechseln :P
    Außerdem fehlt ein EndIf *penibel-sei* x)

  • MausMove in Schleife setzten + Abruch

    • limette
    • 31. Juli 2008 um 14:40

    Wär ja sonst auch zu einfach gewesen ;)
    Aber iwie muss das doch auch mit For-Next gehen, oder... ?

    Edit: Ich glaub ich habs: ^^

    Spoiler anzeigen
    [autoit]


    HotKeySet("{End}", "_end")

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

    For $x = 100 To 900 Step +5
    If Mod( $x, 2 ) = 0 Then
    For $y = 100 To 700 Step +5
    MouseMove( $x, $y, 1 )
    If _delete() Then ExitLoop 2
    Next
    Else
    For $y = 700 To 100 Step -5
    MouseMove( $x, $y, 1 )
    If _delete() Then ExitLoop 2
    Next
    EndIf
    Next

    Func _delete()
    ;kA was du hier brauchst
    EndFunc

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

    Func _end()
    Exit ; ==> "Ende" drücken, um das Script zu beenden
    EndFunc

    [/autoit]
  • MausMove in Schleife setzten + Abruch

    • limette
    • 31. Juli 2008 um 14:35

    Ich habs grad auch erst mit ner For-Next versucht, bis mir aufgefallen ist,
    dass er mit den Koordinaten abwechselnd steigt und fällt... :p

    Mit der While-Schleife gut gelöst, es fehlt bloß noch die Abfrage auf _delete(),
    Also sowas wir If _delete() Then ExitLoop 2 / _end() o.ä.

    Außerdem geht deine Schleife immer weiter durch und hört nicht auf...
    Er hält nur die max. $y, aber nicht die max. $x ein ;)

    Wie wärs mit
    While $x < 905 ?
    Oder vertu ich mich da jetzt ? :D


    @Taek:
    So hatte ich das auch erst. So fängt der aber bei jedem neuenn $x wieder bei $y = 100 an,
    er will aber von oben nach unten, von unten nach oben, ... usw ! ;)


    limette

  • Do...Until Problem

    • limette
    • 30. Juli 2008 um 17:28

    Theoretisch funktioniert die Lösung von mir mit Zusatz des ContinueCase.

    Allerdings wird durch das ControlSend der Focus von der GUI genommen, weshalb es schwierig ist,
    den Button zu klicken :P
    Dann klickt man den auch aus versehen 2x, und zack, sitzt man in dem
    WinWAitActive vor dem Send('!n') fest !

    Warum der Focus von der GUI genommen wird.. hm. Keine Ahnung.
    Ein Vorschlag, der vll nicht zur Lösung, aber zur Verbesserung führt:

    Sleep verlängern,
    Button2 auf DISABLE setzen und nur mit Button1 wieder ENABLEn..
    Oder eben ne Abfrage, ob der Prozess 'notepad.exe' noch läuft.

    Ah, vll die GUI mit nem Always-On-Top attribut ausstatten ? ;)

    mfg, limette

  • Menü über Systray-Icon

    • limette
    • 30. Juli 2008 um 16:19
    [autoit]

    While 1
    $traymsg = TrayGetMsg()
    Switch $traymsg
    Select
    Case $traymsg = $tray_start_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_start.bat")
    Case $traymsg = $tray_stop_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_stop.bat")
    Case $traymsg = $tray_start_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_on.bat")
    Case $traymsg = $tray_stop_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_off.bat")
    Case $traymsg = $aboutitem
    Msgbox(48,"about:","© mööp - nix Firmenname")
    Case $traymsg = $exititem
    ExitLoop
    EndSelect
    EndSwitch

    [/autoit]

    Siehst du, dass da was nicht passt ? ;)

    Du hast in dem Switch - EndSwitch gar kein Case ;)
    Schmeiß einfach Switch & EndSwitch raus:

    Spoiler anzeigen
    [autoit]


    While 1
    $traymsg = TrayGetMsg()
    Select
    Case $traymsg = $tray_start_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_start.bat")
    Case $traymsg = $tray_stop_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_stop.bat")
    Case $traymsg = $tray_start_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_on.bat")
    Case $traymsg = $tray_stop_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_off.bat")
    Case $traymsg = $aboutitem
    Msgbox(48,"about:","© mööp - nix Firmenname")
    Case $traymsg = $exititem
    ExitLoop
    EndSelect

    [/autoit]

    Oder (schöner) nehm nur das Switch:

    Spoiler anzeigen
    [autoit]


    While 1
    $traymsg = TrayGetMsg()
    Switch $traymsg
    Case $tray_start_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_start.bat")
    Case $tray_stop_httpd
    RunWait ("C:\Inetpub\____install____\onoff\httpd_stop.bat")
    Case $tray_start_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_on.bat")
    Case $tray_stop_mysql
    RunWait ("C:\Inetpub\____install____\onoff\mysql_off.bat")
    Case $aboutitem
    Msgbox(48,"about:","© mööp - nix Firmenname")
    Case $exititem
    ExitLoop
    EndSwitch

    [/autoit]

    Ich würde dir aber trotzdem zum OnEventMode raten..
    kannst dich ja mal damit befassen, wenn das hier erstmal läuft =)

  • Menü über Systray-Icon

    • limette
    • 30. Juli 2008 um 15:33

    Du sitzt ja ab Scriptstart in dem Loop für das
    TrayGetMsg fest.
    Also, du kannst entweder:

    Die TrayGetMsg & GUIGetMsg in eine Schleife packen,

    Spoiler anzeigen
    [autoit]


    While 1
    $traymsg = TrayGetMsg()
    Switch $traymsg
    Case ;...
    EndSwitch

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

    $guimsg = GUIGetMsg()
    Switch $guimsg
    Case ;...
    EndSwitch
    WEnd

    [/autoit]

    oder

    Den TrayOnEventMode nehmen ;)

    Spoiler anzeigen
    [autoit]


    Opt( 'TrayOnEventMode', 1 )
    TrayCreateItem( 'exit' )
    TrayItemSetOnEvent( -1, '_exit' )

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

    While 1
    $msg = GuiGetMsg()
    ;...
    WEnd

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]
  • Menü über Systray-Icon

    • limette
    • 30. Juli 2008 um 14:58

    Hey,
    natürlich ist das möglich.

    Spoiler anzeigen
    [autoit]


    Opt( 'TrayAutoPause', 0 )
    Opt( 'TrayMenuMode', 3 )

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

    $func1 = TrayCreateItem( 'Funktion 1' )
    $func2 = TrayCreateItem( 'Funktion 2' )
    $menu = TrayCreateMenu( 'Menu' )
    $func3 = TrayCreateItem( 'Funktion 3', $menu )
    $exit = TrayCreateItem( 'Exit', $menu )

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

    While 1
    $msg = TrayGetMsg()
    Switch $msg
    Case $func1
    MsgBox( 0, '', 'Text 1' )
    Case $func2
    MsgBox( 0, '', 'Text 2' )
    Case $func3
    MsgBox( 0, '', 'Text 3' )
    Case $exit
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Das Icon ist dann das, das du der Exe beim Compilieren zuweist.

  • Do...Until Problem

    • limette
    • 30. Juli 2008 um 00:04

    Bin jetzt vll etwas zu spät,
    aber:
    Wenn du auf Hotkeys verzichten und bei der GUI bleiben willst,
    dann Streich doch WinWaitActive, WinActivate und Send raus und
    nehm stattdessen ControlSend ;)

    mfg limette

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\Scooby\Desktop\test.kxf
    $Form1 = GUICreate("Form1", 284, 90, 193, 187)
    $Button1 = GUICtrlCreateButton("Start", -8, 48, 129, 41, 0)
    $Button2 = GUICtrlCreateButton("Stop", 152, 48, 129, 41, 0)
    $Label1 = GUICtrlCreateLabel("Autoklicker", 88, 8, 96, 28)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $Button1
    Run("notepad.exe")
    Do
    $msg = GUIGetMsg()
    ControlSend( 'Unbenannt - Editor', '', 15, 'Das ist ein Beispieltext' & @CRLF )
    ;CtrlId mit AutoIt Window Info
    Sleep( 200 )
    until $msg = $Button2
    Case $msg = $Button2
    WinActivate("Unbenannt - Editor")
    WinClose("Unbenannt - Editor")
    WinWaitActive("Editor", "Der Text in der Datei Unbenannt wurde verändert")
    Send("!n")
    case $msg = $GUI_EVENT_CLOSE
    MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...")
    ExitLoop
    EndSelect
    WEnd

    [/autoit]
  • Stringleft Problem

    • limette
    • 28. Juli 2008 um 14:18

    Dafür habe ich dir den Code doch gerade geschrieben ;)

  • Stringleft Problem

    • limette
    • 28. Juli 2008 um 14:11
    [autoit]

    for $i = 1 to 500
    $msgsplit[$i] = StringLeft($msgsplit[$i -1], 53)

    If Stringlen($msgsplit[$i]) < 53 then ExitLoop

    Next

    [/autoit]

    Also, wenn ich diese Schleife richtig deute....
    Dann passiert ja folgendes:
    $msgsplit[0] = seeehr lang.
    $msgsplit[1] = 53 Zeichen lang, die ersten vom $msgsplit[0]

    Aber:
    $msgsplit[2] = StringLeft($msgsplit[1], 53) -- Da $msgsplit[1] genau 53 Zeichen hat, werden doch genau die auch
    in $msgsplit[2] übernommen.
    Und das gleiche dann auch bei $msgsplit[3] , 4, 5, usw.


    Wenn ich dich aber richtig verstanden habe willst du $msgsplit[0] aufspalten in stücke von je 53 Zeichen.

    Das wäre dann ungefähr so..

    [autoit]


    #include <Array.au3>
    $ausgangsstring = 'hallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallohallo'

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

    $d = Ceiling( StringLen( $ausgangsstring ) / 53 )

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

    Dim $msgsplit[$d+1]
    $msgsplit[0] = $ausgangsstring

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

    For $i = 1 To $d
    $msgsplit[$i] = StringLeft( $ausgangsstring, 53 )
    $ausgangsstring = StringTrimLeft( $ausgangsstring, 53 )
    Next

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

    _ArrayDisplay( $msgsplit )

    [/autoit]

    mfg limette

  • Bilder vergleichen - silent

    • limette
    • 8. Juni 2008 um 11:05

    Joa, pee hat wahrscheinlich Recht, wie immer ;)

    Wobei es mir jetzt nicht so auf die Performance ankommt sondern
    eher um die Theorie, wie man das .. toleranter machen könnte ^^
    Ich werd da nochmal drüber nachdenken ;)

    mfg limette

  • Bilder vergleichen - silent

    • limette
    • 8. Juni 2008 um 00:38

    Hallooo,
    kurz nachdem die FTP-Sache gelöst ist komme ich nun wieder mit einer
    weiteren Idee ;)
    Also, folgendes,
    Laptop - Webcam eingebaut - Idee: Bilderkennung.
    Ich hab mir gedacht, vielleicht kann ich ja ein Script erkennen lassen,
    wer sich gerade vor meinem PC befindet ? ^^
    Bild mit der Cam aufnehmen, - kein Problem, aber:
    Das Vergleichen der Bilder macht mir Probleme. Ich will die ja nicht irgentwie anzeigen
    lassen und mit PixelGetColor auf markante Stellen prüfen, das ganze soll ja
    im Hintergrund ablaufen.
    Folgenden Ansatz habe ich mir überlegt:

    Spoiler anzeigen
    [autoit]

    Func _pic_compare( $file1, $file2, $points = 100 )
    $pic1 = Binary( FileRead( $file1 ) )
    $pic2 = Binary( FileRead( $file2 ) )
    $l = _slen( $pic1, $pic2 )
    $points = Int( $points )
    If $points <= 0 Or $points >= Int( $l/2 ) Then
    SetError(-1)
    Return -1
    EndIf


    $steps = Int(( ($l- 2*$points) / $points ))
    Dim $ar[$points][2]
    $pos = 1

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

    For $i = 0 To $points-1
    ToolTip( $i+1 )
    $wr1 = Dec( StringMid( $pic1, $pos, 2 ) )
    $wr2 = Dec( StringMid( $pic2, $pos, 2 ) )
    $c = _slen( $wr1, $wr2 )
    If $c <> 0 Then
    If $c = 1 Then
    $wr1 = Round( $wr1, 0 )
    $wr2 = Round( $wr2, 0 )
    Else
    $wr1 = Round( $wr1, -1 )
    $wr2 = Round( $wr2, -1 )
    EndIf
    EndIf

    $pos = $pos + $steps
    $ar[$i][0] = $wr1
    $ar[$i][1] = $wr2
    Next
    ;_ArrayDisplay( $ar )
    $equal = 0
    For $i = 0 To $points-1
    If $ar[$i][0] = $ar[$i][1] Then $equal += 1
    Next
    Return $equal
    EndFunc

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

    Func _slen( $a, $b )
    $a = StringLen( $a )
    $b = StringLen( $b )
    If $a < $b Then Return $a
    Return $b
    EndFunc

    [/autoit]


    Ich lese die Bilder binär ein, schnappe mir in regelmäßigen Abständen je 2 Zeichen,
    wandle diese in eine Decimalzahl um, runde und vergleiche ^^
    $equal ist dann die Anzahl übereinstimmender Punkte.

    Klingt kompliziert, ist es auch und absolut .. unwirksam.
    Dauert lange und wenn ich meinen Daumen fotografiere habe ich
    mehr übereinstimmende Punkte als wenn ich 2 fast identische Fotos nehme :P

    Hat da vll jemand eine Idee ? =)

    mfg limette

  • Funktionen mit GUI verbinden

    • limette
    • 8. Juni 2008 um 00:12

    Du willst, dass der Benutzer 'einen Kasten zieht', in dem nach einer bestimmten
    Farbe gesucht wird ?
    Hm.
    Mach doch eine GUI größer als der Bildschirm, transparent mit Graphic-Part,
    in dem der 'Rahmen' gezogen wird. ;)

    mfg limette

  • FTPUpload per InternetWriteFile

    • limette
    • 7. Juni 2008 um 20:06

    Das ist auch noch so ne Sache, wozu braucht man etwas wie einen
    'FTP-Download' ?
    Da kann man doch auch einfach 'InetGet' nehmen, mit dem 'Background'-Parameter,
    ner While-Schleife und nem FileGetSize ? ^^

  • FTPUpload per InternetWriteFile

    • limette
    • 7. Juni 2008 um 19:56

    äh.. Wow..
    Da hab ich wohl echt was ins Rollen gebracht ;)
    Hätte das auch ganz gerne selbst gelöst :pinch:
    :P
    Vielen Dank, hast mir viel Zeit gespart =)

    mfg limette

  • AutoIt Zukunftssicher?

    • limette
    • 7. Juni 2008 um 14:55

    Ich persönlich würde sagen es lohnt sich auf jeden Fall.

    Habe selbst auch vor in den Bereich der Softwareentlicklung o.ä. zu gehen,
    und zum Einsteigen in die Kunst des Programmierens ist AutoIt genial..
    Einfach zu verstehen, tolle Hilfe, super Umgebung (Scite);

    Und man kann ne ganze Menge damit machen :D
    Also, wenn du noch keine andere Sprache kannst, - fang mit AutoIt an =)
    Um zumindest in die grundlegende Struktur dieser 'Kunst' zu kommen =)

    <Meine Meinung>

    mfg limette =)

  • Bestimmte ordner suchen und kopieren

    • limette
    • 7. Juni 2008 um 14:31

    Ich hab hier mal einen kleinen Ansatz..

    Ist vielleicht von der Struktur nicht so gut, aber vielleicht hilft es dir ja =)

    Spoiler anzeigen
    [autoit]

    Dim $ret = '', $i = 0, $file = False
    Dim $find[1]

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

    $search = FileFindFirstFile( '*.*' )
    Do
    $find[$i] = FileFindNextFile( $search )
    $i += 1
    ReDim $find[$i+1]
    Until @error
    For $i = 0 To UBound( $find )-1
    If StringInStr( $find[$i], '.' ) Then ; Achtung ! Hier musst du dir noch was überlegen, auch in Ordnernamen können 'Punkte' vorhanden sein :p
    $file = True
    ExitLoop
    EndIf
    Next

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

    If Not $file Then
    MsgBox( 0, 'Info', 'In diesem Verzeichnis wurde keine Datei gefunden' )
    Else
    MsgBox( 0, 'Info', 'Es wurden Dateien gefunden' )
    EndIf
    If $find[0] = '' Then
    MsgBox( 0, 'Info', 'Es existieren auch keine weiteren Unterordner' )
    Else
    ; Hier die anderen Unterordner durchgehen
    EndIf

    [/autoit]

    mfg limette =)

    Edit: Kleine Ungenauigkeit mit dem StringInStr, ... aber wenn das nur für dich ist und du keine Punkte in Ordnernamen verwendet hast
    dürfte das eigentlich nicht so das Problem sein ;)

  • FTPUpload per InternetWriteFile

    • limette
    • 7. Juni 2008 um 14:14

    Ich habs mit diesem Test verstanden :]

    Also...

    Wenn ich nehme:

    [autoit]


    $a = FileRead( 'test.txt', 5 )
    $b = FileRead( 'test.txt', 5 )

    [/autoit]


    Dann ist $a = $b = 12345,
    denn FileRead mit Dateinamen und nicht Handle als Parameter ist das gleiche wie:

    [autoit]


    $handle = FileOpen( 'test.txt', 0 )
    $a = FileRead( $handle, 5 )
    FileClose( $handle )
    $handle = FileOpen( 'test.txt', 0 )
    $b = FileRead( $handle, 5 )
    FileClose( $handle )

    [/autoit]

    Wenn ich aber die Datei geöffnet lasse rückt er mit dem Pointer weiter, wie progandy schon sagte =)

    mfg limette

  • FTPUpload per InternetWriteFile

    • limette
    • 7. Juni 2008 um 13:55

    1. Danke für den Fix mit dem 100 Byte-Dateien =)
    2. Gute Idee, werde ich einbauen, aber erstmal überhaupt die Funktion, das wird schon kompliziert genug ;)
    3. Ich arbeite viel zu selten mit FileOpen / FileClose... habe das mal getestet und das zu verstehen ^^
    Test.txt : 1234567890

    [autoit]

    $handle = FileOpen( 'test.txt', 0 )
    $a = FileRead( $handle, 5 )
    $b = FileRead( $handle, 5 )
    MsgBox( 0, 'a', $a )
    MsgBox( 0, 'b', $b )
    FileClose( $handle )

    [/autoit]


    Ausgabe:
    a: 12345
    b: 67890
    Und genau das wusste ich nicht :D
    Gut gut, nochmal danke =)
    Mal wieder viel gelernt ^^

    mfg limette

  • Aktives GUICtrlCreateMenuItem mit Hacken versetzen!

    • limette
    • 7. Juni 2008 um 13:45

    Das einzige was mir dazu einfallen würde ist folgendes:
    Du legst die GUIMenuItems in einer Array an.

    [autoit]

    Dim $item[10]
    $item[0] = GuiCtrlCreateMenuItem ( $MenuID, 'Text' )
    $item[1] = GuiCtrlCreateMenuItem ( $MenuID, 'Text' )
    ; usw. ...

    [/autoit]

    Wenn dann zB Case $item4 ist rufst du ne Funktion auf, zB
    _Check( 4 )

    [autoit]


    Func _Check( $nr )
    For $i = 0 To 9 ;oder wie viele du auch hast...
    GuiCtrlSetState( $item[$i], $GUI_UNCHECKED )
    Next
    GuiCtrlSetState( $item[$nr], $GUI_CHECKED )
    EndFunc

    [/autoit]

    mfg limette

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™