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

Beiträge von KloMeister

  • Button

    • KloMeister
    • 18. September 2014 um 14:31

    Vielleicht ist es einfacher, einfach vorher einen unsichtbaren Button zu erstellen, der dann einfach nur "visible" geschaltet wird?

  • Winamp öffnen und taste übergeben

    • KloMeister
    • 12. September 2014 um 08:59

    Die bessere Möglichkeit wäre es, Winamp über API (Application Programming Interface) fernzusteuern.

    Winamp hat diverse Steuerungsmöglichkeiten von sich aus eingebaut, ohne das man den Umweg gehen muss und Tasten(Kombinationen) bei aktivem Fenster senden muss.

    Natürlich ist die Deklaration der Commands und das Einbinden erstmal etwas komplizierter, aber danach wird alles besser ;)

    Hier gibt es die Commands: http://forums.winamp.com/showthread.php?threadid=180297


    Das ist kein "muss", aber ich wollte zumindest den besseren Weg mal erwähnen.


    So hat es bei mir funktioniert:

    [autoit]

    ;Dekleration der API Commands
    Global Const $cWA_WM_COMMAND = 0x0111
    Global Const $WINAMP_BUTTON2 = 40045
    ShellExecute("Winamp") ;Winamp Ausführen
    Local $hWinamp = WinWait("[CLASS:Winamp v1.x]") ;Auf Winamp warten und das Handle herausbekommen
    DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWinamp, "int", $cWA_WM_COMMAND, "int", $WINAMP_BUTTON2, "int", 0) ;Druecke Winamp Play-Knopf

    [/autoit]
  • Programm messages protokollieren

    • KloMeister
    • 15. August 2014 um 13:22

    Ich glaube nicht, dass man da so einfach etwas abfangen kann.
    Es handelt sich hier ja nicht um eine Schnittstelle, über die diverse Datenpakete wie in einer Netzwerkverbindung gesendet werden.

    Es gibt die Möglichkeit mit "Memory Software" im Prozesspeicher zu schauen, was sich dort so ändert, während du das Logo entsprechend ein-/ausschaltest.

    Mit fortgeschrittenen Kenntnissen im Assembler Bereich, kommst du da sicher weiter.

    Wenn du Glück hast, wird der Befehl aus einer .dll "gecalled" und du hast evtl. die Möglichkeit diesen Aufruf von deiner Anwendung aus, auszuführen. Das klappt aber auch nur, wenn du die entsprechende .dll mit dem entsprechendem Befehl kennst.


    Kann sein dass es da noch andere Möglichkeiten, gibt, aber das wäre so mein Einfall. Aber ich kann dir da von hier aus nicht helfen, dazu bräuchte ich die entsprechende Tastatur und Software.

  • Fenster vergrößern ändern - WinMove

    • KloMeister
    • 28. Mai 2014 um 11:10

    Jo, dankeschön, dass funktioniert.

  • Fenster vergrößern ändern - WinMove

    • KloMeister
    • 28. Mai 2014 um 09:03

    Hi,

    Ich möchte meine Form einer bestimmten Gegebenheit anpassen. Leider habe ich ein Problem mit WinMove. Mit der Funktion WinMove, wird das Fenster immer etwas kleiner, als es eig. werden müsste.

    Um das zu veranschaulichen, habe ich mal diesen Code vorbereitet:

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WindowsConstants.au3>
    Example()
    Func Example()
    Local $hGUI = GUICreate("Example")
    Local $iOK = GUICtrlCreateButton("OK", 310, 370, 85, 25)
    $hGui = GUICreate("Test", 600, 480,10,10)
    GUISetState(@SW_SHOW, $hGUI)

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

    sleep(3000)
    Local $aPos = WinGetPos($hGui)
    WinMove($hGui, "",$aPos[0],$aPos[1],600, 480)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $iOK
    ExitLoop

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

    EndSwitch
    WEnd

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

    [/code]

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


    Das Fenster wird auf die Größe 600x 480 mit WinMove verändert,es wird jedoch kleiner, als das vorher mit 600x 480 Pixel große über GUICreate erstellte Fenster.

    Idealerweise sollte die Fenstergröße dann gleich bleiben.

    Warum ist das so, welche Logik steckt dahinter? Ich könnte jetzt zwar durch herausfinden eine bestimmte Anzahl Pixel dazu addieren. Dann weiß ich aber nicht ob das Betriebssystem unabhängig ist oder von Windows-Styles beeinflusst wird etc.

  • Viele Controls sinnvoll unterbingen

    • KloMeister
    • 22. Mai 2014 um 14:26

    Das ist einfach nur ein standard Label mit grauem Hintergrund. Um der Listbox und dem Label befindet sich noch ein Frame.

    Hol dir den "Koda Form Designer", damit kannst du relativ easy GUI's erstellen.

  • Viele Controls sinnvoll unterbingen

    • KloMeister
    • 20. Mai 2014 um 14:29

    Dein Vorschlag ist generell gut, aber in der Praxis nicht ganz so geeignet.

    Die GDI+ Effekt Funktionen haben teilweise unterschiedliche Schrittweiten. So gibt es Schrittweiten von -180 bis +180, teilweise nur von 0-100 etc.

    Es könnte relativ nervig werden, wenn man z.B 100 Stufen manuell klicken muss. Desweiteren sieht man auch die Minimal und Maximalwerte nicht bei einer "nur Zahl-Anzeige". Bei einem Slider kann man zumindest optisch erahnen wie weit der Wert noch einstellbar wäre.


    Das man aber zusätzlich noch eine Zahl neben dem Slider einblendet oder einen Slider verwendet der auch per Buttons einstellbar ist, das wäre definitiv sinnvoll.

  • Viele Controls sinnvoll unterbingen

    • KloMeister
    • 20. Mai 2014 um 11:43

    Hallo,

    Ich arbeite gerade an einem Multiple-Image-Converter Programm, mit dem man z.B. seine Urlaubsbilder schnell und einfach anpassen und verkleinern kann. Dabei besteht die Möglichkeit alle Bilder mit den selben Einstellungen zu konvertieren, jedoch möchte ich auch die Möglichkeit anbieten, jedes Bild nacheinander anzupassen zu können (Was z.B. für Fotografen für Farbbalance etc.) sinnvoll ist.

    Besonderen Wert möchte ich auf eine einfache Bedienung legen. Man soll sich nicht wie bei z.B. Photoshop oder Gimp durch 100 Menüs klicken müssen, um Bildparameter anzupassen, ich möchte eine sehr einfache "Step by Step" Oberfläche anbieten.

    Was seht ihr für Möglichkeiten um übersichtlich, aber technisch einfach für den Nutzer, mehrere Controls darzustellen?

    Eventuell dachte ich an ein Tab-Control?

    Ich wollte mir einfach mal mehrere Ratschläge und Möglichkeiten von euch einholen.


    Bisher sieht das ganze so aus [Anhang] (Was mir jedoch nicht gefällt). Da noch weitere Effektmöglichkeiten und Anzeigen (Bildauflösung vorher/nacher, Dateigröße vorher/nacher, etc) dazukommen, wird es nochmals mehr.

    Mit meiner aktuellen Darstellung wird das definitiv zu sehr überladen und wirkt zusätzlich unprofessionell.

    Danke schonmal

    Dateien

    Prog_Unready.png 1,26 MB – 0 Downloads
  • Wenn Fenster inaktiv wird, dann - Error: Subscript used with non-Array variable.

    • KloMeister
    • 8. Juli 2013 um 22:46

    Vielen Dank.

    Mit der Replace Funktion konnte ich das ganze mit wenigen Klick ausbessern.

  • Wenn Fenster inaktiv wird, dann - Error: Subscript used with non-Array variable.

    • KloMeister
    • 8. Juli 2013 um 22:24

    Schönen guten Tag,

    Ich habe Pong programmiert (Einfach mal so, aus langerweile, irgendetwas muss man ja mal machen). Nun habe ich allerdings einen mir nicht erklärbaren Fehler, der entsteht wenn das Fenster inaktiv wird bzw. minimiert wird (Wobei der Fehler beim minimieren bereits durch eine Extra-Funktion korrigiert ist).

    Theoretisch könnte ich durch eine etwas kompliziertere GUI-Abfrage Abfrage, die Inaktivität des Fensters erkennen und das Pong Skript pausieren (So habe ich das bereits auch schon beim minimieren eingebaut). Das ist allerdings nur eine nicht perfekte Not-Lösung.

    Mir geht es eher darum zu erfahren warum dieser Fehler überhaupt eintritt und ob er nicht anderwärtig ausgebessert werden kann.

    Hier ist der Source-Code:


    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiEdit.au3>
    Opt("GUIOnEventMode", 1)
    $mainwindow = GUICreate("Pong - v0.12 Alpha - - - by KloMeister", 602, 250)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "minimiert")
    GUISetOnEvent($GUI_EVENT_RESTORE, "maximiert")
    $ball = GUICtrlCreateLabel("•", 2, 2)
    $okbutton = GUICtrlCreateButton("Start Game", 250, 50, 100)
    GUICtrlSetOnEvent($okbutton, "OKButton")
    $Checkbox1 = GUICtrlCreateCheckbox("CPU Enable", 255, 80, 185, 25)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlCreateLabel("________________________________________________________________________________________________________________", -8, -2, 716, 14)
    GUICtrlCreateLabel("¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯", -8, 200, 716, 14)
    $controls1 = GUICtrlCreateLabel("Control: w = up, s = down", 25, 104, 124, 17)
    $controls2 = GUICtrlCreateLabel("Control: Arowkeys", 490, 104, 100, 17)
    $PtP1 = GUICtrlCreateLabel("Punkte P1:", 498, 230, 57, 17)
    $PtP2= GUICtrlCreateLabel("Punkte P2:", 8, 230, 57, 17)
    $PointsP1 = GUICtrlCreateLabel("0", 562, 230)
    $PointsP2 = GUICtrlCreateLabel("0", 72, 230)
    Local $Variable
    Local $hoch
    Local $hoch2
    local $ballrechts
    local $ballrunter
    local $ballrichtunghoch
    local $ballrichtungrechts
    local $StartEnable
    local $bothoch
    local $Reaktion
    local $idlemoverichtung
    Local $aPos
    Local $bPos
    Local $ingame
    $bothoch = 1
    $Reaktion = 0
    $ingame = 0
    Call("randomstart")
    $Paddel1 = GUICtrlCreateLabel("", 10, 70, 4, 36)
    GUICtrlSetBkColor(-1, 0x000000)
    $Paddel2 = GUICtrlCreateLabel("", 590, 70, 4, 36)
    GUICtrlSetBkColor(-1, 0x000000)
    $StartEnable = 0
    GUISetState(@SW_SHOW)
    HotKeySet("{UP}", "TOP")
    HotKeySet("{DOWN}", "DOWN")
    HotKeySet("{w}", "TOP2")
    HotKeySet("{s}", "DOWN2")
    While 1
    Sleep(25)
    if $StartEnable = 1 then ;Abfrage ob Gamestart - Button gedrueckt
    ;Paddel Abfrage und Bewegung Player1
    if GUICtrlRead($Checkbox1) = 4 then ;Checke if CPU
    $aPos = ControlGetPos("", "", $Paddel1)
    if $aPos[1] >160 then
    GUICtrlSetPos($Paddel1, 10, 160)
    endif
    if $aPos[1] <12 then
    GUICtrlSetPos($Paddel1, 10, 12)
    endif
    if $hoch = 1 Then
    $aPos = ControlGetPos("", "", $Paddel1)
    GUICtrlSetPos($Paddel1, 10, $aPos[1] -4)
    ElseIf $hoch = 2 then
    Local $aPos = ControlGetPos("", "", $Paddel1)
    GUICtrlSetPos($Paddel1, 10, $aPos[1] +4)
    EndIf
    Else
    ;wenn CPU
    if $ballrichtungrechts = 1 then
    Call("idlearound")
    Else
    $aPos = ControlGetPos("", "", $Paddel1)
    $bPos = ControlGetPos("", "", $ball)
    if $Reaktion = 2 then
    if $aPos[1] + random(9,20) < $bPos[1] Then
    $bothoch = 1
    Else
    $bothoch = 0
    endif
    $Reaktion = 0
    endif
    $Reaktion = $Reaktion +1
    if $bpos[0] <175 then
    if $bothoch = 1 Then
    $aPos = ControlGetPos("", "", $Paddel1)
    GUICtrlSetPos($Paddel1, 10, $aPos[1] +6)
    Else
    $aPos = ControlGetPos("", "", $Paddel1)
    GUICtrlSetPos($Paddel1, 10, $aPos[1] -6)
    endif
    Else
    Call("idlearound")
    endif
    endif
    endif
    ;Paddel Abfrage und Bewegung Player2
    $aPos = ControlGetPos("", "", $Paddel2)
    if $aPos[1] >160 then
    GUICtrlSetPos($Paddel2, 590, 160)
    endif
    if $aPos[1] <12 then
    GUICtrlSetPos($Paddel2, 590, 12)
    endif
    if $hoch2 = 1 Then
    $aPos = ControlGetPos("", "", $Paddel2)
    GUICtrlSetPos($Paddel2, 590, $aPos[1] -4)
    ElseIf $hoch2 = 2 then
    Local $aPos = ControlGetPos("", "", $Paddel2)
    GUICtrlSetPos($Paddel2, 590, $aPos[1] +4)
    EndIf
    ;Ballrichtung
    if $ballrichtunghoch= 0 then
    $aPos = ControlGetPos("", "", $ball)
    GUICtrlSetPos($ball, $aPos[0] , $aPos[1] + $ballrunter)
    Else
    $aPos = ControlGetPos("", "", $ball)
    GUICtrlSetPos($ball, $aPos[0] , $aPos[1] - $ballrunter)
    EndIf
    if $ballrichtungrechts= 0 then
    $aPos = ControlGetPos("", "", $ball)
    GUICtrlSetPos($ball, $aPos[0] - $ballrechts, $aPos[1])
    Else
    $aPos = ControlGetPos("", "", $ball)
    GUICtrlSetPos($ball, $aPos[0] + $ballrechts , $aPos[1])
    EndIf
    ;Ballabfrage fuer Waende
    $aPos = ControlGetPos("", "", $ball)
    if $aPos[1] >190 then
    $ballrichtunghoch=1
    endif
    $aPos = ControlGetPos("", "", $ball)
    if $aPos[1] <10 then
    $ballrichtunghoch=0
    endif
    ;Abfrage Ball - Paddelkontakt P1
    $aPos = ControlGetPos("", "", $Paddel2)
    $bPos = ControlGetPos("", "", $ball)
    if $bPos[0] >585 then
    if $bPos[1] - $aPos[1] >-7 then
    if $bPos[1] - $aPos[1] <34 then
    $ballrichtungrechts=0
    $ballrechts = $ballrechts * 1 + round(random(0.1,0.5),2)
    $ballrunter = $ballrunter * 1 + round(random(0.1,0.3),2)

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

    Else ;Beim nicht Ball bekommen
    _GUICtrlEdit_SetText($PointsP2, _GUICtrlEdit_GetText($PointsP2) +1)
    msgbox (0,"","Win P2")
    Call("randomstart")
    endif
    Else
    _GUICtrlEdit_SetText($PointsP2, _GUICtrlEdit_GetText($PointsP2) +1)
    msgbox (0,"","Win P2")
    Call("randomstart")
    endif
    endif
    ;Abfrage Ball - Paddelkontakt P2
    $aPos = ControlGetPos("", "", $Paddel1)
    $bPos = ControlGetPos("", "", $ball)
    if $bPos[0] <15 then
    if $bPos[1] - $aPos[1] >-7 then
    if $bPos[1] - $aPos[1] <34 then
    $ballrichtungrechts=1
    $ballrechts = $ballrechts * 1 + round(random(0.1,0.5),2)
    $ballrunter = $ballrunter * 1 + round(random(0.1,0.3),2)
    Else ;Beim nicht Ball bekommen
    _GUICtrlEdit_SetText($PointsP1, _GUICtrlEdit_GetText($PointsP1) +1)
    msgbox (0,"","Win P1")
    Call("randomstart")
    endif
    Else
    _GUICtrlEdit_SetText($PointsP1, _GUICtrlEdit_GetText($PointsP1) +1)
    msgbox (0,"","Win P1")
    Call("randomstart")
    endif
    endif
    endif
    WEnd
    ;Tastenabfrage
    Func TOP()
    $hoch2 = 1
    EndFunc ;
    Func DOWN()
    $hoch2 = 2
    EndFunc ;
    Func TOP2()
    $hoch = 1
    EndFunc ;
    Func DOWN2()
    $hoch = 2
    EndFunc ;
    Func OKButton()
    $StartEnable = 1
    $ingame = 1
    ControlHide ( "", "", $okbutton)
    ControlHide ( "", "", $Checkbox1)
    ControlHide ( "", "", $controls1)
    ControlHide ( "", "", $controls2)
    if GUICtrlRead($Checkbox1) = 1 then $CPU= GUICtrlCreateLabel("CPU Enabled", 8, 210)
    EndFunc
    Func CLOSEClicked()
    Exit
    EndFunc
    Func minimiert()
    $StartEnable = 0
    EndFunc
    Func maximiert()
    if $ingame = 1 then $StartEnable = 1
    EndFunc
    func idlearound()
    $aPos = ControlGetPos("", "", $Paddel1)
    if $aPos[1] <12 then
    $idlemoverichtung = 0
    endif
    if $aPos[1] >160 then
    $idlemoverichtung = 1
    endif
    if $idlemoverichtung = 1 then
    Local $aPos = ControlGetPos("", "", $Paddel1)
    GUICtrlSetPos($Paddel1, 10, $aPos[1] -6)
    Else
    Local $aPos = ControlGetPos("", "", $Paddel1)
    GUICtrlSetPos($Paddel1, 10, $aPos[1] +6)
    endif
    EndFunc
    Func randomstart()
    $random = random(1,4,1)
    select
    case $random = 1
    GUICtrlSetPos($ball, 300, 90)
    $ballrechts = 3
    $ballrunter = 2
    $ballrichtunghoch = 0
    $ballrichtungrechts = 1
    case $random = 2
    GUICtrlSetPos($ball, 300, 90)
    $ballrechts = 3
    $ballrunter = 2
    $ballrichtunghoch = 1
    $ballrichtungrechts = 1
    case $random = 3
    GUICtrlSetPos($ball, 300, 90)
    $ballrechts = 3
    $ballrunter = 2
    $ballrichtunghoch = 1
    $ballrichtungrechts = 0
    case $random = 4
    GUICtrlSetPos($ball, 300, 90)
    $ballrechts = 3
    $ballrunter = 2
    $ballrichtunghoch = 0
    $ballrichtungrechts = 0
    EndSelect
    endfunc

    [/autoit]
  • WakeUP des Standby Modus erkennen?

    • KloMeister
    • 12. April 2012 um 23:02

    Alles klar, das funktioniert schonmal unter Windows 7. Unter XP hab ichs noch nicht getestet

  • WakeUP des Standby Modus erkennen?

    • KloMeister
    • 12. April 2012 um 22:02

    Ich möchte gerne immer eine bestimmte Aktion auslösen, wenn der Computer aus dem Standby Modus aufwacht.

    Gibt es da spezielle Methoden, wie man das erkennen kann?

  • Mehrere Funktionen paralell ablaufen lassen?

    • KloMeister
    • 21. Dezember 2011 um 01:48

    Hier hab ich auch noch eine Möglichkeit herausgefunden:

    So kann man mit Hilfe einer Timerschleife und einer selbst festgelegten Zeit des Timers, eine Variable auf einen Wert prüfen, ohne das andere Funktionen dabei gestoppt werden, wie es z.B bei einem Loop der Fall wäre

    Ist aber wohl indirekt das selbe wie AdlibRegister? oder gibt es da einen Unterschied?


    [autoit]

    Global $Label, $i = 0
    Global $Label2, $i2 = 0
    $hForm = GUICreate('Test', 400, 400)
    $Label = GUICtrlCreateLabel('', 20, 20, 100, 16)
    $Label2 = GUICtrlCreateLabel('', 20, 40, 100, 16)
    GUISetState()
    $hDll = DllCallbackRegister('_Timer', 'none', '')
    DllCall('user32.dll', 'int', 'SetTimer', 'hwnd', 0, 'int', 0, 'int', 250, 'ptr', DllCallbackGetPtr($hDll))
    $hDll = DllCallbackRegister('_Timer2', 'none', '')
    DllCall('user32.dll', 'int', 'SetTimer', 'hwnd', 0, 'int', 0, 'int', 500, 'ptr', DllCallbackGetPtr($hDll))

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

    Do
    Until GUIGetMsg() = -3
    Func _Timer()
    $i += 1
    GUICtrlSetData($Label, $i)
    if $i = 10 then MsgBox(1,"","Timer1 Zahl ist 10")

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

    EndFunc ;==>_
    Func _Timer2()
    $i2 += 1
    GUICtrlSetData($Label2, $i2)
    if $i2 = 10 then MsgBox(1,"","Timer2 Zahl ist 10")
    EndFunc ;==>_

    [/autoit]
  • Mehrere Funktionen paralell ablaufen lassen?

    • KloMeister
    • 20. Dezember 2011 um 15:03

    Ja okay klar, die werden zeitlich versetzt in sehr kurzer Zeit nacheinander abgefragt. (Das reicht mir ja auch)

    Aber ich habe kein einfrieren der anderen Funktionen

  • Mehrere Funktionen paralell ablaufen lassen?

    • KloMeister
    • 20. Dezember 2011 um 14:43

    Das oben genannte Beispiel würde übrigens so mit Visual Basic 6 klappen:


    [autoit]

    Private Sub Command1_Click()
    Call loop1
    Call loop2
    Call loop3
    End Sub

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

    Private Sub loop1()
    Do Until Text1 = "Test"
    DoEvents
    Loop
    MsgBox "Text1 hat die Bezeichnung Test"
    End Sub

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

    Private Sub loop2()
    Do Until Text2 = "Test"
    DoEvents
    Loop
    MsgBox "Text2 hat die Bezeichnung Test"
    End Sub

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

    Private Sub loop3()
    Do Until Text3 = "Test"
    DoEvents
    Loop
    MsgBox "Text3 hat die Bezeichnung Test"
    End Sub

    [/autoit]


    Dank der DoEvents Funktion friert nichts ein und alle Funktionen laufen dann paralell ab.
    In VB6 ist das halt mit 1 Befehl sehr leicht gelöst. Schade das das in AutoIT nicht geht.


    Man kann das sicher auch anders programmieren, so das man diese Funktion nicht benötigt.

    Ich bin es halt gewohnt mit dieser Funktion zu arbeiten, da ich früher mit VB6 programmiert habe. Habe die Funktion da öfters verwendet was sich als recht praktisch herausgestellt hat.

  • Mehrere Funktionen paralell ablaufen lassen?

    • KloMeister
    • 20. Dezember 2011 um 14:31

    Naja ich möchte nichts spezielles machen und habe auch keinen entsprechenden VB Code.

    Ich war mit AutoIT am programmieren und wollte eben etwas programmieren was nicht geklappt hat.
    War mehr oder weniger eh nur eine rumspielerei vondaher nicht so wichtig.


    Bei VB6 nehm ich dann meist mehrere Timer der die Sachen abfragt oder soetwas in der Richtung um dort das Problem zu lösen.
    Ein Timer ist ja auch mehr oder weniger ne Schleife, aber paralell läuft alles andere weiter.


    Bei AutoIT habe ich leider keine Möglichkeit gefunden, wie ich das nun mache und deswegen wollt ich hier mal nachfragen.
    Eine richtige Lösung habe ich leider bislang immer noch nicht.

  • Mehrere Funktionen paralell ablaufen lassen?

    • KloMeister
    • 20. Dezember 2011 um 13:02

    Unter Visual Basic 6 konnte ich z.B eine "Delay" Funktion erstellen, bei der paralell ablaufende Funktionen trotzdem weiter arbeiten:


    Achtung nicht wundern das ist VB6 Code

    Code
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliSeconds As Long) 
    Sub Delay(ByVal t As Double, Optional ByVal Doev As Boolean = True, Optional ByVal Interval As Long = 1) 
    Dim i As Long 
    Dim tStart As Double 
    
    
    t = t / 1000 
    tStart = Timer 
    
    
    Do While Timer - tStart < t 
    If Interval > 0 Then 
    Sleep Interval 
    End If 
    If Doev = True Then 
    DoEvents 
    End If 
    Loop 
    End Sub
    Alles anzeigen

    Und als Beispiel dann aufrufen für 1 Sek Pause:

    Code
    Delay 1000

    Das schöne war eben, das alle anderen gerade auch ablaufenden Funktionen, ebenso weiterarbeiten obwohl eine Delay Funktion in einer anderen gerade ablaufenden Funktion eingebaut war.

  • Mehrere Funktionen paralell ablaufen lassen?

    • KloMeister
    • 20. Dezember 2011 um 03:05

    Hab gerae nochmal ein wenig geforscht

    Was sagt ihr zu dieser Variante?


    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $counter1 = 0
    $counter2 = 0
    $counter3 = 0

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

    Opt("GUIOnEventMode", 1)
    GuiCreate("Test",450,400)
    $Zeit_1 = GuiCtrlCreateLabel("0",10,5,100,20)
    $Zeit_2 = GuiCtrlCreateLabel("0",10,35,100,20)
    $Zeit_3 = GuiCtrlCreateLabel("0",10,65,100,20)
    $Button1 = GUICtrlCreateButton("Start", 152, 48, 153, 49)
    GUICtrlSetOnEvent(-1, "Button1Click")
    $Button2 = GUICtrlCreateButton("Stop", 152, 104, 153, 49)
    GUICtrlSetOnEvent(-1, "Button2Click")
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    GUISetState(@SW_SHOW)

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

    do
    $msg = GuiGetMsg()
    until $msg = -3

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

    Func Form1Close()
    exit
    EndFunc

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

    Func Button1Click()
    AdlibRegister("_counter1",100) ; 10tel Sek
    AdlibRegister("_counter2",500) ; 1/2 Sek
    AdlibRegister("_counter3",1000) ; Sek
    EndFunc

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

    Func Button2Click()
    AdlibUnRegister("_counter1")
    AdlibUnRegister("_counter2")
    AdlibUnRegister("_counter3")
    EndFunc

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

    func _counter1()
    $counter1= $counter1+ 1
    GuictrlSetData($Zeit_1,$counter1)
    endfunc

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

    func _counter2()
    $counter2= $counter2+ 1
    GuictrlSetData($Zeit_2,$counter2)
    endfunc

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

    func _counter3()
    $counter3 = $counter3 + 1
    GuictrlSetData($Zeit_3,$counter3)
    endfunc

    [/autoit]


    Aber sobald ich in irgendner Funktion ein Sleep oder nen Loop habe dann ists schon wieder vorbei... Naja schade

    Es müsste echt noch einen DoEvents Befehl geben. Damit wäre das Problem gelöst.

  • Mehrere Funktionen paralell ablaufen lassen?

    • KloMeister
    • 19. Dezember 2011 um 22:59

    Echt schade das das nicht geht.

    Und so eine Art "DoEvents" Befehl wie in Visual Basic 6 gibt es auch nicht?

  • Mehrere Funktionen paralell ablaufen lassen?

    • KloMeister
    • 19. Dezember 2011 um 22:47

    Ich habe ein Programm programmiert bei dem ich mit einem Button mehrere Funktionen aufrufe.

    Beispielsweise:

    Code
    func OKButton() 
    loop1() 
    loop2() 
    loop3() 
    endfunc 
    
    
    func loop1() 
    do 
    until blablabla = "blablabla" 
    msgbox(1,"","Ereigniss erfüllt") 
    end func 
    
    
    func loop2() 
    do 
    until blablabla = "blablabla" 
    msgbox(1,"","Ereigniss erfüllt") 
    end func 
    
    
    func loop3() 
    do 
    until blablabla = "blablabla" 
    msgbox(1,"","Ereigniss erfüllt") 
    end func
    Alles anzeigen


    Das mal als Beispiel angenommen. Ich möchte das nun alle Funktionen gleichzeitig ablaufen. Zurzeit ist es aber so, das die Funktionen nacheinander ablaufen. Also erst wenn der 1. Loop vorbei is,t beginnt die zweite Funktion und nach der zweiten erst die Dritte.

    Ich möchte das alle Funktionen paralell arbeiten.

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™