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

  • Teilweisen Namen eines Fensters auslesen

    • BugFix
    • 19. Januar 2016 um 16:58
    Zitat von P1xelfehler

    Nö, hierbei kommt immer noch raus: "Microsoft Excel - Mappe 1":

    Mit dieser Option kannst du das Fenster "matchen" (deshalb Match-Mode), ohne den gesamten Fenstertitel einzugeben.
    Wenn du nicht weißt, wie dein Fenster heißt, dann kannst du
    a) wie bisher mit WinGetTitle den vollen Titel holen und mit Stringfunktionen den unbenötigten Teil abschneiden oder:
    b) mit Exelfunktionen den Namen der Mappe abfragen

  • tastEn E d c 3 ändern auf öäü

    • BugFix
    • 18. Januar 2016 um 13:33

    Nutze doch vorerst die Bildschirmtastatur von Windows. Und dann hol dir ne neue Tastatur.

  • Scripting.Dictionary sortieren

    • BugFix
    • 18. Januar 2016 um 13:25

    Im Dictionary kannst du nicht sortieren, das widerspricht dem Datentyp.
    Bleibt nur das Dictionary in ein Array zu überführen und dann dieses zu sortieren.
    Hier mal aus der Hüfte:

    AutoIt
    #include <Array.au3>
    Local $count = $oDICT.Count
    If $count > 0 Then
    	Local $aDict[$count][2]
    	Local $i = 0
    	Local $strKey, $colKeys = $oDICT.Keys
    	For $strKey In $colKeys
    		$aDict[$i][0] = $strKey
    		$aDict[$i][1] = $oDICT.Item($strKey)
    		$i += 1
    	Next
    	_ArraySort($aDict)
    	_ArrayDisplay($aDict)
    EndIf
    Alles anzeigen
  • TCP Feedback

    • BugFix
    • 16. Januar 2016 um 21:19
    Zitat von GreenHornBaldi

    Aber hättest du ein Beispielscript?

    Nein, TCP mache ich äusserst selten. In der Form hatte ich es in AutoIt noch gar nicht, aber in Python. Aber poste doch mal deine Versuche, dann kann man sehen, wo die Säge klemmt.

  • TCP Feedback

    • BugFix
    • 16. Januar 2016 um 20:35

    - Verbindung aufbauen
    - Client: TCPSend(Msg) ; wenn darauf eine Antwort erwartet wird, wechseln zu: TCPRecv()
    - Server: TCPRecv() ; je nach erhaltener Nachricht reagieren und Nachricht senden: TCPSend(Msg)
    Natürlich in entsprechenden Schleifen, unbedingt einen "Notausgang" integrieren, falls Verbindungsabbruch entsteht und du nicht in eine Endlosschleife läufst.
    Bastele dir am Besten ein eigenes Protokoll, damit du beim Senden ankündigst, was du sendest und welche Reaktion erwartet wird, z.B.
    LEN-38;EXPECT-ANSWER;MSG-Die Nachricht

  • Func innerhalb Func möglich?

    • BugFix
    • 16. Januar 2016 um 11:45
    Zitat von Reiterfuchs

    Okay, das ist mir neu. Naja, man kann nicht alles kennen. Trotzdem entspricht das nicht dem aktuellen Stand der Technik.

    Wer definiert denn den "aktuellen Stand"? :whistling: Ich programmiere viel in Lua (und Lua erlaubt Funktionsdeklarationen in Funktionen) und da ist das ein echter Segen. Nicht nur die Modularisierung ist ein wichtiges Merkmal, sondern immer auch die Speicherbelastung/Ausführungsgeschwindigkeit. Und da bieten im lokalen Funktionsspace deklarierte Funktionen nun mal ein Plus an Geschwindigkeit und Verringerung der Speicherlast (in Lua). Da es in AutoIt nur Global und Lokal gibt und keine Differenzierung von Lokal in Lokal möglich ist, haben wir keine solchen Möglichkeiten.

    Wenn ich Globale Variablen vermeiden möchte, nutze ich folgende Funktion zur Verwaltung:

    AutoIt
    ;===============================================================================
    ; Function Name....: _ManageVars
    ; Description......: Verwaltung von global anwendbaren Variablen in Lokalem Namespace
    ; Parameter(s).....: $_sVar   Variablenname ohne "$"
    ; .................: $_fGet   "True" (Standard) fragt Wert ab, "False" um Wert zu setzen
    ; .................: $_vVal   Wenn Wert gesetzt wird, der Variablenwert
    ; Return Value(s)..: (nur bei Get) Erfolg   Der Variablenwert
    ; .................:               Fehler   0 @error=1  angefragte Variable noch nicht hinterlegt
    ; Author(s)........: BugFix ( bugfix@autoit.de )
    ;===============================================================================
    Func _ManageVars($_sVar, $_fGet=True, $_vVal=0)
    	Local Static $oVars = ObjCreate("Scripting.Dictionary")
    	If $_fGet Then
    		If $oVars.Exists($_sVar) Then
    			Return $oVars.Item($_sVar)
    		Else
    			Return SetError(1,0,0)
    		EndIf
    	Else
    		If $oVars.Exists($_sVar) Then
    			$oVars.Item($_sVar) = $_vVal
    		Else
    			$oVars.Add($_sVar, $_vVal)
    		EndIf
    	EndIf
    EndFunc  ;==>_ManageVars
    Alles anzeigen
  • Inputboxen speichern Array

    • BugFix
    • 16. Januar 2016 um 11:24

    Also erst mit Variablen die Ctrl erstellen und danach daraus ein Array zu generieren ist doch doppelt.
    Wie wäre es so:

    EDIT: Ich habe gleich mal den INI-Lesen/Schreiben Teil mit eingebaut

    AutoIt
    #include <ButtonConstants.au3>
    #include <Constants.au3>
    #include <EditConstants.au3>
    #include <StaticConstants.au3>
    #include <WinAPI.au3>
    
    
    ; Indizes festlegen für die zu erstellenden Ctrl (RB=Radio, IN=Input, etc.)
    Local Enum $CB1, $CB2, $IN1, $IN2, $RB1, $RB2, $iAnzahl
    ; Array für die CTRL erstellen
    Local $aCtrl[$iAnzahl]
    
    
    Local $INI = 'Pfad-INI-Datei'
    ; Daten einfach unter dem Ctrl-Index ablegen
    #cs Muster INI
    [control]
    1=1
    2=1
    3=BLA
    4=BLUB
    5=0
    6=1
    #ce
    
    
    
    
    $hGui = GUICreate('Test')
    $aCtrl[$CB1] = GUICtrlCreateCheckbox('Check 1', 10, 13, 60, 17)
    $aCtrl[$CB2] = GUICtrlCreateCheckbox('Check 2', 10, 43, 60, 17)
    $aCtrl[$IN1] = GUICtrlCreateInput('', 80, 10, 100, 20)
    $aCtrl[$IN2] = GUICtrlCreateInput('', 80, 40, 100, 20)
    $aCtrl[$RB1] = GUICtrlCreateRadio('Radio 1', 200, 10, 60, 20)
    $aCtrl[$RB2] = GUICtrlCreateRadio('Radio 2', 200, 40, 60, 20)
    
    
    If FileExists($INI) Then ; aus INI befüllen
    	For $i = 0 To UBound($aCtrl) -1
    		_CtrlSetFromINI($i)
    	Next
    EndIf
    
    
    GUISetState()
    
    
    While True
    	$nMsg = GUIGetMsg()
    	If $nMsg = -3 Then
    	EndIf
    	Switch $nMsg
    		Case -3
    			; Werte/Status der Ctrl auslesen (z.B. in INI schreiben)
    			For $i = 0 To UBound($aCtrl) -1
    ;~ 				ConsoleWrite(_CtrlGetState_Value($aCtrl[$i]) & @CRLF)
    				IniWrite($INI, 'control', $i, _CtrlGetState_Value($aCtrl[$i]))
    			Next
    			Exit
    		Case $aCtrl[$CB1]
    			;
    		Case $aCtrl[$CB2]
    			;
    		Case $aCtrl[$RB1]
    			;
    		Case $aCtrl[$RB2]
    			;
    	EndSwitch
    WEnd
    
    
    Func _CtrlGetState_Value($_iCtrlID)
    	Local $hID = ControlGetHandle($hGui, '', $_iCtrlID)
    	Switch __myCtrlGetClass($hID)
    		Case 'Radio', 'Checkbox'
    			Return BitAND(GUICtrlRead($_iCtrlID), $GUI_CHECKED)
    		Case 'Input'
    			Return GUICtrlRead($_iCtrlID)
    	EndSwitch
    EndFunc
    
    
    Func _CtrlSetFromINI($_iIndex)
    	Local $iID = $aCtrl[$_iIndex]
    	Local $hID = ControlGetHandle($hGui, '', $iID)
    	Switch __myCtrlGetClass($hID)
    		Case 'Radio', 'Checkbox'
    			GUICtrlSetState($iID, (IniRead($INI, 'control', $iIndex, 0) = 1 ? $GUI_CHECKED : $GUI_UNCHECKED))
    		Case 'Input'
    			GUICtrlSetData($iID, IniRead($INI, 'control', $iIndex, ''))
    	EndSwitch
    EndFunc
    
    
    Func __myCtrlGetClass($hHandle) ;code by SmOke_N, modified by Guiness
        Local Const $GWL_STYLE = -16
        Local $iLong, $sClass
        If IsHWnd($hHandle) = 0 Then
            $hHandle = GUICtrlGetHandle($hHandle)
            If IsHWnd($hHandle) = 0 Then
                Return SetError(1, 0, "Unknown")
            EndIf
        EndIf
    
    
        $sClass = _WinAPI_GetClassName($hHandle)
        If @error Then
            Return "Unknown"
        EndIf
    
    
        $iLong = _WinAPI_GetWindowLong($hHandle, $GWL_STYLE)
        If @error Then
            Return SetError(2, 0, 0)
        EndIf
    
    
        Switch $sClass
            Case "Button"
                Select
                    Case BitAND($iLong, $BS_GROUPBOX) = $BS_GROUPBOX
                        Return "Group"
                    Case BitAND($iLong, $BS_CHECKBOX) = $BS_CHECKBOX
                        Return "Checkbox"
                    Case BitAND($iLong, $BS_AUTOCHECKBOX) = $BS_AUTOCHECKBOX
                        Return "Checkbox"
                    Case BitAND($iLong, $BS_RADIOBUTTON) = $BS_RADIOBUTTON
                        Return "Radio"
                    Case BitAND($iLong, $BS_AUTORADIOBUTTON) = $BS_AUTORADIOBUTTON
                        Return "Radio"
                EndSelect
    
    
            Case "Edit"
                Select
                    Case BitAND($iLong, $ES_WANTRETURN) = $ES_WANTRETURN
                        Return "Edit"
                    Case Else
                        Return "Input"
                EndSelect
    
    
            Case "Static"
                Select
                    Case BitAND($iLong, $SS_BITMAP) = $SS_BITMAP
                        Return "Pic"
                    Case BitAND($iLong, $SS_ICON) = $SS_ICON
                        Return "Icon"
                    Case BitAND($iLong, $SS_LEFT) = $SS_LEFT
                        If BitAND($iLong, $SS_NOTIFY) = $SS_NOTIFY Then
                            Return "Label"
                        EndIf
                        Return "Graphic"
                EndSelect
    
    
            Case "ComboBox"
                Return "Combo"
            Case "ListBox"
                Return "List"
            Case "msctls_progress32"
                Return "Progress"
            Case "msctls_trackbar32"
                Return "Slider"
            Case "SysDateTimePick32"
                Return "Date"
            Case "SysListView32"
                Return "ListView"
            Case "SysMonthCal32"
                Return "MonthCal"
            Case "SysTabControl32"
                Return "Tab"
            Case "SysTreeView32"
                Return "TreeView"
    
    
        EndSwitch
        Return $sClass
    EndFunc
    Alles anzeigen
  • Listview ohne Fokus - Farbe des selektiertes Elements ändern

    • BugFix
    • 8. Januar 2016 um 17:49
    Zitat von Schumi

    Das könnte aber mit ControlGetFocus() gehen, oder?

    Probiere einfach mal. Evtl. solltest du das _GUICtrlListView_SetItemState($hWnd, $iIndex, $LVIS_FOCUSED, $LVIS_FOCUSED) weglassen, da sonst der Fokus wieder von deinen anderen Elementen angezogen wird. Kann aber sein, dass dies nicht tatsächlich den Fokus zieht, sondern nur den Fokus im Ctrl. Bastele mal ein bischen.

  • Konsolenanwendung mit "StdoutRead" nur mitlesen

    • BugFix
    • 8. Januar 2016 um 17:44

    Von Interesse wäre noch:
    Ist die Ausführung in der Konsole von längerer Dauer und musst du parallel mitlesen? (halte ich eigentlich für wenig wahrscheinlich)
    Oder wird einfach ein Befehl in kurzer Zeitspanne abgearbeitet und du brauchst das Ergebnis? - Dann leite doch die Ausgabe in eine Textdatei um und schreibe anschliessend den Dateiinhalt wieder in die Konsole.

  • Laufzeit Dienststatusabfrage

    • BugFix
    • 8. Januar 2016 um 17:02

    Hi,
    ich prüfe mit folgender Funktion (hier zwei Varianten: per CMD und WMI) ob ein Dienst gestartet ist oder nicht.
    Könnt ihr mal testen, wie bei euch die Laufzeiten sind? Beide Varianten unterscheiden sich bei mir kaum. Aber in Win 7 dauert es bei mir ca. 1,7 s, dagegen in Win XP < 0,5 s.

    Edit:
    Bei der Laufzeit hatte ich mich vertan: WMI-Variante ist etwa 30% schneller. Aber 0,1 s in XP vs. 0,8 s in Win7.

    AutoIt
    Local $fStartCMD, $fStartWMI, $t, $tCMD, $tWMI, $sResult = ''
    For $n = 1 To 5
    	$t = TimerInit()
    	$fStartCMD = _GetServiceStarted_CMD('Aufgabenplanung')
    	$tCMD = TimerDiff($t)
    	$t = TimerInit()
    	$fStartWMI = _GetServiceStarted_WMI('Aufgabenplanung')
    	$tWMI = TimerDiff($t)
    	$sResult &= StringFormat('Ergebnis: CMD %s t=%.3f s %s WMI %s t=%.3f s%s', $fStartCMD, $tCMD/1000, @TAB, $fStartWMI, $tWMI/1000, @LF)
    Next
    ConsoleWrite($sResult & @CRLF)
    
    
    Func _GetServiceStarted_CMD($_sService)
    	Local $iPID = Run(StringFormat('%s /c net start', @ComSpec), '', @SW_HIDE, 0x2)
    	ProcessWaitClose($iPID)
    	Local $sOutput = StdoutRead($iPID)
    	Return (StringInStr($sOutput, $_sService) ? True : False)
    EndFunc
    
    
    Func _GetServiceStarted_WMI($_sService)
    	Local $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
    	Local $colItem = $objWMIService.ExecQuery("SELECT * FROM Win32_Service WHERE DisplayName='" & _
    	                 $_sService & "'", "WQL", 0x10 + 0x20)
    	For $item In $colItem
    		Return $item.Started
    	Next
    EndFunc
    Alles anzeigen
  • Listview ohne Fokus - Farbe des selektiertes Elements ändern

    • BugFix
    • 8. Januar 2016 um 15:00

    Vielleicht hilft dir das weiter: https://autoit.de/index.php/Thre…7411#post237411

  • Anfängerfrage: Bin ich auf dem richtigen Weg?

    • BugFix
    • 8. Januar 2016 um 14:53

    StringFormat('*.%', $_sfxDel) Ja, das war ein Schreibfehler. Der Platzhalter für den String muss natürlich %s heissen.

  • run mit Parametern

    • BugFix
    • 7. Januar 2016 um 20:44

    $TRUECRYPT muss wegen Pfad mit Leerzeichen auf jeden Fall in " eingefasst werden. Ob die anderen Parameter das brauchen weiß ich nicht, nutze die Funktion nicht. Falls ja, wäre so am einfachsten zu lösen:


    AutoIt
    Local $TRUECRYPT = "D:\Program Files\TrueCrypt\TrueCrypt.exe"
    Local $CONTAINER = "D:\lehrer"
    Local $LETTER = "L:"
    Local $PSW = 'Password' ;InputBox ("LehrerLogIn","Bitte Passwort eingeben:")
    
    
    Local $sCmd = StringFormat('"%s" -t /v "%s" /l "%s" /p "%s" /aeq', $TRUECRYPT, $CONTAINER, $LETTER, $PSW)
    ConsoleWrite("var: $sCmd --> " & $sCmd & @LF)
    
    
    ;~ Run($sCmd)
    Alles anzeigen

    Die Befehlszeile wäre dann: "D:\Program Files\TrueCrypt\TrueCrypt.exe" -t /v "D:\lehrer" /l "L:" /p "Password" /aeq

    Falls anders gewünscht, einfach in StringFormat ändern.

  • OTA-Update bei gerootetem Smartphone

    • BugFix
    • 7. Januar 2016 um 15:49

    Naja, war fürn A..
    Habe mit SuperSu den Root aufgehoben. Update wurde dann auch gleich heruntergeladen. Aber die Installation bleibt nach wenigen Sekunden mit dem toten Androiden hängen. ||
    Bleibt mir wohl doch nur direkt das neue FI aufzuspielen und alles neu zu installieren. Aber dann roote ich nicht mehr, auch wenn ich dann viele meiner Anwendungen nicht mehr nutzen kann. Aber was nützt mir ein System mit tollen Apps, das ich niemals updaten kann. :thumbdown:

  • OTA-Update bei gerootetem Smartphone

    • BugFix
    • 7. Januar 2016 um 12:32
    Zitat von Yaerox

    Wer sagt das?

    Mein Smartphone. ..heruntergeladene Dateien konnten nicht installiert werden :|
    Habe extra den Google-Benachrichtigungsdienst deaktiviert, da ich sonst Tag für Tag die Info bekam, dass ein neues Update vorliegt. :whistling:

  • Womit programmiert ihr was?

    • BugFix
    • 7. Januar 2016 um 10:01

    Eigenständige Projekte schreibe ich fast ausschliesslich in AutoIt. Da ich sonst viele PlugIns für Editoren schreibe ist das dann abhängig vom Editor: Lua bei SciTE und Python bei SublimeText.

  • Konsolenanwendung mit "StdoutRead" nur mitlesen

    • BugFix
    • 7. Januar 2016 um 09:57

    Nur zum Verständnis:
    - Es läuft eine Konsolenanwendung in eigener Konsole
    - Der Outstream soll in diese Konsole geschrieben werden aber auch für dich in einen eigenen Output dupliziert werden.
    Ist das korrekt?

    Gib bitte mal ein lauffähiges Bsp., damit man das testen kann.

  • File Renamer - Das Tool, was einem Ärger erspart [v2.0]

    • BugFix
    • 7. Januar 2016 um 09:52

    Mir geht es oft auch so, dass ich eigene Programme schreibe, weil existierende Software nicht das beinhaltet, was ich möchte.
    Jedoch in diesem Fall gibt es doch eine Software, die noch weit umfangreicher ist als hier gezeigt: MP3TAG
    Die Skriptfunktionen dort drin sind super. So kann man gleichzeitig taggen und umbenennen. :thumbup:

  • OTA-Update bei gerootetem Smartphone

    • BugFix
    • 6. Januar 2016 um 18:00

    Hi,
    ich manipuliere eher selten am Inneren meines Smartphones (vor 2 Jahren habe ich mal unter Anleitung ein CR auf mein Nexus gezogen, hat auch super geklappt, aber fit bin ich deshalb nicht).
    Bei meinem aktuellen (Nexus 5) hatte ich gleich als ich es bekam mit WugFresh NexusRootToolkit gerootet, aber das Stock-ROM belassen.
    Nun haben sich ja doch einige (auch sicherheitsrelevante) Updates angesammelt. Bei gerootetem Smartphone funktioniert das Update ja nicht, ich muß mir also das aktuelle OTA-Update.zip herunterladen und als Sideload installieren.
    Um keinen Datenverlust zu riskieren würde ich gern ein Backup machen. Empfohlen wird überall TitaniumBackup, das ich mir auch installiert habe. Sichern muss ich: User Apps und Daten (keine System Apps). Wie muss ich jetzt den Filter richtig setzen, dass ich auch alle erforderlichen Daten berücksichtige?
    Hier das Filtermenü:

    TB_Filter.png

    Also wenn einige versionierte Smartphone-Bastler einem alten Mann unter die Arme greifen könnten, würde mich das freuen. ;)

    EDIT:
    Das ist ja verwirrend mit den OTA-Versionen. :S
    Ich habe aktuell: 5.1.0 - LMY47I
    Diese Datei:

    • Android 5.1 Lollipop (LMY47I) für Nexus 5 „hammerhead“ (hammerhead-lmy47i-factory-df127988.tgz)

    zu finden hier: http://www.giga.de/downloads/andr…-und-10-update/
    ist ja das kpl. factory-image. Soweit ich gelesen habe zerstört das Aufspielen des FI alle Daten.
    Bei den OTA-Files passiert das ja nicht. Muss ich dann alle bisherigen Updates nacheinander aufspielen?

  • Anfängerfrage: Bin ich auf dem richtigen Weg?

    • BugFix
    • 6. Januar 2016 um 17:29

    Ja, schon korrekter Ansatz.
    Hier mal als kpl. variable Funktion, sowohl für Raw-Typ als auch Bild-Typ:

    AutoIt
    #include <File.au3>
    
    
    $QuellOrdner = @DesktopDir & "\JgpRawTest\"
    
    
    _DeleteUnpaired($QuellOrdner)
    
    
    Func _DeleteUnpaired($_sPath, $_sfxDel='raw', $_sfxPair='jpg')
    	Local $aFiles = _FileListToArray($_sPath, StringFormat('*.%', $_sfxDel), 1, True) ; Rückgabe kpl. Pfad
    	If @error Then Return SetError(1,0,0)
    	For $i = 1 To $aFiles[0]
    		If Not FileExists(StringFormat('%s%s', StringTrimRight($_sPath, StringLen($_sfxDel)), $_sfxPair)) Then
    			FileDelete($aFiles[$i])
    		EndIf
    	Next
    EndFunc
    Alles anzeigen

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™