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

  • If Abfrage spinnt?

    • Andy
    • 14. Juli 2009 um 00:39

    Hallo,
    lies dir mal das in Ruhe durch und versuche zu verstehen um was es eigentlich geht. Viele Probleme in Autoit haben genau damit zu tun!
    So einfach die "Deklaration" von Variablen ist (es gibt nur einen Datentyp! ) genauso schwer ist das auseinanderhalten der Typen, denn im Gegensatz zu anderen Programmiersprachen bringt AutoIt KEINE Fehlermeldung wenn du die verschiedenen Typen durcheinanderwürfelst.

    Zitat

    Das Problem mit dem verwechseln von Number und Strings habe ich, so denke ich, auch im moment

    So siehts aus^^
    Ein Bestand ist m.E. eine bestimmte Anzahl an Teilen in einem Lager, also würde ich diese Variable als Zahl (Number) sehen. Wenn du 2 Bestände hast und die Summe dieser Bestände suchst, dann würde ICH diese Bestände einfach addieren.

    [autoit]

    $bestand1=122 ;Zahl
    $bestand2=75 ;Zahl
    $gesamt=$bestand1 + $bestand2 ;"plus" addiert zwei Zahlen
    msgbox(0,0,$gesamt) ;in der msgbox erscheint 197

    [/autoit]


    Benutzt du aber das kaufmännische "und", dann werden die beiden "Zahlen" automatisch in Strings umgewandelt und aneinandergehängt

    [autoit]

    $bestand1=122 ;Zahl
    $bestand2=75 ;Zahl
    $gesamt=$bestand1 & $bestand2 ;mit "und" werden Strings aneinandergehängt
    ;$gesamt=12275 in AutoIt sowohl als String und auch als Zahl weiterzuverarbeiten
    msgbox(0,stringlen($gesamt),$gesamt)

    [/autoit]


    Wenn du absolut sicher gehen willst, um welchen Datentyp es sich handelt, dann nutze

    [autoit]

    IsArray, IsFloat, IsInt, IsNumber, IsBool, IsHWnd, IsBinary

    [/autoit]


    ciao
    Andy

  • Ispressed/Hotkeyset - 2 tasten wurden gedrückt?

    • Andy
    • 13. Juli 2009 um 23:53

    Hallo Laura,

    Zitat

    nochmal zur kurzen Erläuterung: wenn zb "hallo" eingegeben wurde (einfach auf der normalen Windowsoberfläche zb, also keine AutoIt GUI..., passiert dies und das?!

    ...das nennt man landläufig einen "Keylogger". Selbstverständlich ist das auch einfach mit AutoIt zu realisieren, aber mit Tips zu diesem Thema sollen sich andere die Finger verbrennen....
    ciao
    Andy

  • If Abfrage spinnt?

    • Andy
    • 13. Juli 2009 um 23:38

    Hallo abc-user,
    das sahnige Geheimnis besteht darin, im "Fehlerfall" den Code mit Debug und/oder Trace-Anweisungen (Scite in den Tools) solange aufzufüllen, bis sich der "Fehler" bemerkbar macht. In deinem Fall ist es definitiv kein "Fehler" in der IF-Anweisung, sondern einer dieser typischen GRMBLFxx#%!-Haareraufgeschichten, z.B. Variable falsch geschrieben, oder vorher in irgendeiner Funktion den Wert geändert , oder String und Number verpennt uswusf.

    Bei "IF" ist die Suche immer einfach, denn wenn der Fall nicht eintrifft, fragt man mit "ELSE" die Alternative ab, Infos gibt es so IMMER!
    Ohne diese drecks Fehlersuche würde Programmieren wesentlich mehr Spass machen, aber der Vorteil ist, daß man Erfahrung gewinnt, solange man nicht Lernresistent ist! :thumbup:

    viel Spass beim Fehlersuchen
    Andy

  • Button in eine fremde GUI einfügen

    • Andy
    • 13. Juli 2009 um 23:17

    Hallo,
    warum so kompliziert, Toolbars lassen sich auch ohne WM_Command abfragen...

    Spoiler anzeigen
    [autoit]

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

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

    global $toolbar
    Global Enum $IDnew = 2500, $npp
    winactivate("Toolbar")
    WinWaitActive("Toolbar") ;warten bis Fenster aktiv
    $handle = WinGetHandle("Toolbar") ;handle vom Fenster holen
    cs_change($handle)

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

    while 1
    if _GUICtrlToolbar_IsButtonPressed($Toolbar, $idnew) then MsgBox(4096, "Information", "button "&$idnew&" pressed: " & _GUICtrlToolbar_IsButtonPressed($Toolbar, $idnew))
    if _GUICtrlToolbar_IsButtonPressed($Toolbar, $npp) then MsgBox(4096, "Information", "button "&$npp&" pressed: " & _GUICtrlToolbar_IsButtonPressed($Toolbar, $npp))
    wend

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

    ;hier ist nur ne kleine GUI, welches das zu manipulierende Prog starten, wartet bis das Fenster da ist und dann cs_change("Titel") ausführt

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

    Func cs_change($a)
    ;Hier wird die Toolbar des Progs gesucht und Buttons werden hinzugefügt
    $toolbar = _GUICtrlToolbar_FindToolbar($a, "")
    _GUICtrlToolbar_AddButtonSep($toolbar, 15)
    _GUICtrlToolbar_AddButton($toolbar, $IDnew, 17)
    _GUICtrlToolbar_AddButton($toolbar, $npp, 2)
    ;Bis hier funktionierts problemlos, Buttons sind in der Toolbar zu sehen
    EndFunc

    [/autoit]
  • Button in eine fremde GUI einfügen

    • Andy
    • 13. Juli 2009 um 16:01

    Hi,
    da ich heute schon halb blind geworden bin durch das ewige "indieGlaskugelgucken" bleibt dir wohl nichts anderes übrig, als dein Script zu posten.....Hellsehen kann ich noch nicht, ich arbeite aber dran!
    ciao
    andy

  • Button in eine fremde GUI einfügen

    • Andy
    • 13. Juli 2009 um 15:08

    Hallo,

    Zitat

    ch habe versucht, den WM_Command Code an meine Bedürfnisse anzupassen.
    Allerdings tut sich nichts.

    Du hast ja auch in der WM_Command nichts gemacht, um das Ereignis zu bearbeiten. Es wird beim Anklicken auf den Button in die Console der Text ausgegeben....aber was ausserdem noch passieren soll, das solltest du dort auch noch hinprogrammieren^^
    Allerdings sollte das Ereignis (was soll passieren, wenn der Button geklickt wird) nicht innerhalb der WM_Command-Funktion abgearbeitet werden, bzw die WM_Command "schnell" wieder verlassen werden, damit diese Funktion wieder für andere Ereignisse zur Verfügung stehen kann.

    Zitat

    Im Moment wird mir in der Konsole immer "Button geklickt" ausgegeben, auch wenn der Button noch nicht mal in der Toolbar existiert.

    Habe ich auch schon festgestellt, das ist aber ein Anzeigeproblem, welches sich mit geschicktem Setzen von Guisetstate() in den Griff bekommen lässt.
    ciao
    Andy

  • Programm (Script) soll AutoIt-Code ausführen.

    • Andy
    • 13. Juli 2009 um 13:58

    Hallo,
    wenn sticky, dann mit meinem Lieblingsbeispiel^^

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    $MsgBoxValue = _MsgBoxChangeButtons(4, 'This is my msgbox', 'This' & @CRLF & 'Should' & @CRLF & 'Work', 'ReBoot', 'Continue')
    If $MsgBoxValue = 6 Then MsgBox(0, 'Clicked', 'You clicked the ReBoot Button')

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

    Func _MsgBoxChangeButtons($iFlag, $sTitle, $sText, $sButton1, $sButton2 = '', $sButton3 = '', $iMBTimeOut = 0)
    Local $MBFile = FileOpen(@TempDir & '\MiscMMB.txt', 2)
    Local $MBLine1 = 'While Not WinExists("' & $sTitle & '")'
    Local $MBLine2 = ' Sleep(10)'
    Local $MBLine3 = 'WEnd'
    Local $MBLine4 = 'ControlSetText("' & $sTitle & '", "", "Button1", "' & $sButton1 & '")'
    Local $MBLine5 = 'ControlSetText("' & $sTitle & '", "", "Button2", "' & $sButton2 & '")'
    Local $MBLine6 = 'ControlSetText("' & $sTitle & '", "", "Button3", "' & $sButton3 & '")'
    If $sButton2 = '' Then
    FileWrite(@TempDir & '\MiscMMB.txt', $MBLine1 & @CRLF & $MBLine2 & @CRLF & $MBLine3 & @CRLF & $MBLine4)
    ElseIf $sButton2 <> '' And $sButton3 = '' Then
    FileWrite(@TempDir & '\MiscMMB.txt', $MBLine1 & @CRLF & $MBLine2 & _
    @CRLF & $MBLine3 & @CRLF & $MBLine4 & @CRLF & $MBLine5)
    ElseIf $sButton2 <> '' And $sButton3 <> '' Then
    FileWrite(@TempDir & '\MiscMMB.txt', $MBLine1 & @CRLF & $MBLine2 & @CRLF & _
    $MBLine3 & @CRLF & $MBLine4 & @CRLF & $MBLine5 & @CRLF & $MBLine6)
    EndIf
    $MBPID1 = Run(@AutoItExe & ' /AutoIt3ExecuteScript ' & EnvGet('TEMP') & '\MiscMMB.txt')
    $MBBox = MsgBox($iFlag, $sTitle, $sText, $iMBTimeOut)
    FileClose($MBFile)
    Do
    FileDelete(@TempDir & '\MiscMMB.txt')
    Until Not FileExists(@TempDir & '\MiscMMB.txt')
    Return $MBBox
    EndFunc

    [/autoit]

    und einen Kommentar dazu:

    Zitat

    I understand the scary part... boy, do I understand!
    Some of these guys are pros - and then there is me :)


    So gehts mir auch :D
    ciao
    Andy

  • FileRead liest nur 3 Zeichen aus Datei.

    • Andy
    • 13. Juli 2009 um 10:47

    Hallo,
    ah, ok, daß die Steuerzeichen (EOF,Nullbyte) nicht in den Anzeige-Funktionen dargestellt wurden wußte ich. Allerdings ist das auch kein Problem, denn es sind ja Steuerzeichen ^^
    Allerdings ist die Bearbeitung von Strings welche diese Steuerzeichen beinhalten doch problemlos möglich?! In Post#3 war doch garnicht von einer Anzeige die Rede (mal abgesehen von der Msgbox^^).
    Primär geht es doch um den stringsplit() , und der liefert doch ein falsches Ergebnis, da das Array aufgrund fehlendem Flag=1 falsch "gefüttert" wird!
    Mit

    [autoit]

    #include <Array.au3>
    $Testfile = FileRead("Testfile.dat")
    $Var = StringSplit($Testfile, "waiting",1) ;wenn flag=1 nicht angegeben, dann
    $Var = StringSplit($Var[2], "building",1) ;werden ALLE Zeichen als Delimiter angesehen....
    MsgBox(64, "Ende", $Var[1])

    [/autoit]


    funktioniert das nämlich einwandfrei....
    ciao
    Andy

  • If Abfrage spinnt?

    • Andy
    • 13. Juli 2009 um 08:25

    Hallo,
    wo ist das Problem?

    [autoit]

    dim $bestand[2]=[20,-5]

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

    Msgbox(1,"Blub",$bestand[0])

    if $bestand[0] >= 1 Then
    msgbox(0,0,"Bestand ist größer/gleich 1, der Bestand ist: "&$bestand[0])
    Endif

    [/autoit]
  • Programm (Script) soll AutoIt-Code ausführen.

    • Andy
    • 12. Juli 2009 um 19:13

    Hallo,
    ggf reicht schon der Befehl Execute()

    [autoit]

    $anweisung='msgbox(0,"Anweisung","Anweisung wurde ausgeführt!")'
    execute($anweisung)

    [/autoit]


    ciao
    Andy

  • FileRead liest nur 3 Zeichen aus Datei.

    • Andy
    • 12. Juli 2009 um 17:44

    Was war das konkrete Problem? Und wie wurde es gelöst?

  • Button in eine fremde GUI einfügen

    • Andy
    • 12. Juli 2009 um 01:32

    oder so, entweder sehr einfach....

    Spoiler anzeigen
    [autoit]

    #include <GuiButton.au3>
    #include <WindowsConstants.au3>

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

    opt("WinTitleMatchMode",2)

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

    $txt = "AutoIt v3 Window Info" ;Fenstertitel
    Run("C:\Programme\AutoIt3\Au3Info.exe") ;infotool starten
    WinWaitActive($txt) ;warten bis Fenster aktiv
    Local $handle = WinGetHandle($txt) ;handle vom Fenster holen
    Local $child = GUICreate("child", 80, 30, 320, 30, $WS_CHILD, -1, $handle) ; childwindow basteln in Buttongröße
    Local $btn = GUICtrlCreateButton("Hallo", 0, 0, 80, 30, -1, -1) ;Button ins childwindow
    Local $button1 = ControlGetHandle($child, "", $btn) ;für evtl. WM_Manipulationen
    GUISetState()
    While 1
    If Not WinExists($txt) Then Exit
    $msg = GUIGetMsg()
    If $msg = $btn Then MsgBox(262144, 0, "Hallo-Button gedrückt!")
    WEnd

    [/autoit]

    oder mit vollem Zugriff über die WindowsMessages mittels WM_Command

    Spoiler anzeigen
    [autoit]

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

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    ;GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND") ;infos

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

    $txt = "AutoIt v3 Window Info" ;Fenstertitel
    Run("C:\Programme\AutoIt3\Au3Info.exe") ;infotool starten
    WinWaitActive($txt) ;warten bis Fenster aktiv
    Local $handle = WinGetHandle($txt) ;handle vom Fenster holen
    Local $child = GUICreate("child", 80, 100, 320, 30, $WS_CHILD, -1, $handle) ; childwindow basteln in Buttongröße
    Local $btn = GUICtrlCreateButton("Hallo", 0, 0, 80, 30, -1, -1) ;Button ins childwindow
    Local $button1 = ControlGetHandle($child, "", $btn) ;für evtl. WM_Command-Manipulationen
    $btn2=_GUICtrlButton_Create($child,"Button",0,50,80,30); noch einen....
    GUISetState()
    While 1
    If Not WinExists($txt) Then Exit
    $msg = GUIGetMsg()
    If $msg = $btn Then MsgBox(262144, 0, "Hallo gedrückt!") ;die messages kommen nur an, wenn zeile 63 auskommentiert ist!
    If $msg = $btn2 Then MsgBox(262144, 0, "Button gedrückt!") ;kommt nie an, weil btn2 ein handle und keine ctrlid ist!
    WEnd

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

    ; React on a button click
    Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    #forceref $hWnd, $Msg
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0x0000FFFF)
    Local $hCtrl = $lParam
    Local $sText = ""
    consolewrite("Button geklickt"&@crlf)
    Switch $hCtrl
    Case $btn2,$button1 ;wenn einer der beiden buttons geklickt wurde
    Switch $nNotifyCode
    Case $BN_CLICKED
    $sText = "$BN_CLICKED" & @CRLF
    Case $BN_PAINT
    $sText = "$BN_PAINT" & @CRLF
    Case $BN_PUSHED, $BN_HILITE
    $sText = "$BN_PUSHED, $BN_HILITE" & @CRLF
    Case $BN_UNPUSHED, $BN_UNHILITE
    $sText = "$BN_UNPUSHED" & @CRLF
    Case $BN_DISABLE
    $sText = "$BN_DISABLE" & @CRLF
    Case $BN_DBLCLK, $BN_DOUBLECLICKED
    $sText = "$BN_DBLCLK, $BN_DOUBLECLICKED" & @CRLF
    Case $BN_SETFOCUS
    $sText = "$BN_SETFOCUS" & @CRLF
    Case $BN_KILLFOCUS
    $sText = "$BN_KILLFOCUS" & @CRLF
    EndSwitch
    consolewrite($sText & _
    "-----------------------------" & @CRLF & _
    "WM_COMMAND - Infos:" & @CRLF & _
    "-----------------------------" & @CRLF & _
    "Code" & @TAB & ":" & $nNotifyCode & @CRLF & _
    "CtrlID" & @TAB & ":" & $nID & @CRLF & _
    "CtrlHWnd:" & $hCtrl & @CRLF & _
    _GUICtrlButton_GetText($hCtrl) & @CRLF)
    ;Return 0 ; Only workout clicking on the button
    EndSwitch
    ; Proceed the default Autoit3 internal message commands.
    ; You also can complete let the line out.
    ; !!! But only 'Return' (without any value) will not proceed
    ; the default Autoit3-message in the future !!!
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    $nNotifyCode = BitShift($wParam, 16)
    $nID = BitAND($wParam, 0x0000FFFF)
    $hCtrl = $lParam

    If $nID <> 2 And $nNotifyCode = 0 Then ; Check for IDCANCEL - 2
    ; Ownerdrawn buttons don't send something by pressing ENTER
    ; So IDOK - 1 comes up, now check for the control that has the current focus
    If $nID = 1 Then
    $hFocus = DllCall("user32.dll", "hwnd", "GetFocus")
    $nCtrlID = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hFocus[0])
    PostButtonClick($hWnd, $nCtrlID[0])
    Else
    MsgBox(0, "MY_WM_COMMAND", "GUIHWnd" & @TAB & ":" & $hWnd & @LF & _
    "MsgID" & @TAB & ":" & $Msg & @LF & _
    "wParam" & @TAB & ":" & $wParam & @LF & _
    "lParam" & @TAB & ":" & $lParam & @LF & @LF & _
    "WM_COMMAND - Infos:" & @LF & _
    "-----------------------------" & @LF & _
    "Code" & @TAB & ":" & $nNotifyCode & @LF & _
    "CtrlID" & @TAB & ":" & $nID & @LF & _
    "CtrlHWnd" & @TAB & ":" & $hCtrl)
    EndIf
    Return 0 ; Only workout clicking on the button
    EndIf
    ; Proceed the default Autoit3 internal message commands.
    ; You also can complete let the line out.
    ; !!! But only 'Return' (without any value) will not proceed
    ; the default Autoit3-message in the future !!!
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_COMMAND

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

    ; RePost a WM_COMMAND message to a ctrl in a gui window
    Func PostButtonClick($hWnd, $nCtrlID)
    DllCall("user32.dll", "int", "PostMessage", _
    "hwnd", $hWnd, _
    "int", $WM_COMMAND, _
    "int", BitAND($nCtrlID, 0x0000FFFF), _
    "hwnd", GUICtrlGetHandle($nCtrlID))
    EndFunc ;==>PostButtonClick

    [/autoit]

    In den Kommentaren findet man viele Hinweise!


    ciao
    Andy

  • Hilfe für einen Anfänger bitte ....

    • Andy
    • 10. Juli 2009 um 19:58

    Problem ist, daß alle Popups dieselbe #CLASS haben.
    Habe mal in der Hilfe gestöbert und bissl gebastelt:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #AutoIt3Wrapper_Au3Check_Parameters= -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <WinAPI.au3>

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

    while 1
    _Main()
    wend

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

    Func _Main()
    Local $aWindows, $i, $text
    $aWindows = _WinAPI_EnumWindowspopup()

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

    For $i = 1 To $aWindows[0][0]
    $text = "Window Handle: " & $aWindows[$i][0] & @LF
    $text &= "Window Class: " & $aWindows[$i][1] & @LF
    $text &= "Window Title: " & WinGetTitle($aWindows[$i][0]) & @LF
    $text &= "Window Text: " & WinGetText($aWindows[$i][0]) & @LF
    $text &= "Window Process: " & WinGetProcess($aWindows[$i][0])
    MsgBox(262144, "Item " & $i & " of " & UBound($aWindows) - 1, $text,1)
    ;ControlClick ( $aWindows[$i][0], "Undo","" )
    Next
    EndFunc ;==>_Main

    [/autoit]


    Script starten und mit dem Mauszeiger irgendwo hingehen, wo ein Tooltip existiert(Schnellstartleiste oder Scitebuttons), sobald der Tooltip erscheint, meldet sich auch die MsgBox. Als TEXT wird der Tooltiptext angezeigt.
    Klickt man aber RECHTS ins Scitefenster (oder wo es sonst Kontextmenüs gibt) dann erscheint zwar die msgbox und gibt den Handle des Kontextmenüs zurück, aber keinerlei weitere Info zum Fenster, Text, Controls usw.....
    Lässt man das Script nun mit der aktivierten (jetzt auskommentierten Zeile 20) ControlClick() laufen, dann klickt Controlklick auf den Handle, irgendwas (in dem Fall nichts sichtbares) passiert und das Kontextmenü wird geschlossen. Aha, Controlklicken geht also, fehlt nur noch die ID vom Menüitem..... ;(

    ciao
    Andy

  • frage zu _arraysort und bubblesort

    • Andy
    • 10. Juli 2009 um 19:43
    Zitat

    selbes resultat mit bubblesort und _arraysort.

    Naja, dein bubblesort() ist definitiv FALSCH. Daher kann das Ergebnis nicht stimmen, ändere mal in Zeile 22 von ($n-1) in ($n-2), deine Indizierung stimmt vorne und hinten nicht.
    bsp:

    [autoit]

    dim $a[3]=[1,2,3]

    [/autoit]


    dann ist a[0]=1, a[1]=2 und a[2]=3
    somit ist n=2 !!! und nicht 3....

    [autoit]

    ubound()

    [/autoit]

    ist dein Freund...

    Spoiler anzeigen
    [autoit]

    #Include <Array.au3>
    HotKeySet("{F4}", "sort")

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

    dim $w[10]=[3,5,7,9,8,6,4,4,1,0]
    global $n=10

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

    While 1
    Sleep(125)
    WEnd

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

    Func sort()
    _ArrayDisplay($w)
    bubble_sort()
    _ArrayDisplay($w)
    Exit
    EndFunc

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

    Func bubble_sort()
    Do
    For $i = 0 to ($n - 2)
    If $w[$i] > $w[$i + 1] Then
    _ArraySwap($w[$i + 1], $w[$i])
    EndIf
    Next
    $n = $n - 1
    Until $n = 1
    EndFunc

    [/autoit]

    ...so gehts...besser ist aber immer in den Schleifen bis ubound()-1 zu zählen, in deinem speziellen Fall ist es aber ubound()-1-1, du vergleichst ja mit einem $i+1...

    Zitat

    der algorithmus, den ich verwendete, funktioniert.

    ...nach Änderungen jetzt auch ohne Fehler ;)

  • frage zu _arraysort und bubblesort

    • Andy
    • 10. Juli 2009 um 13:06

    Hallo,
    du solltest auch sortieren in deinem selbstgeschriebenen Algorithmus!
    Zzt "sortierst" (tauscht) du nur die gerade gelesene mit der nächsten Zahl. d.h. ist deine aktuelle Zahl kleiner wie die [$i-5] z.B., dann ist das deinem "Algorithmus" egal. Eine zweite Schleife muss her^^
    Aber was funktioniert nicht an arraysort() ?

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Dim $array1[10] = [233, 45, 67, 78, 299, 12, 91, 45, 57, 0]
    $array2 = $array1
    $array3 = $array1

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

    MsgBox(0, 0, "Array1", 2)
    _ArrayDisplay($array1)

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

    MsgBox(0, 0, "Array1 aufsteigend sortiert", 2)
    _ArraySort($array1)
    _ArrayDisplay($array1)

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

    MsgBox(0, 0, "Array1 absteigend sortiert", 2)
    _ArraySort($array2, 1)
    _ArrayDisplay($array2)

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

    ;zu fuss....
    $aufsteigend = MsgBox(4, 0, "Array1 aufsteigend sortieren?")
    For $i = 0 To UBound($array3) - 1
    For $w = 0 To UBound($array3) - 1
    If $aufsteigend = 6 Then
    If $array3[$w] > $array3[$i] Then _ArraySwap($array3[$w], $array3[$i])
    Else
    If $array3[$w] <= $array3[$i] Then _ArraySwap($array3[$w], $array3[$i])
    EndIf
    Next
    Next
    _ArrayDisplay($array3)

    [/autoit]
  • GUI-Control's am GUI-Hintergrund anpassen.

    • Andy
    • 10. Juli 2009 um 11:57

    Hi, seltsamerweise muss erst das pic und dann erst das label erstellt werden, damit es funktioniert

    Spoiler anzeigen
    [autoit]

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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 339, 493, 192, 124)
    $var = FileOpenDialog("", @WindowsDir & "\", "Bilder (*.jpg;*.bmp)", 1 + 4 )

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

    $Pic1 = GUICtrlCreatePic($var, 0, 0, 337, 489, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Label1 = GUICtrlCreateLabel("Hallo, ich bin der Test Label!", 80, 24, 139, 17)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]
  • Hilfe für einen Anfänger bitte ....

    • Andy
    • 10. Juli 2009 um 11:00

    Hallo,
    wie sieht denn die Ausgabe des AutoIt-Window Info-Tools aus wenn du die Liste anklickst? (Screenshot?!)
    Rumrätseln und gaaaanz feste in die Glaskugel gucken hilft niemandem, am wenigsten dir....
    ciao
    Andy

  • Q: Selbstmodifizierendes Programm möglich?

    • Andy
    • 10. Juli 2009 um 09:23

    Hallo Lutz,

    Zitat

    Als etwas älter Mensch...

    ...willkommen im Club ;)

    Zitat

    Der Befehl EXECUTE geht schon in diese Richtung ist aber scheinbar auf eine Zeile beschränkt. Die andere Lösung, während der Laufzeit ein neues Skript zu erzeugen und es dann zu starten, erscheint mir zu "unelegant".

    Eigentlich ist ja eine Interpretersprache prädestiniert für dein Vorhaben, solange "Klartext" im Speicher steht.
    "Früher" haben wir an den Stellen im Code, die später modifiziert bzw. erweitert werden sollten, einfach NOP´s hingesetzt, dort konnte dann das Programm hinschreiben was es wollte, ausführbare *.COM-Dateien waren da eine Offenbarung.
    Eigentlich müsste man sich mal anschauen, in welchem "Format" AutoIt in den Speicher schreibt. Beim Compilieren wird der Code jedenfalls verschlüsselt, aber im Speicher? Habe jetzt auf Anhieb keine Ahnung wie der Quellcode im Speicher "aussieht", man müsste mal schauen^^, oder jemanden Fragen, der davon Ahnung hat....
    ciao
    Andy

    Btw, was ist eigentlich dein konkretes Problem?

  • Q: Selbstmodifizierendes Programm möglich?

    • Andy
    • 9. Juli 2009 um 16:57

    Hi,
    selbstmodifizierende Code ist schon seit einigen Jahren (Jahrzehnten) "out".
    Funzt natürlich nur mit Maschinensprache (Assembler ftw) und insbesondere muss man höllisch auf Sachen aufpassen, von denen 99% aller "Hochsprachenfreaks" keine Ahnung haben (müssen), weil der Compiler das alles erledigt, Speichermanagement, Segmente, Offsets, Real- Protectedmode, uswusf. Als 8088/8086-Programmierer hat man da nur neidisch auf die Motorolajungs (68000er) mit ihrem linearen Adressraum geschielt...

    Aber auch mit AutoIt ist es möglich, während der Laufzeit den Speicher zu verändern, guck mal nach der memory-udf. Problematisch wird das ganze, wenn bei neuen Prozessoren der Programmcode vom Speicher direkt in den Cache gelesenund von dort abgearbeitet wird...viel Spass beim abfragen der Cachelines....

    Das VB-Beispiel-Script verändert übrigens in keinster Weise den Code zur Laufzeit, sondern den Sourccode.
    Wenn du so etwas machen willst, kein Problem!

    ciao
    Andy

  • Ein Teil/Bereich eines Fensters aktivieren/vordergrund bringen

    • Andy
    • 8. Juli 2009 um 18:33

    Hallo Argonmember,
    genau wie du (mit [TITLE: XXXX CLASS:YYYYY]) greife ich so auf "Fensterteile" zu, die anders nicht zu erreichen sind.
    Scheint zzt. die einzige Möglichkeit zu sein, man weiss zwar nicht GENAU, was in dem angesprochenen Fenster abläuft (da keine Rückmeldung über Controls möglich) aber ich bin da pragmatisch, hauptsache es läuft^^
    ciao
    Andy

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™