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

Beiträge von Micha_he

  • Text an bereits geschriebenen ranhängen

    • Micha_he
    • 25. Januar 2010 um 15:23

    !

    [autoit]

    GUICtrlSetData($id, GUICtrlRead($id) & @CRLF & $neuerText)

    [/autoit]
  • Text an bereits geschriebenen ranhängen

    • Micha_he
    • 25. Januar 2010 um 15:15

    So:

    [autoit]

    GUICtrlSetData($id, GUICtrlRead($id) & $neuerText)

    [/autoit]
  • Mehrere 'Case' möglichkeiten GLEICHZEITIG

    • Micha_he
    • 22. Januar 2010 um 21:37
    Zitat von SEuBo

    Ich weiß es nicht. habe mich da auf dieses Zitat bezogen



    Zitat


    kann ich den 2ten jedoch nicht in diesem moment auch noch nutzten, also wären die MsgBox darsteht...

    Gut diese Äußerung war mir, beim Schreiben meiner Antwort, durchgerutscht. Da hast Du natürlich recht...

  • Pfad Trimmen

    • Micha_he
    • 22. Januar 2010 um 21:14

    Ich hätte noch:

    [autoit]

    $string = "C:\Windows\System32\winrm\0407\"
    If StringRight($string, 1) <> "\" Then $string &= "\" ; Sicherheit das der Pfad mit '\' endet
    MsgBox(0, "", StringLeft($string, StringInStr($string,"\",0,-2))) ; zweites Vorkommen von rechts

    [/autoit]
  • Mehrere 'Case' möglichkeiten GLEICHZEITIG

    • Micha_he
    • 22. Januar 2010 um 21:08
    Zitat von SEuBo

    Das liegt daran, dass MsgBoxen das Skript pausieren. Ich hatte mal eine _MsgBox() UDF erstellt, mit der es möglich ist, das zu umgehen. Leider wurde sie nie ganz fertig ( ich bin an der Flag-Abfrage gescheitert)

    Ich glaube die MsgBox'n beendet er schon, in der 10s Pause. Oder ?

  • Mehrere 'Case' möglichkeiten GLEICHZEITIG

    • Micha_he
    • 22. Januar 2010 um 21:01

    Das ist alles eine Frage des Ablaufs. Gibt einige Lösungen die zu einem Ziel führen, z.B. so....

    Spoiler anzeigen
    [autoit]

    Global $gestartet = False
    Global $start

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

    While 1
    $msg = GUIGetMsg()
    Select
    case $msg = $btnStart
    MsgBox (64, "Test", "Test 01")
    $gestartet = True
    $start = TimerInit()

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

    case $msg = $btnStop
    Exit
    ; Nur beispiel

    EndSelect

    If $gestartet = True And TimerDiff($start) > 10000 Then MsgBox (64, "Test", "Test 02")

    WEnd

    [/autoit]

    Der Trick an der Sache ist halt, das Du das Script weiter durch die WHILE-WEND-Schleifen laufen lassen musst, in der die GUIGetMsg()-Abfrage steht. Damit der Klick auf Exit erkannt wird.

    Bei Sleep() steht das Script anfach an der Stelle und macht erst weiter, wenn die Zeit um ist. Außer vielleich durch AdLibEnable()/AdLibRegister() unterbrochen.

  • Ordner löschen klappt nicht ganz

    • Micha_he
    • 21. Januar 2010 um 12:25

    Alle Möglichekeiten die man die genannt hat, schließt Du ja aus !

    Es gibt meines Wissens nach nur diese Probleme, die das Löschen eines Ordners unter Windows verhindern:

    1. Eine darin befindliche Datei oder ein darin befindlicher Ordner ist in Benutzung eines laufenden Prozesses. Kann z.B. aber auch sein, das eine DLL aus dem Ordner nachgeladen wird, die beim ProcessClose() nicht mit entladen wird und daher weiterhin aktiviert bleibt. Gutes Tool hierfür ist: ProcessExplorer.
    2. Der Ordner ist durch ein anderes Programm oder ein Explorer-Fenster derzeit geöffnet.
    3. Der Ordner ist in der Registry als zu schützender Ordner markiert. Ich weiß derzeit aber nicht mehr, wo das eingetragen wurde. z.B. Ordner für die Windows-Systemdateien sind so geschützt.

    Ansonsten fällt mir auch nichts mehr ein.

    Edit: Einen habe ich noch. Jemand hat aus dem Ordner ein AutoIt-Script gestartet, in welchem ein Run() ausgeführt wird. Wenn man bei diesem Run() nicht z.B. @TempDir als Arbeitsverzeichnis mitgibt, wird das @ScriptDir als Arbeitsverzeichnis. Dies ist dann der aktuelle Ordner und der lässt sich dann erst nach Ende der Run() wieder löschen.

  • standartbrowser bestimmen?

    • Micha_he
    • 20. Januar 2010 um 19:04

    Mist, "Copy And Paste"-Fehler !

  • standartbrowser bestimmen?

    • Micha_he
    • 20. Januar 2010 um 17:43

    Ich hab auch noch eine Variante die ohne Array auskommt:

    Spoiler anzeigen
    [autoit]

    MsgBox(0, "Standardbrowser", "des Systems : "& @TAB & _Get_Standardbrowser(False) & @CRLF & @CRLF & "des Users : " & @TAB & _Get_Standardbrowser(True))

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

    Func _Get_Standardbrowser($user = True)
    If $user Then
    $key = RegRead("HKEY_CURRENT_USER\Software\Classes\http\shell\open\command","")
    Else
    $key = RegRead("HKEY_CLASSES_ROOT\http\shell\open\command","")
    EndIf
    If StringLeft($key, 1) = '"' Then
    $key = StringMid($key, 2, StringInStr($key, '"', 0, 2) - 2)
    Else
    If StringInStr($key, " ") > 0 Then $key = StringLeft($key, StringInStr($key, " ") - 1)
    EndIf
    If StringLen($key) > 0 Then Return $key
    Return 0
    EndFunc

    [/autoit]

    Edit: Nach Einwand von Oscar jetzt auch "des Users".
    Edit2: Fehler korrigiert. Danke SEuBo.

  • rdp-sessions mit Dropdownmenü

    • Micha_he
    • 20. Januar 2010 um 15:16

    Im Prinzip macht doch die Standard Management-Console für RemoteDesktop dies schon.

    Du kannst doch die letzten Server/Rechner mit denen Du verbunden warst, alle per DropDown wieder wählen.

    Oder Du muss obige Funktionsbeschreibung nochmal genauer beschreiben !

  • Usb Backup

    • Micha_he
    • 16. Januar 2010 um 14:36
    Zitat von XP-User

    von IF $stick[0] <> 0 Then nach IF $stick <> 0 Then

    Besser :

    [autoit]

    If IsArray($stick) Then

    [/autoit]
  • Usb Backup

    • Micha_he
    • 15. Januar 2010 um 23:05

    Einfachste Art:

    Am Anfang des Scripts "While True" und am Ende "Wend".

    Schon läuft es endlos. Ist aber dann auch nur noch mit Taskmanager zu beenden. Und Du solltest noch ein geringes "Sleep()" in die "While-Wend-Schleife" nehmen, da sonst die Schleife, sollte kein USB-Stick zum Kopieren erkannt werden, zu schnell/oft läuft und den Rechner stark auslastet.

  • Usb Backup

    • Micha_he
    • 14. Januar 2010 um 23:30
    [autoit]

    $stickname = "Name des USB-Sticks" ; zum erkennen welcher Stick
    $stick = DriveGetDrive("REMOVABLE")

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

    If Not FileExists(@ScriptDir & "\UsbBackup") Then DirCreate(@ScriptDir & "\UsbBackup")

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

    If $stick[0] <> 0 Then
    For $i = 1 To $stick[0]
    If DriveGetLabel($stick[$i]) = $stickname Then ; meinen USB-Stick erkannt
    $search = FileFindFirstFile($stick[$i] & "*")
    While True
    $object = FileFindNextFile($search)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($stick[$i] & "\" & $object),"D") > 0 Then ; Ordner erkannt
    DirCopy($stick[$i] & "\" & $object, @ScriptDir & "\UsbBackup\" & $object) ; hier ggf. ",1" wenn überschrieben werden soll
    Else
    FileCopy($stick[$i] & "\" & $object, @ScriptDir & "\UsbBackup\" & $object) ; hier ggf. auch ",1"
    EndIf
    Wend
    FileClose($search)
    EndIf
    Next
    EndIf

    [/autoit]

    So könnte es klappen !

  • Usb Backup

    • Micha_he
    • 14. Januar 2010 um 23:02
    [autoit]


    $stick = DriveGetDrive("REMOVABLE")

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

    DirCreate("UsbBackup") ; erzeugt einen Ordner, aber wo ? Im aktuellen Arbeitsverzeichnis ?

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

    If $stick[0] <> 0 Then
    For $i = 1 To $stick[0] ; durchläuft alle Wechseldatenträger, nicht nur den der angesteckt ist
    $datei = FileFindFirstFile($stick[$i] & "*"); öffnet auf jedem Datenträger ein Handle in der gleichen Variable, wobei nur das letzte überbleibt
    Next
    EndIf

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

    While 1
    $file = FileFindNextFile($datei); durchläuft das LETZTE Such-Handle
    If @error Then ExitLoop ; und bricht am letzten Objekt des Ordners ab
    DirMove($file, "UsbBackup"); verschiebt nur Ordner incl. Sub/Files - aber keine Datei-Objekte direkt
    MsgBox(0, "", $file, 1)
    WEnd

    [/autoit]

    Ich glaube das sind so viele Probleme drin, das man das ganze neu aufbauen sollte. Ich habe mal einiges im Quellcode kommentiert...

  • _Pop3-Udf (V1.03)

    • Micha_he
    • 14. Januar 2010 um 22:41
    Zitat von Stilgar

    Warum? Paßt doch: 0 Mails, 0 Oktets.

    Na gut, so gesehen hast Du recht !

    Aber das CRLF (siehe Edit meines letzten Post) ist trotzdem nicht Ok.

  • _Pop3-Udf (V1.03)

    • Micha_he
    • 14. Januar 2010 um 22:01

    _POP3Stat() liefert meiner Meinung nach bei einem leeren Postfach noch etwas falsches ab.

    Die Funktion liefert ein Array mit zwei Elementen, wobei beide "0" sind.

    Der Befehl "__POP3Cmd("STAT")" der Funktion liefert bei mir "0 0" und CRLF zurück, woraus das StringSplit die zwei Elemente erzeugt.

    Sollte man das nicht bessser abfangen ?


    >>> Edit: <<<
    Und noch eine Kleinigkeit an der gleichen Stelle: Egal ob Mails im Portfach vorhanden oder nicht: Am letzten Element des Array's hängt noch das CRLF !

  • _Pop3-Udf (V1.03)

    • Micha_he
    • 14. Januar 2010 um 21:26

    Bei mir klappt es jetzt natürlich auch....

  • _Pop3-Udf (V1.03)

    • Micha_he
    • 14. Januar 2010 um 19:21

    Ich habe einen Fehler darin gefunden:

    Wenn das Postfach leer ist, bricht '_POPInfo()' in Zeile 84

    [autoit]

    Local $aRet[$aTMP[0]][$iInf]

    [/autoit]


    ab, weil '$aTMP[0]' = '0' ist.

    Jedenfalls bei Web.de.

  • Suche FileOverTCP funktion

    • Micha_he
    • 13. Januar 2010 um 19:34

    Unter Umständen so:

    Neue Recv-Funktion
    [autoit]

    Func _TCPRecvFile($sFile,$sIP,$iPort,$iTimeout=0,$bPopup=1,$bShowMessageOnSuccess=1,$iSleep=10,$iPartsize=128)
    Local $ListeningSocket, $hTimer, $iConnectedSocket, $iCurrenttime, $Recv, $iFilesize, $SFilename
    Local $sBuffer, $iFilesizeMB, $iNewTime, $iOldTime, $iRate, $iSent, $iTime, $hFile
    Local $IsError = False ; Variable definieren
    If $bPopup Then ProgressOn("Empfang des Scan's","Warte auf Sendung des Scans","Warten",-1,-1,16)
    $ListeningSocket = TCPListen($sIP,$iPort)
    If $bPopup And Not $iTimeout Then ProgressSet(0,"Warte auf Verbindung")
    If $bPopup And $iTimeout Then ProgressSet(0,"Warte noch "&$iTimeout&" Sekunden")
    If $iTimeout Then $hTimer = TimerInit()
    Do
    $iConnectedSocket = TCPAccept($ListeningSocket)
    Sleep(100)
    If $bPopup And $iTimeout Then
    $iCurrenttime = Int(TimerDiff($hTimer)/1000)
    ProgressSet((TimerDiff($hTimer)/1000)/$iTimeout*100,"Warte noch "&$iTimeout-$iCurrenttime&" Sekunden")
    If $iCurrenttime >= $iTimeout Then
    ProgressSet(100,"Timeout abgelaufen. Es wurde kein Scan gesendet !")
    Sleep(5000)
    SetError(1)
    ProgressOff()
    Return 0
    EndIf
    EndIf
    Until $iConnectedSocket > -1
    Do
    $Recv = TCPRecv($iConnectedSocket,2048)
    Sleep(100)
    Until $Recv <> ""
    $Recv = StringSplit($Recv,Chr(3))
    $iFilesize = $Recv[2]
    $SFilename = $Recv[1]
    $sBuffer = Binary("")
    If $bPopup Then
    $hTimer = TimerInit()
    $iFilesizeMB = Round($iFilesize/1024^2,2)
    ProgressSet(0,"Sende 0.0 von "&$iFilesizeMB&" MB @ 0.0 kb/s","Datei senden...")
    EndIf
    Do
    $Recv = TCPRecv($iConnectedSocket,$iPartsize*1024)
    If @error Then ; hier den Fehler abfragen und reagieren
    $IsError = True
    ExitLoop
    EndIf
    $sBuffer &= Binary($Recv)
    Sleep($iSleep)
    If $bPopup Then
    $iNewTime = TimerDiff($hTimer)
    $iTime = $iNewTime - $iOldTime
    $iRate = (BinaryLen($Recv)/$iTime)/1.024
    $iSent = (BinaryLen($sBuffer))/1024^2
    ProgressSet($iSent/$iFilesizeMB*100,"Empfange "&Round($iSent,2)&" von "&$iFilesizeMB&" @ "&Round($iRate,2)&" kb/s")
    $iOldTime = $iNewTime
    EndIf
    Until BinaryLen($sBuffer) >= $iFilesize
    If $IsError = False Then ; wenn keine Fehler dann...
    If $sFile = "" Then $sFile = $SFilename
    $hFile = FileOpen($sFile,18)
    FileWrite($hFile,$sBuffer)
    FileClose($hFile)
    $sBuffer = ""
    TCPCloseSocket($ListeningSocket)
    TCPCloseSocket($iConnectedSocket)
    If $bShowMessageOnSuccess Then MsgBox(64+262144,"Empfang des Scan's","Scan erfolgreich empfangen")
    ProgressOff()
    Return 1
    Else ; ansonsten zeige immer eine Fehler-Messagebox
    MsgBox(48+262144,"Fehler","Scan konnte nicht komplett empfangen werden !")
    $sBuffer = ""
    TCPCloseSocket($ListeningSocket)
    TCPCloseSocket($iConnectedSocket)
    ProgressOff()
    Return 0
    EndIf
    EndFunc

    [/autoit]

    Ich habe das aber nicht getestet, da ich gerade anderweitig beschäftigt bin. Einige Zeilen sind etwas verändert. Wichtige Punkte sind mit Kommentaren versehen.

    Edit: Habe gerade noch einen Fehler korrigiert.

  • Suche FileOverTCP funktion

    • Micha_he
    • 13. Januar 2010 um 08:00
    Zitat von GtaSpider

    Hallo,

    Jajaja - Ich weiß, sie ist veraltet. Ich setze mich die Tage mal dran wenn ich wieder Zeit finde und überarbeite sie ;)

    Gruß
    Spider

    Die Funktion die ich verwendet habe und die zu damaliger Zeit einwandfrei lief, ist aber von "DJ Baselord".

    Was aber nicht heißen soll das ein Teil seiner Funktion, Ähnlichkeiten mit Deiner haben könnte.

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™