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

  • Zwischenablage Formatierung speichern mit Autoit

    • BugFix
    • 29. Januar 2016 um 13:42
    Zitat von AutoMit

    Danke - das tue ich.

    Dann lerne bitte die Suche in der Hilfe zu benutzen.

  • letztes Fenster aktivieren

    • BugFix
    • 29. Januar 2016 um 13:37

    Mit _WinAPI_GetTopWindow holst du dier das Fenster an der Spitze der Z-Order.
    Und dann kannst du die in der Reihenfolge darunterliegenden Fenster abfragen mit _WinAPI_GetWindow( $hWnd_Top, $GW_HWNDNEXT)

  • Laufzeit Dienststatusabfrage

    • BugFix
    • 29. Januar 2016 um 09:58

    Werde wohl die WMI-Variante nutzen. Der Aufruf findet mehrfach statt, bis sicher ist, dass der DB-Dienst nicht mehr läuft. Danach kann ich das Datenbank-Backup anschieben.

    Danke nochmal fürs Testen.

  • CSV in Acces einlesen

    • BugFix
    • 28. Januar 2016 um 11:33
    Zitat von caran

    wie gebe Ich den
    im Insert INto ein ?

    Meinst du, wie du den INSERT-String erstellst?
    Bsp:

    AutoIt
    ; Bsp: csv mit 5 Spalten
    #cs
    FELD1,FELD2,FELD3,FELD4,FELD5
    A,B,C,D,E
    X,Y,,,Z
    #ce
    
    
    Local $sTable = 'Tabellenname'
    Local $aCSV, $aSplit, $sSQL = ''
    
    
    _FileReadToArray($sPathCSV, $aCSV, 0, ',')
    
    
    For $i = 1 To UBound($aCSV) -1 ;  erste Zeile enthält Feldnamen, ignorieren
    	$aSplit = StringSplit($aCSV[$i], ',')
    	If $aSplit[0] <> 5 Then ContinueLoop ; Zeile in csv nicht korrekt                                    
    	; INSERT INTO target [(field1[, field2[, …]])]     VALUES (value1[, value2[, …])
    	$sSQL &= StringFormat("INSERT INTO %s (FELD1,FELD2,FELD3,FELD4,FELD5) VALUES (%s,%s,%s,%s,%s);", $aSplit[1], $aSplit[2], $aSplit[3], $aSplit[4], $aSplit[5])
    Next
    Alles anzeigen
  • FileWrite Problem

    • BugFix
    • 26. Januar 2016 um 22:39

    Wenn du zum alten Wert einen neuen hinzuaddieren möchtest, mußt du logischerweise den alten Inhalt zuerst Lesen!
    Also: Lesen, Hinzuaddieren, wieder Schreiben.

  • SciTE AddOn "ConvertTabsToSpaces" - ersetzt während Eingabe TAB durch Leerzeichen [Baustelle]

    • BugFix
    • 25. Januar 2016 um 23:00

    Man kann zwar in SciTE verschieden Eigenschaften für die TAB einstellen - aber das m.M. nach Wichtigste fehlt: Einfügen von Leerzeichen anstelle der TAB. Dadurch sieht eine in SciTE erstellte Datei in jedem Editor oder Forum anders aus. Das Problem bilden die partiellen TAB, also z.B.: Tabweite ist 4, Cursorposition ist 6. Wenn jetzt ein Tab eingefügt wird steht der Cursor an 8. Aber die Tabweite ist anderen Editoren ja nicht bekannt, sodass hier unterschiedlich ausgefüllt wird. Aus diesem Grund bevorzuge ich die ausschliessliche Verwendung von Leerzeichen.
    Dieses AddOn verbindet nun den Komfort von Tabs (schnell große, fest definierte Abstände einfügen) mit der exakten Darstellung in jedem Editor.
    Werden beim Setzen eines Tab Leerzeichen in der Tabweite eingefügt, so arbeitet das Tool auch analog in der entgegengesetzten Richtung mit Backspace. Sind links vom Cursor ausreichend Leerzeichen, wird jeweils bis zur vorigen Tabposition gelöscht.

    Erstellt in den SciTEUser.properties den Eintrag convert.tabs.to.spaces=1
    Zum Aktivieren die Datei ReplTabWithSpaces.lua zu euren Lua-Dateien kopieren und im LuaStartup-Skript laden:
    Und zwar unbedingt hinter dem Eintrag:
    -- Start up the events (Calls OnStartup()).
    EventClass:BeginEvents()

    LoadLuaFile("ReplTabWithSpaces.lua", "Pfad\\zum\\Ordner\\") - wenn ihr einen eigenen Lua-Ordner habt. Wichtig: Doppelbackslash, auch am Ende!

    Dateien

    ReplTabWithSpaces.lua 1,13 kB – 359 Downloads
  • SciTE-AddOn "CommentAutopos" - Semikolon springt sofort in Kommentarspalte

    • BugFix
    • 25. Januar 2016 um 22:40

    Ich hatte gerade bemerkt, dass ich versehentlich die Pattern aus AutoIt verwendet hatte. :Face:
    Habe das jetzt korrigiert und neu hochgeladen.

  • Makroreferenz - wie bei Fehler dennoch eine Messagebox?

    • BugFix
    • 25. Januar 2016 um 14:59

    Man verwendet die Makros ja nur dort als Platzhalter für Werte, die man auch mit dem Skript generiert. Insofern ist eine Fehlerbehandlung sinnfrei.
    Im GuiGetMsg-Modus wirst du niemals @Gui_CtrlID verwenden, weil das nicht befüllt wird. Das weißt du bereits beim Programmieren, also ist doch alles in Butter.

    Edit:
    Wenn du aber unbedingt Makros ohne zu erwartenden Wert ohne Abbruch ausführen willst, nimm Execute. Da bekommst du im Fehlerfall einfach einen Leerstring.
    $sReturn = Execute("@Gui_CtrlID")

  • Makroreferenz - wie bei Fehler dennoch eine Messagebox?

    • BugFix
    • 25. Januar 2016 um 14:25

    Schau mal hier: MacroBox
    Da hatte ich allerdings all jene Makros aussen vor gelassen, die nur in einem bestimmten Kontext einen Wert liefern. (@Gui_CtrlID etc.)
    Könnte man aber im Skript ergänzen, dass als Ausgabe erscheint: "Wert nur im Kontext ermittelbar" oder ähnlich.

  • schärferes Mittel als ProcessClose

    • BugFix
    • 25. Januar 2016 um 12:55

    Schon mal PsKill ausprobiert.

  • CSV in Acces einlesen

    • BugFix
    • 25. Januar 2016 um 12:48
    Zitat von caran

    nur der der Insert Syntax ist mir nicht klar

    Da hilft Google (und MSDN): https://msdn.microsoft.com/en-us/library/…office.12).aspx

  • CSV in Acces einlesen

    • BugFix
    • 25. Januar 2016 um 11:18

    Ich weiß nicht, ob es bereits Access-UDF ähnlich der Excel-UDF gibt. Aber grundsätzlich brauchst du doch aus den Daten der csv nur den INSERT-String zusammenstellen.
    - csv in ein Array lesen
    - für jeden Arrayeintrag:
    -- Zeile an Trennzeichen splitten
    -- das Splitarray enthält jetzt die Werte für jedes zugeordnete Feld
    -- nun in einer Schleife zusammenfügen: $sInsert &= INSERT ....'Feld' = 'Wert'
    Syntax sollte klar sein, hier nur grobe Vorgehensweise.

  • ISN - war Scite - automatische Formatierung der Kommenatare auf Spalte 81

    • BugFix
    • 25. Januar 2016 um 11:07

    Ich habe jetzt ein weiteres AddOn erstellt, das direkt auf die Verwendung des Semikolon reagiert und in die definierte Spalte springt: CommentAutoPos

  • SciTE-AddOn "CommentAutopos" - Semikolon springt sofort in Kommentarspalte

    • BugFix
    • 25. Januar 2016 um 11:02

    Mal wieder ein kleines Plugin für SciTE.
    "CommentAutopos" wird aktiv, wenn ein Semikolon hinter eine Codezeile gesetzt wird (und nur dann). Über eine Property, die ihr in euren Usersettings vorgeben könnt, wird die Zielspalte zum Schreiben des Kommentars definiert (Comment.Autopos.*.au3=100). Wenn ihr die Property nicht setzt, wird automatisch '100' verwendet.
    Das Plugin prüft beim Arbeiten in AU3-Dateien, wie folgt:
    - aktuelle Spalte=Zeilenanfang oder >= Zielspalte ? dann nichts tun
    - Style an Cursorposition <> 0 (also innerhalb eines definierten Styles) ? dann nichts tun
    - links vom Cursor nur Leerzeichen/Tabs (also Einrückung) ? dann nichts tun
    - rechts vom Cursor irgendwelche Zeichen ausser Leerzeichen/Tabs/Zeilenumbruch (also nicht hinter dem Code) ? dann nichts tun
    Anderenfalls steht der Cursor also am Codeende in einer nicht leeren Zeile noch vor der Startposition für Kommentare.
    Jetzt wird die Differenz zur Kommentarposition ermittelt und aufgefüllt mit Leerzeichen, das Semikolon +1 Leerzeichen wird geschrieben und der Cursor dahinter gesetzt.

    Zum Aktivieren die Datei CommentAutoPos.lua zu euren Lua-Dateien kopieren und im LuaStartup-Skript laden:
    Und zwar unbedingt hinter dem Eintrag:
    -- Start up the events (Calls OnStartup()).
    EventClass:BeginEvents()

    LoadLuaFile("CommentAutoPos.lua", "Pfad\\zum\\Ordner\\") - wenn ihr einen eigenen Lua-Ordner habt. Wichtig: Doppelbackslash, auch am Ende!

    Dateien

    CommentAutoPos.lua 1,46 kB – 380 Downloads
  • ISN - war Scite - automatische Formatierung der Kommenatare auf Spalte 81

    • BugFix
    • 23. Januar 2016 um 16:55

    Dafür hatte ich mal ein AddOn geschrieben: https://autoit.de/index.php/Thre…6669#post246669

  • StringReplace​ ändert mir zu viel

    • BugFix
    • 23. Januar 2016 um 09:54

    Ich vermute du hast eine css-Datei oder einen <style>..</style>-Block im Dokument um alle Styles zu verwalten.
    Wenn nur einzelne Definitionen verwaltet werden sollen, kannst du doch mehrere Klassen bilden. Ist zwar mehr Definition, läßt sich aber auch einfacher bearbeiten.
    Bsp.: Überschrift soll in Font und Farbe änderbar sein, aber einzeln.
    Im Element z.B.:
    <div class="ufont ucolor">...</div>
    In der Style-Definition:
    .ufont { font-family: Courier New; }
    .ucolor { color: #000000; } 

    Dann kannst du einfach die kpl. class-Definition ersetzen mit neuem Wert und brauchst keine einzelnen Elemente einer Definition aufbröseln.

  • Gelegentliches Flackern bei Neuzeichnen - abstellbar?

    • BugFix
    • 21. Januar 2016 um 00:34

    Danke @UEZ, das löst das Problem.

  • Gelegentliches Flackern bei Neuzeichnen - abstellbar?

    • BugFix
    • 20. Januar 2016 um 21:35

    Hi,
    ich habe das Problem mal aus einem Projekt herausgelöst mit reproduzierbarem Effekt.
    Im folgenden Skript aktualisiere ich alle 100 ms die Zeitanzeige im Fenster. Dabei tritt gelegentlich ein Flackern auf. Gibt es hier noch eine Möglichkeit das abzustellen?
    (Es geht ausschließlich um das Problem des Flackerns. Hinweise auf Nutzung anderer Ctrl etc. sind nicht zielführend.)

    AutoIt
    #include <WinAPI.au3>
    #include <WinAPIGdi.au3>
    #include <Timers.au3>
    #include <WindowsConstants.au3>
    #include <FontConstants.au3>
    #include <StaticConstants.au3>
    
    
    
    
    Global Const $__TIMER_INTERVALL = 100
    
    
    Global $iWidth = 400, $iHeight = 300
    Global $aVertex[2][3] = [[0, 0, 0xA7BED7], [$iWidth, $iHeight, 0xF7F7F7]]
    
    
    $hGui = GUICreate('Test', $iWidth, $iHeight)
    $idPic = GUICtrlCreatePic('', 0, 0, $iWidth, $iHeight)
    $hPic = GUICtrlGetHandle($idPic)
    
    
    _ManageText('set', 'Nachricht', 'Das ist irgendein beliebiger Text' & @LF & 'die zweite Zeile des Textes')
    $iTimerID = _Timer_SetTimer($hGui, $__TIMER_INTERVALL, '_TimerCallback')
    
    
    GUISetState(@SW_SHOW)
    
    
    While 1
    	Switch GUIGetMsg()
    		Case -3
    			_Timer_KillTimer($hGui, $iTimerID)
    			Exit
    	EndSwitch
    WEnd
    
    
    Func _Time()
    	Return StringFormat('%02i:%02i:%02i.%s', @HOUR, @MIN, @SEC, StringLeft(@MSEC,1))
    EndFunc
    
    
    
    
    Func _ManageText($sAction='get', $sTextA='', $sTextB='')
    	Local Static $aText[2] = ['','']
    	If $sAction = 'get' Then Return $aText
    	If $sTextA <> '' Then $aText[0] = $sTextA
    	If $sTextB <> '' Then $aText[1] = $sTextB
    EndFunc
    
    
    Func _TimerCallback($hWnd, $iMsg, $iIDTimer, $iTime)
        #forceref $hWnd, $iMsg, $iIDTimer, $iTime
    	Local Static $aText[2] = ['','']
    	Local $aNewText = _ManageText('get')
    	For $i = 0 To 1
    		If $aText[$i] <> $aNewText[$i] Then
    			$aText[$i] = $aNewText[$i]
    		EndIf
    	Next
    	Local $sTime = _Time()
    
    
    	; Gradient
    	Local $hDC = _WinAPI_GetDC($hPic)
    	Local $hDestDC = _WinAPI_CreateCompatibleDC($hDC)
    	Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight)
    	Local $hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap)
    	_WinAPI_GradientFill($hDestDC, $aVertex)
    
    
    	; Font
    	Local $hFont = _WinAPI_CreateFont(16, 0, 0, 0, 600, False, False, False, $DEFAULT_CHARSET, _
    			$OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Microsoft Sans Serif')
    	Local $hOldFont = _WinAPI_SelectObject($hDestDC, $hFont)
    
    
    	; Text 1
    	_WinAPI_SetTextColor($hDestDC, 0x800000)
    	_WinAPI_SetBkMode($hDestDC, $TRANSPARENT)
    	Local $tRECT = DllStructCreate($tagRect)
    	DllStructSetData($tRECT, "Left", 15)
    	DllStructSetData($tRECT, "Top", 5)
    	DllStructSetData($tRECT, "Right", 100)
    	DllStructSetData($tRECT, "Bottom", 30)
    	_WinAPI_DrawText($hDestDC, $aText[0], $tRECT, BitOR($DT_VCENTER,$DT_LEFT,$DT_SINGLELINE))
    
    
    	; Time
    	$tRECT = DllStructCreate($tagRect)
    	DllStructSetData($tRECT, "Left", $iWidth-90)
    	DllStructSetData($tRECT, "Top", 5)
    	DllStructSetData($tRECT, "Right", $iWidth-15)
    	DllStructSetData($tRECT, "Bottom", 30)
    	_WinAPI_DrawText($hDestDC, $sTime, $tRECT, BitOR($DT_VCENTER,$DT_RIGHT,$DT_SINGLELINE))
    
    
    	; Trennline
    	Local $hPen = _WinAPI_CreatePen($PS_SOLID, 1, 0x800000)
    	Local $oOld = _WinAPI_SelectObject($hDestDC, $hPen)
    	_WinAPI_DrawLine($hDestDC, 3, 30, $iWidth-6, 30)
    
    
    	; Text 2
    	$hFont = _WinAPI_CreateFont(16, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
    			$OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Microsoft Sans Serif')
    	_WinAPI_SelectObject($hDestDC, $hFont)
    	_WinAPI_SetTextColor($hDestDC, 0x400000)
    	$tRECT = DllStructCreate($tagRect)
    	DllStructSetData($tRECT, "Left", 0)
    	DllStructSetData($tRECT, "Top", 40)
    	DllStructSetData($tRECT, "Right", $iWidth)
    	DllStructSetData($tRECT, "Bottom", 280)
    	_WinAPI_DrawText($hDestDC, $aText[1], $tRECT, $DT_CENTER)
    
    
    	; Gradient to control
    	_SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap)
    	Local $hObj = _SendMessage($hPic, $STM_GETIMAGE)
    	If $hObj <> $hBitmap Then _WinAPI_DeleteObject($hBitmap)
    
    
    	_WinAPI_SelectObject($hDestDC, $hOldFont)
    	_WinAPI_SelectObject($hDestDC, $oOld)
    	_WinAPI_DeleteObject($hFont)
    	_WinAPI_DeleteObject($hPen)
    	_WinAPI_SelectObject($hDestDC, $hDestSv)
    	_WinAPI_ReleaseDC($hPic, $hDC)
    	_WinAPI_DeleteDC($hDestDC)
    
    
    	; Neuzeichnen
    	GUISetState(@SW_UNLOCK)
    	_WinAPI_RedrawWindow($hWnd, 0, 0, $RDW_UPDATENOW)
    	GUISetState(@SW_LOCK)
    EndFunc
    Alles anzeigen
  • Teilweisen Namen eines Fensters auslesen

    • BugFix
    • 20. Januar 2016 um 10:11

    Öffne den VBA-Editor (bei geöffnetem Office: Alt+F11), wähle das Makro und lass dir das VBA-Skript dazu zeigen. Das kann man dann portieren.
    Dazu musst du mit dem Excel-Objekt arbeiten. Entweder unter Nutzung der Excel-UDF oder mit den nativen AutoIt-Funktionen.
    z.B. bei geöffnetem Excel: $oExcel = ObjGet("", "Excel.Application")
    Wenn in deinem Makro dann "Application" erscheint, setzt du in AutoIt: "$oExcel.Application". Methoden und Properties kannst du ganz normal anwenden. Bei Methoden beachten, dass in AutoIt immer alle Funktionsparameter für die VBA-Funktionen benannt werden müssen und in der korrekten Reihenfolge, nicht benötigte Parameter mit "Default" besetzen. Ggf. danach googeln.

  • Teilweisen Namen eines Fensters auslesen

    • BugFix
    • 19. Januar 2016 um 23:34

    Du kannst das, was das Makro macht (VBA-Code), in den meisten Fällen unkompliziert nach AutoIt portieren, brauchst das Makro selbst also nicht.
    Falls es aber sowieso existiert, da es teilweise per Hand aufgerufen wird, kannst du das Makro auch durch AutoIt direkt aufrufen. Sollte in etwa so aussehen: $oExcel.Application.Run("'C:\Mappe1.xls'!MeinMakro")

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™