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

Beiträge von Oscar

  • Dateien leicht verschlüsseln

    • Oscar
    • 20. April 2009 um 12:37

    Es funktioniert aber auch mit den normalen AutoIt-Funktionen, indem man die Datei im Binary-Mode liest und schreibt:

    [autoit]


    _NotExecute(True, @ScriptDir & '\test.exe') ; Beispielaufruf: Exe nicht ausführbar
    MsgBox(0, 'Test', 'Datei ist jetzt nicht ausführbar!')

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

    _NotExecute(False, @ScriptDir & '\test.exe') ; Beispielaufruf: Exe wieder ausführbar
    MsgBox(0, 'Test', 'Datei ist jetzt wieder ausführbar!')

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

    Func _NotExecute($bExe, $sFilename)
    Local $sHeader, $hFile, $sFile
    $hFile = FileOpen($sFilename, 16)
    $sFile = FileRead($hFile)
    FileClose($hFile)
    If $bExe Then
    $sHeader = '0x0000'
    Else
    $sHeader = '0x4D5A'
    EndIf
    $sFile = $sHeader & StringMid($sFile, 7)
    $hFile = FileOpen($sFilename, 2 + 16)
    FileWrite($hFile, $sFile)
    FileClose($hFile)
    EndFunc ;==>_NotExecute

    [/autoit]

    Dabei wird allerdings die gesamte Exedatei in den Speicher geladen.

  • FTP Server [Versuch #2]

    • Oscar
    • 20. April 2009 um 12:11

    Allgemeingültige Tutorials gibt es eigentlich nicht, weil die Hard-/Software-Konfiguration mit entscheidet.

    Grundlagen:
    DynDNS ist ein Service, der Deine IP-Adresse (nicht die lokale, sondern die, die Dir vom Provider zugewiesen wird) auf einen Domainnamen abbildet.

    1. Schritt
    Wenn Du Dich bei DynDNS anmeldest, bekommst Du einen (Sub-)Domainnamen (z.B.: commander21.dyndns.org) zugewiesen. Jetzt muss Dein Router oder (falls nicht vorhanden oder der das nicht unterstützt) ein Programm auf Deinem PC Deine IP (vom Provider zugewiesene) an DynDNS übermitteln, damit deren Server die Zuordnung Domainname -> IP vornehmen können.

    2. Schritt
    Wenn Du einen Router besitzt, muss dort eine Port-Weiterleitung eingerichtet werden. Wenn Du zum Beispiel auf Deinem PC ein FTP-Serverprogramm laufen lassen willst, musst Du Port 21 auf Deinen PC weiterleiten lassen. Ein HTTP-Server braucht eine Weiterleitung auf Port 80. Willst Du ein AutoIt-Programm als Ziel benutzen, musst Du den Port eintragen, den Du dort benutzt. Ohne diese Weiterleitung würde der Router ankommende Pakete einfach verwerfen. Es würde kein Connect stattfinden. Diese Weiterleitung geschieht dann an die lokale IP Deines PCs. Als Weiterleitungs-IP musst Du dort also die lokale IP-Adresse Deines PCs eintragen.

    Hast Du keinen Router, hängt Deine Netzwerkkarte also direkt an einem DSL-Modem, so hast Du (hoffentlich) eine Firewall laufen. In dem Fall musst Du dort den Port freigeben.

    3. Schritt
    Wenn alles soweit konfiguriert ist, kann man von außen auf Deinen Rechner (bzw. auf das Server-Programm) zugreifen. Dazu benötigt man dann nicht Deine IP-Adresse, sondern den Domainnamen. Zum Beispiel könnte man (wenn Du ein HTTP-Server-Programm auf Deinem PC laufen hast) den Domainnamen direkt im Browser eingeben und hätte dann Zugriff auf die freigegebenen Ordner/Dateien.

    Das sind soweit die Grundlagen. Um das Ganze wirklich lauffähig zu kriegen, ist die verwendete Hard- und Software entscheidend.
    Wenn Du das damit nicht selbst schaffst, müsstest Du mehr Informationen über Deine Geräte bzw. verwendete Software liefern.

  • Speichern unter & Controlclick funktioniert einfach nicht

    • Oscar
    • 20. April 2009 um 10:25

    Eigentlich müsste das Beispiel von rew funktionieren. Die ID ist ja angegeben.
    Ich könnte mir evtl. vorstellen, dass es mit der Erkennung des Textes zu tun hat.
    Vielleicht mal so versuchen:

    [autoit]

    ControlClick("Speichern unter", "", 1)

    [/autoit]
  • Positioniern einer Ausgabe mit _Win API_DrawText()

    • Oscar
    • 20. April 2009 um 09:45

    Schau Dir das Beispiel aus der Hilfe an und ändere einfach die Werte für Left, Top, Right und Bottom entsprechend.

  • Lottogewinn

    • Oscar
    • 20. April 2009 um 08:55

    GtaSpider, die Idee ist auch nicht schlecht. Hab gerade mal 1.000.000 Ziehungen gemacht:
    Zeile 83 geändert:

    [autoit]

    Until $bBreak Or $iCount = 1000000

    [/autoit]


    Zeilen 84...88 auskommentieren.
    Ergebnis:
    3334 x 3 Richtige
    189 x 4 Richtige
    5 x 5 Richtige
    0 x 6 Richtige

    Schade, wenn die Gewinne konstant wären, könnte man noch den Gesamtgewinn ausrechnen.

  • Dateien leicht verschlüsseln

    • Oscar
    • 19. April 2009 um 23:11

    Andere Möglichkeit:
    Die ersten beiden Bytes der Dateien (Subprogramme) auf "00" "00" ändern, dann lassen sie sich nicht mehr starten.
    Dein Hauptprogramm ändert vor dem Aufruf die beiden Bytes wieder auf den Ursprungswert "4d" "5a" und ruft das Subprogramm dann auf. Nach dem Beenden wieder auf "00" "00" setzen.

  • Lottogewinn

    • Oscar
    • 19. April 2009 um 22:52

    Nein, denn zum einen werden beim Lotto die bereits gezogenen Zahlen nicht wieder in den "Topf" gelegt und zum anderen ist die Reihenfolge der Zahlen egal.
    Damit sind viele Kombinationen ausgeschlossen.
    Genaueres findest Du hier: http://de.wikipedia.org/wiki/Kombinatorik runterscrollen bis "Kombination ohne Zurücklegen".

  • Dateien leicht verschlüsseln

    • Oscar
    • 19. April 2009 um 22:29

    Die Frage ist, wie sicher muss das sein?

    Eine einfache Möglichkeit wäre, dass Du in Deinen Subprogrammen auf einen Übergabeparamter testest. Wird es ohne Parameter aufgerufen, dann gleich wieder beenden.
    Dein Hauptprogramm ruft die Subprogramme dann natürlich mit Übergabeparameter auf.
    Ist, wie gesagt, nicht sonderlich sicher, aber wer das nicht weiß...

  • GUICtrlCreateEdit Maximum an Zeichen erreicht

    • Oscar
    • 19. April 2009 um 22:05

    Standardmäßig ist das Edit auf 30.000 Zeichen begrenzt.
    Ändern kannst Du das mit GUICtrlSetLimit.

  • Lottogewinn

    • Oscar
    • 19. April 2009 um 21:44

    Ganz so schlimm ist es dann nicht. Die Wahrscheinlichkeit auf einen 6er liegt bei 1 : 13.983.816

    Mein Script ist jetzt bei 1730 sek. und >10 Millionen Ziehungen...

    Edit: Hurra! 6 Richtige! Nach 2415 Sekunden und 14.270.759 Ziehungen (Ich weiß schon, warum ich kein Lotto spiele...). :huh:

  • Lottogewinn

    • Oscar
    • 19. April 2009 um 21:29

    Ja, das Script von gestern war sozusagen die Ausgangsbasis. Da hab ich dann alles drumherum gescriptet. :)

    Ich versuche mich gerade mal an den 6 Richtigen. Das Script läuft jetzt bereits über 800 Sekunden (>4.8 Millionen Ziehungen) und immer noch keine 6 Richtigen. :wacko:

  • Lottogewinn

    • Oscar
    • 19. April 2009 um 21:04

    Der Glückstester von "nof@ker2" brachte mich auf die Idee auch mal so ein statistisches Lottoprogramm zu schreiben.

    Man kann 6 Zahlen eingeben und auswählen bei welchem Gewinn (3, 4, 5 oder 6 Richtige) das Programm abbrechen soll (Achtung! 6 Richtige dauert u.U. sehr lange!). Mit der [ESC]-Taste kann man den Vorgang abbrechen.

    Es werden am Schluß die Anzahl der Ziehungen, sowie die benötigte Zeit angezeigt. Während das Script läuft, wird ebenfalls die Anzahl der Ziehungen angezeigt. Um aber nicht die gesamte Rechenzeit für die Aktualisierung der Anzeige aufzubrauchen, wird nur alle 500 Ziehungen die Anzeige aktualisiert.

    Spoiler anzeigen
    [autoit]


    #include <ComboConstants.au3>
    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

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

    Global $aLottoNum[49], $timer, $bBreak = False
    For $i = 1 To 49
    $aLottoNum[$i - 1] = $i
    Next

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

    GUICreate('Lottogewinn 6 aus 49', 510, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    GUISetBkColor(0xaaaaaa)
    HotKeySet('{ESC}', '_Break')
    Global $ahCheck[49]
    For $i = 0 To 48
    $ahCheck[$i] = GUICtrlCreateCheckbox($i + 1, 20 + Mod($i, 7) * 70, 10 + Int($i / 7) * 30, 60, 25)
    GUICtrlSetOnEvent(-1, '_CheckboxCounter')
    Next
    $hMatch = GUICtrlCreateCombo('3 Richtige', 10, 240, 75, 25, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, '4 Richtige|5 Richtige|6 Richtige', '5 Richtige')
    GUICtrlSetTip(-1, 'Abbruchbedingung auswählen!')
    $hStart = GUICtrlCreateButton('Start', 90, 240, 50, 20)
    GUICtrlSetOnEvent(-1, '_Start')
    GUICtrlSetState($hStart, $GUI_DISABLE)
    GUICtrlCreateLabel('Anzahl der Ziehungen:', 150, 242, 130, 25)
    GUICtrlSetFont(-1, 10, 400)
    $hDrawCount = GUICtrlCreateLabel('0', 285, 242, 100, 25)
    GUICtrlSetFont(-1, 10, 400)
    $hStatus = GUICtrlCreateLabel(' 6 Zahlen auswählen!', 0, 280, 510, 20)
    GUICtrlSetBkColor(-1, 0xeeeeee)
    GUICtrlSetFont(-1, 12, 400)
    GUISetState()

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

    While True
    Sleep(10)
    WEnd

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

    Func _End()
    Exit
    EndFunc ;==>_End

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

    Func _Break()
    $bBreak = True
    EndFunc ;==>_Break

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

    Func _Start()
    Local $aTip[6], $iCount = 0, $aDraw, $iWin = StringLeft(GUICtrlRead($hMatch), 1)
    GUICtrlSetState($hMatch, $GUI_DISABLE)
    GUICtrlSetState($hStart, $GUI_DISABLE)
    For $i = 0 To 48
    If BitAND(GUICtrlRead($ahCheck[$i]), $GUI_CHECKED) Then
    $aTip[$iCount] = $i + 1
    $iCount += 1
    EndIf
    Next
    $iCount = 0
    GUICtrlSetData($hStatus, ' Bitte warten...')
    $timer = TimerInit()
    AdlibEnable('_DisplayTimer', 1000)
    Do
    $iCount += 1
    If $iCount / 500 = Int($iCount / 500) Then GUICtrlSetData($hDrawCount, $iCount)
    $aDraw = _Lottodraw()
    Until _Win($aTip, $aDraw, $iWin) Or $bBreak
    If Not $bBreak Then
    GUICtrlSetData($hStatus, ' Gewonnen!')
    MsgBox(0, 'Lottogewinn', 'Hurra, ' & $iWin & ' Richtige!' & @CRLF & 'Anzahl der Ziehungen: ' _
    & $iCount & @CRLF & 'Benötigte Zeit: ' & Round(TimerDiff($timer) / 1000, 3) & ' sek.')
    EndIf
    $bBreak = False
    GUICtrlSetData($hDrawCount, '0')
    GUICtrlSetData($hStatus, ' Start-Button anklicken!')
    GUICtrlSetState($hMatch, $GUI_ENABLE)
    GUICtrlSetState($hStart, $GUI_ENABLE)
    AdlibDisable()
    EndFunc ;==>_Start

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

    Func _DisplayTimer()
    GUICtrlSetData($hStatus, ' Bitte warten... Benötigte Zeit: ' & Int(TimerDiff($timer) / 1000) & ' sek.')
    EndFunc ;==>_DisplayTimer

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

    Func _Lottodraw()
    Local $aTmp = $aLottoNum, $aDraw[6], $iTmp
    For $i = 0 To 5
    $iRandom = Random(0, 48 - $i, 1)
    $aDraw[$i] = $aTmp[$iRandom]
    $aTmp[$iRandom] = $aTmp[48 - $i]
    Next
    _ArraySort($aDraw)
    Return $aDraw
    EndFunc ;==>_Lottodraw

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

    Func _Win($aTip, $aDraw, $iWin)
    Local $iCount = 0
    For $i = 0 To 5
    If $aTip[$i] = $aDraw[$i] Then $iCount += 1
    Next
    Return $iCount >= $iWin
    EndFunc ;==>_Win

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

    Func _CheckboxCounter()
    Local $iCount = 0
    For $i = 0 To 48
    $iCount += BitAND(GUICtrlRead($ahCheck[$i]), $GUI_CHECKED)
    Next
    GUICtrlSetData($hStatus, ' ' & 6 - $iCount & ' Zahlen auswählen!')
    If $iCount = 6 Then
    _CheckboxState($GUI_DISABLE)
    GUICtrlSetState($hStart, $GUI_ENABLE)
    GUICtrlSetData($hStatus, ' Start-Button anklicken!')
    Else
    _CheckboxState($GUI_ENABLE)
    GUICtrlSetState($hStart, $GUI_DISABLE)
    EndIf
    EndFunc ;==>_CheckboxCounter

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

    Func _CheckboxState($State)
    For $i = 0 To 48
    If BitAND(GUICtrlRead($ahCheck[$i]), $GUI_UNCHECKED) Then GUICtrlSetState($ahCheck[$i], $State)
    Next
    EndFunc ;==>_CheckboxState

    [/autoit]
  • Skripte erstellen

    • Oscar
    • 19. April 2009 um 15:16

    Beim programmieren wirst Du feststellen, dass es oftmals mehrere Lösungen für eine Aufgabe gibt.
    Hier mal eine andere Lösung:

    [autoit]


    $sURL = 'www.google.de'
    $sTime = @HOUR & ':' & StringFormat('%02s', @MIN + 1)
    Do
    Sleep(500)
    ToolTip($sTime & ' ' & @HOUR & ':' & @MIN & ':' & @SEC, @DesktopWidth/2, 0)
    Until $sTime = @HOUR & ':' & @MIN
    ShellExecute($sURL)

    [/autoit]


    Durch ShellExecute ist diese Lösung auch browserunabhängig.

  • Skripte erstellen

    • Oscar
    • 19. April 2009 um 12:35

    Jam00: Oh oh... 100% CPU-Last! Da gehört noch ein Sleep in die Schleife. ;)

  • Buchstaben eines Wortes auslesen... Array?

    • Oscar
    • 19. April 2009 um 12:15

    Oh, wie peinlich. Ist ja sogar das Beispiel zu dem Befehl. :rolleyes:

    Wieder mal viel zu kompliziert gedacht. :whistling:

  • Buchstaben eines Wortes auslesen... Array?

    • Oscar
    • 19. April 2009 um 11:55

    Du willst also alle Leerzeichen vor und hinter dem Wort/Satz entfernen?
    Das geht am besten mit StringRegExpReplace:

    [autoit]


    $string = ' dies ist ein Test '
    $string = StringRegExpReplace($string, '\s*(.+\H)\s*', '$1')
    MsgBox(0,0,'>'&$string&'<')

    [/autoit]
  • Buchstaben eines Wortes auslesen... Array?

    • Oscar
    • 19. April 2009 um 11:33

    Hilfe lesen:

    Zitat

    StringReplace ( "string", "searchstring" or start, "replacestring" [, count [, casesense]] )

    Beispiel:

    [autoit]


    $string = 'dies ist ein Fest'
    $string = StringReplace($string, 14, 'T')
    MsgBox(0,0,$string)

    [/autoit]
  • Problem mit DriveMapAdd

    • Oscar
    • 19. April 2009 um 09:21

    Das "gibt 0 zurück" bezieht sich auf den Return-Wert und nicht auf das @error-Makro.
    @error erhält im Fehlerfall einen Wert größer als Null, deshalb muss Deine Abfrage so lauten:

    [autoit]


    $Fehler = DriveMapAdd("K:", "\\opteron\sata\David")
    If @error > 0 Then
    MsgBox(1, "Fehler", "Folgender Fehler:" & @error)
    EndIf

    [/autoit]


    oder in Kurzform:

    [autoit]


    $Fehler = DriveMapAdd("K:", "\\opteron\sata\David")
    If @error Then
    MsgBox(1, "Fehler", "Folgender Fehler:" & @error)
    EndIf

    [/autoit]


    alternativ ginge auch diese Abfrage:

    [autoit]


    $Fehler = DriveMapAdd("K:", "\\opteron\sata\David")
    If Not $Fehler Then
    MsgBox(1, "Fehler", "Folgender Fehler:" & @error)
    EndIf

    [/autoit]
  • Anzahl aktiver Checkboxen zählen

    • Oscar
    • 19. April 2009 um 00:09

    Limette hatte schon recht. Im OnEvent-Mode ist das einfacher:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

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

    GUICreate('Test', 510, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')

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

    Global $ahCheck[49]
    For $i = 0 To 48
    $ahCheck[$i] = GUICtrlCreateCheckbox($i+1, 20+Mod($i,7)*70, 10+Int($i/7)*30, 60, 25)
    GUICtrlSetOnEvent(-1, '_CheckboxCounter')
    Next

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

    $hCount = GUICtrlCreateLabel('0', 200, 250, 120, 25)
    GUISetState()

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

    While True
    Sleep(50)
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    Func _CheckboxCounter()
    Local $iCount = 0
    For $i = 0 To 48
    $iCount += BitAND(GUICtrlRead($ahCheck[$i]), $GUI_CHECKED)
    Next
    GUICtrlSetData($hCount, $iCount)
    EndFunc

    [/autoit]
  • Script Obfuscator im Eigenbau

    • Oscar
    • 18. April 2009 um 13:16

    Ich hatte damals ein Script erstellt (Random-Obfuscator). Dieses funktioniert aber nicht mehr mit der aktuellen AutoIt-Version bzw. dem Obfuscator.
    Der jetzige Original-Obfuscator ist aber auch wesentlich besser geworden. Konnte bisher nicht rauskriegen, wie der beim verschleiern vorgeht.
    Von daher nutze einfach den Original-Obfuscator. Eine 100%ige Sicherheit wird es sowieso nicht geben.

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™