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

Beiträge von BugFix

  • Checkbox aus vorhandener GUI auslesen / setzen

    • BugFix
    • 24. Februar 2017 um 12:37

    Nein, nur die ID eintragen: ControlCommand($hWnd, '', 346, 'Check', '')
    Ich nehme ID nur ungern, weil diese häufig dynamisch sind und bei jedem Aufruf einen andren Wert haben.

  • 1D Array Splitten mit Regex

    • BugFix
    • 24. Februar 2017 um 12:34

    Mal nebenbei: Warum das mühsame Auseinanderfriemeln, statt ausschliesslich CN abzufragen?

  • Checkbox aus vorhandener GUI auslesen / setzen

    • BugFix
    • 24. Februar 2017 um 12:31

    Du kannst auch die ID verwenden anstatt "CLASS/INSTANCE".
    Um das Fenster mit Teilen des Textes (also hier das Wort "Aktualisierung") zu erkennen, setze die Option: Opt("WinTitleMatchMode", 2)

  • Checkbox aus vorhandener GUI auslesen / setzen

    • BugFix
    • 24. Februar 2017 um 12:08

    Wenn du WinWaitActive verwendest, bekommst du sowieso das Handle zurück:

    AutoIt
    ; statt:
    $sTitle = "Arbeitsplatzaktualisierung - Aktualisierung"
    $hWnd = WinGetHandle($sTitle)
    WinWaitActive($sTitle)
    
    
    ; verwende:
    $sTitle = "Arbeitsplatzaktualisierung - Aktualisierung"
    $hWnd = WinWaitActive($sTitle)

    Hast du eventuell eine Option gesetzt, dass Fenster auch mit Teilen des Namens erkannt werden und somit das falsche Fenster ermittelt wird?

  • Checkbox aus vorhandener GUI auslesen / setzen

    • BugFix
    • 24. Februar 2017 um 08:47

    Checkbox ist ein Button. ^^
    Und für fremde Fenster gelten keine GUI-Befehle, sondern Window-Befehle.

    AutoIt
    ; Handle des Fensters holen
    $sTitle = "Arbeitsplatzaktualisierung - Neuinstallation"
    $hWnd = WinGetHandle($sTitle)
    
    
    ; Checkbox ist ein Button, ebenso wie Radio
    #cs
    "IsChecked", ""   Returns 1 if Button is checked, 0 otherwise 
    "Check", ""       Checks radio or check Button 
    "UnCheck", ""     Unchecks radio or check Button
    #ce
    
    
    ; ist checked?
    $iResult = ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'IsChecked', '') 
    
    
    ; check
    ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'Check', '') 
    
    
    ; uncheck
    ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'UnCheck', '')
    Alles anzeigen
  • Alles Banane...

    • BugFix
    • 23. Februar 2017 um 20:46
    Zitat von alpines

    War glaube ich BugFix

    Stimmt! 8o

    banane.jpg

  • 1D Array Splitten mit Regex

    • BugFix
    • 23. Februar 2017 um 14:55

    Na dann bau dir mal zusammen:
    - multiline
    - cn=(alles-ausser-Komma)
    - Flag 3 (Array)

  • ListView nicht al­pha­be­tisch sondern über .data vorgegeben sortieren

    • BugFix
    • 23. Februar 2017 um 12:12
    Zitat von Ghostleader

    Wie ging das nochmal das ich mir die Items in die Console ausgeben lassen kann

    Unter die Zeile mit GUICtrlCreateListViewItem(---) fügst du ein:
    ConsoleWrite('Text/Variable aus dem obigen Befehl für das Item' & @CRLF)

  • Funktion richtig einsetzen

    • BugFix
    • 23. Februar 2017 um 10:00
    Zitat von littleman

    $memberof ist ja ein Array

    Es wird in der Funktion ein Array, du mußt nur die Variable deklarieren (Global $irgendeineVariable). Die Funktion macht daraus ein Array, befüllt es und gibt die Anzahl der Member zurück. Die Member selber sind dann in der vorab deklarierten Variable verfügbar.

  • if GuiCtrlRead(var) = 1 then setstate(lock/hide) else setstate(unlock/show)

    • BugFix
    • 23. Februar 2017 um 09:44
    Zitat von Friesel

    $GUI_CHECKED + $GUI_ENABLE

    Poooh - DAS kann tödlich sein. Nicht in diesem Fall, aber Konstanten enthalten oft Kombinationen von Werten. Wenn du dann addierst, wird unter Umständen eine völlig andere Kombination als gewollt entstehen.
    Deshalb dafür ausschliesslich BitOr verwenden (so wie bei der Abfrage BitAnd).

    AutoIt
    $a = BitOR(1,2,4,8)
    ConsoleWrite('Result: ' & $a & @CRLF)
    
    
    $a = (1+2+4+8)
    ConsoleWrite('Result like before: ' & $a & @CRLF)
    
    
    $a = BitOR(1,2,4,8,4,8) ; 4 and 8 2-times ==> BUT NOT added!!
    ConsoleWrite('Result: ' & $a & @CRLF)
    
    
    $a = (1+2+4+8+4+8) ; 4 and 8 2-times ==> AND ALSO added!!
    ConsoleWrite('Result is different: ' & $a & @CRLF)
    Alles anzeigen
  • Funktion richtig einsetzen

    • BugFix
    • 23. Februar 2017 um 09:08

    Steht doch im Funktionskopf:
    Func _ADGetGroupMemberOf(ByRef $memberof, $groupdn, $sort = 0)
    $sort ist optional, der Rest muß übergeben werden. Wobei $memberof eine ByRef-Variable ist, die also bereits vorher deklariert sein muss.

  • Alles Banane...

    • BugFix
    • 22. Februar 2017 um 18:53

    [OT]
    Mir ist heute alles Banane, aber sowas von. ^^ - absolut gängige Aussage
    [/OT]

  • TV-Ton auf Boxen/Minianlage o.ä. - regelbar über Fernbedienung

    • BugFix
    • 21. Februar 2017 um 20:16

    Hi,
    meine Mutter ist inzwischen etwas schwach auf den Ohren. Da ist der Lautsprecher eines Flat-TV keine Erbauung (wirklich guter, klarer Klang nur hinter dem TV :P ).
    Nun wollte ich da was Basteln. Eine Bedingung: Nicht noch eine Fernbedienung.
    Meine Überlegung war jetzt, ein paar gute PC-Lautsprecher zu verwenden, Kopfhörerausgang hat der TV.

    Was ich jetzt nicht sicher weiß: Regelt die Lautstärkeänderung der Fernbedienung auch den Kopfhörerausgang? Konnte es noch nicht testen, war noch nicht vor Ort. Ich nehme aber an - ja.
    Könnt ihr PC-Lautsprecher empfehlen? Klangregelung ist zwingend erforderlich um den Ton in den für meine Mutter hörbaren Frequenzbereich zu transponieren.
    Ein zusätzlicher Kopfhörerausgang am Lautsprecher (parallel zu betreiben) wäre auch nicht schlecht, ihr Mann hört noch schlechter und braucht eigentlich einen Kopfhörer.

    Falls ihr mir bei meiner Suche helfen könnt, eventuell selber derartiges hinter euch habt, ich bin für jeden Tipp dankbar.

  • AutoIt-Object -- wie könnte AutoIt in OOP-Syntax aussehen

    • BugFix
    • 21. Februar 2017 um 18:03

    Da sich mal wieder im Forum jemand für AutoIt-OOP interessiert hat, möchte ich mal noch eine weitere Spielerei nachschieben: Gui-Elemente als Objekte. Dazu habe ich einige Gui-Ctrl "objektisiert" :D

    Das Beispiel:

    AutoIt
    #include "oopAU3.au3"
    
    
    ; == Assignment Objekterstellung:
    Global $objGui   = _objGUI_Create
    Global $objBtn   = _objGUI_ButtonCreate
    Global $objInput = _objGUI_InputCreate
    Global $objRadio = _objGUI_RadioCreate
    Global $objCheck = _objGUI_CheckBoxCreate
    Global $objLabel = _objGUI_LabelCreate
    
    
    
    
    
    
    ; == Erstellen Gui + Zuweisen Events + Show in Einem
    $oGUI = $objGui('Test').Event('_MyDblClick', $_ON_DBLCLICK_).Event('_MyRightClick', $_ON_SECUP_).Event('_End', $_ON_CLOSE_).Show
    
    
    ; == Erstellen Button + Hintergrundfarbe + Event in Einem
    $oBtn_1 = $objBtn($oGUI, 'Button 1', 10, 10, 150, 22).BkCol(0xFFFFFF).Event('_BtnClick')
    $oBtn_2 = $oBtn_1.Clone('Button 2').y(40).Col(0xFFFFFF).BkCol(0x0000FF).Event('_BtnClick')
    
    
    ConsoleWrite('Text 1. Button: ' & $oBtn_1.Read & @CRLF) ; Methode 'Read'
    ConsoleWrite('Text 2. Button: ' & $oBtn_2.Text & @CRLF) ; Eigenschaft 'Text'
    
    
    ; == Erstellen Input mit InfoText
    $oInp = $objInput($oGUI, '', 10, 70, 200).InfoText('Gib mir Input ;-)')
    
    
    ; == Erstellen Radio mit Event / und $GUI_CHECKED
    $oRadio_1 = $objRadio($oGUI, 'Input ReadOnly', 20, 95, 90).Event('_RadioClick')
    $oRadio_2 = $oRadio_1.Clone('Input Zugriff').x(130).Checked.Event('_RadioClick')
    
    
    ; == Erstellen Checkbox mit Event
    $oCB_1 = $objCheck($oGUI, 'Button 1 - ROT', 10, 130, 150).Event('_CBClick')
    $oCB_2 = $oCB_1.Clone('Button 2 - WEISS').y(155).Event('_CBClick')
    
    
    ; == Erstellen Label + weiteren Button
    $oLbl_1 = $objLabel($oGUI, 'Label-1', 10, 185, 120, 22)
    $oLbl_2 = $oLbl_1.Clone('Label-2').y(207)
    $oBtn_3 = $objBtn($oGUI, 'Set Size Lbl-2', 260, 185, 100, 22).Event('_Lbl2_Font')
    
    
    ;~ Sleep(2000)
    ;~ $oGUI.Title = "Das ist ein neuer Titel"
    
    
    ;~ Sleep(2000)
    ;~ $oGUI.x = 200
    
    
    ;~ Sleep(2000)
    ;~ $oGUI.y = 100
    
    
    ; == Syntactic Sugar: MainLoop als Call
    $__MainLoop__()
    
    
    Func _Lbl2_Font()
    	$oLbl_2.FontName('Courier New')
    	Sleep(1000)
    	$oLbl_2.FontName('Segoe UI').FontSize(8.5)
    ;~ 	ConsoleWrite('FontSize: ' & $oLbl_2.FontSize() & ' pt' & @CRLF)
    EndFunc
    
    
    Func _BtnClick()
    	Local $aEvt = _objGUI_EventArray() ; [ID, Objekt]
    	For $i = 1 To $aEvt[0][0]
    		If @GUI_CtrlId = $aEvt[$i][0] Then
    			ConsoleWrite('Klick: ' & '[CLASS: ' & $aEvt[$i][1].__class__ & '], Text: ' & $aEvt[$i][1].Text & @CRLF)
    			ExitLoop
    		EndIf
    	Next
    EndFunc
    
    
    Func _MyDblClick()
    	ConsoleWrite('Doppelklick auf GUI' & @CRLF)
    EndFunc
    
    
    Func _MyRightClick()
    	ConsoleWrite('Rechtsklick auf GUI' & @CRLF)
    EndFunc
    
    
    Func _RadioClick()
    	Switch @GUI_CtrlId
    		Case $oRadio_1.ID
    			$oInp.ReadOnly
    		Case $oRadio_2.ID
    			$oInp.ReadOnly(0)
    	EndSwitch
    EndFunc
    
    
    Func _CBClick()
    	Switch @GUI_CtrlId
    		Case $oCB_1.ID
    			If $oCB_1.Checked($_GET) Then
    				$oBtn_1.BkCol(0xFF0000)
    				$oCB_1.Text('Button 2 - WEISS')
    			Else
    				$oBtn_1.BkCol(0xFFFFFF)
    				$oCB_1.Text('Button 2 - ROT')
    			EndIf
    		Case $oCB_2.ID
    			If $oCB_2.Checked($_GET) Then
    				$oBtn_2.BkCol(0xFFFFFF).Col(0x000000)
    				$oCB_2.Text('Button 2 - BLAU')
    			Else
    				$oBtn_2.BkCol(0x0000FF).Col(0xFFFFFF)
    				$oCB_2.Text('Button 2 - WEISS')
    			EndIf
    	EndSwitch
    EndFunc
    
    
    
    
    Func _End()
    	Exit
    EndFunc
    Alles anzeigen

    Im Anhang sind alle erforderlichen Dateien enthalten, ebenso nochmal das Bsp. aus Post #1

    EDIT: Gerade bemerkt: In der Zwischenzeit hat sich etwas geändert mit der AutoIt Version. Wenn ich das Window-HWnd aus dem Speicher abrufe muss ich es vor der Verwendung mit HWnd($hWnd) erst wieder nutzbar machen. Dadurch lief meine Methode .Clone nicht. Jetzt korrigiert.

    Dateien

    AU3_OOP.zip 17,79 kB – 449 Downloads
  • Neustart eines Remote Rechners mit Inputbox

    • BugFix
    • 21. Februar 2017 um 14:48
    Zitat von Busti

    Kann man in AutoIT nicht, die rechenlastigen aufgaben, an irgenteine C++ Bibliothek übergeben, und sich das Ergebnis holen?

    Ist auch durchaus üblich, bei denen, die rechenintensive Aufgaben abarbeiten. Da wird z.B. ASM genutzt oder wie ich gerade selbst bei einem Projekt bemerkt habe, kann man die schnarchende Langsamkeit bei rekursiven Dateioperationen einfach von Powershell erledigen lassen, in einem Bruchteil der Zeit, die AutoIt braucht.
    Das ist letztlich aber alles OK: AutoIt bietet ein einfach zu nutzendes Interface und wenns schnell gehen muss, wird der Auftrag weitergereicht. ;)

  • AutoIT - Script-to-OOP-Script-Converter

    • BugFix
    • 21. Februar 2017 um 13:04
    Zitat von Busti

    Warscheinlich is der Vorteil von ByRef, das es schneller geht, da nix erstellt werden muss sondern immer weiterverarbeitet, richtig?

    Die Geschwindigkeit (durch das Sparen des Kopierens des Originals) ist ein Punkt. Aber wesentlicher bei Objekten ist die Nutzung von ByRef bei Methoden des Objektes. Und das geht leider nicht mit AutoIt-OOP. Das Problem hatte ich mal hier geschildert.

  • AutoIT - Script-to-OOP-Script-Converter

    • BugFix
    • 21. Februar 2017 um 12:39

    Hier mal das Pattern erläutert:

    Code
    (\$[_\w]+)(?:\s*=([^,]+))?
    
    
    (\$[_\w]+) - der Variablenname
    ()         - in Klammern/ Capture fängt das Ergebnis auf
    \$         - das Zeichen "$", als Metazeichen muß es mit dem Backslash maskiert werden
    []         - eine Zeichenklasse für alle Zeichen die im Variablennamen erlaubt sind
    _          - das Zeichen "_"
    \w         - alle Word-Zeichen (0-9 a-z A-Z)
    +          - Quantifier, Zeichen in der Gruppe mindestens 1 bis unendlich viele
    
    
    (?:\s*=([^,]+))? - die (optionale) Zuweisung
    ()?              - Capture mit folgendem "?" macht den Inhalt optional
    ?:               - Inhalt soll NICHT im Capture enthalten sein
    \s*              - Leerzeichen mit Quantifier "*", 0 bis unendlich oft
    =                - das Zeichen "="
        HIER könnte man nochmal \s* einfügen - mögliches Leerzeichen nach dem Zuweisungsoperator
    ([^,]+)          - der zugewiesene Wert
    [^,]             - eine negierte Klasse, alles ausser dem Zeichen "," ist erlaubt
    +                - Quantifier, Zeichen in der Gruppe mindestens 1 bis unendlich viele
    Alles anzeigen

    Dein Skript habe ich noch nicht getestet.
    Ich habe viel mit AutoItOOP experimentiert. Bei einem Problem bin ich aber stecken geblieben: AutoitOOP-Objekte lassen sich nicht ByRef nutzen. Das liegt leider in der Natur dieses Objektes und läßt sich nicht ändern. Dadurch geht leider viel Objekt-Funktionalität verloren.

  • AutoIT - Script-to-OOP-Script-Converter

    • BugFix
    • 21. Februar 2017 um 12:01
    Zitat von Busti

    Global $bla, $bla2, $bla4="",$bla5=";",$bla6='zomg'

    Das ist nicht sehr komplex:
    Wenn du die Zuweisungen auch möchtest, als Pattern: $sPattern = '(\$[_\w]+)(?:\s*=([^,]+))?' Wenn eine Variable eine Zuweisung hat folgt sie im Array nach dem Variablennamen.

    AutoIt
    $sLine = 'Global $bla, $bla2, $bla4="",$bla5=";",$bla6="zomg"'
    $sPattern = '(\$[_\w]+)(?:\s*=[^,]+)?'
    $aResult = StringRegExp($sLine, $sPattern, 3)
    For $i = 0 To UBound($aResult) -1
    	ConsoleWrite($aResult[$i] & @CRLF)
    Next
    Zitat von Busti

    stringreplace( $source, ", _", "\b" )

    Ich würde mit einem Leerzeichen ersetzen, aber nur die Fortschreibung: StringReplace( $source, " _", " " )
    EDIT: Da es eingelesen ist, hängt noch ein Zeilenumbruch hinter, der muß natürlich auch mit weg. ;)

  • AutoIT - Script-to-OOP-Script-Converter

    • BugFix
    • 21. Februar 2017 um 11:48
    Zitat
    • > MULTI DEKLARATIONS dont work yet
    • > DEKLARATIONS With a LINKEBREAK dont work yet

    1. Meinst du mit Multideklarationen Deklarationen mit selben Namen in unterschiedlichem Scope?
    2. Deklarationen mit Linebreak aufzulösen ist recht easy: Skript einlesen, Zeilenfortschreibungen löschen, Parsen

    Für beides findest du schon Lösungen hier im Forum. Ich habe das für SciTE-AddOns verwendet, schau mal in der Lua-Abteilung.

  • Compare im Edit_Fenster

    • BugFix
    • 17. Februar 2017 um 17:16
    Zitat von littleman

    Wie kann ich beide Arrays vergleichen und das doppelte rausschmeissen?

    Du kannst auch mal hiermit probieren.

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™