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

  • Seitenanzahl einer Tif-Datei ermitteln

    • BugFix
    • 25. November 2008 um 16:50

    :) - Da hat ja einer die gleiche Idee gehabt, wie ich.

    Spoiler anzeigen
    [autoit]

    #include<array.au3>
    $filename = @ScriptDir & "\multipage.tif"
    $ret = _FileInfoExtended($filename)
    ;~ _ArrayDisplay($ret)
    MsgBox(0, 'Anzahl Seiten', $ret[1][13])
    ;===============================================================================
    ; Function Name: _FileInfoExtended($FolderOrFile)
    ; Description:: Gibt erweiterte Dateiinformationen einer Datei oder aller Dateien
    ; eines Ordners zurück. Automatische Erkennung Datei oder Ordner.
    ; Parameter(s): $FolderOrFile Pfad der Datei/des Ordners
    ; Return Value(s): Array mit 34 Spalten, 1 Zeile je Datei
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _FileInfoExtended($FolderOrFile)
    If Not FileExists($FolderOrFile) Then Return SetError(1)
    Local $objShell = ObjCreate("Shell.Application")
    Local $arrHeaders[34], $Type = 'F'
    If StringInStr(FileGetAttrib($FolderOrFile), 'D') Then
    Local $objFolder = $objShell.Namespace($FolderOrFile)
    $Type = 'D'
    Else
    Local $objFSO = ObjCreate("Scripting.FileSystemObject")
    Local $objFile = $objFSO.GetFile($FolderOrFile)
    Local $FileName = $objFSO.GetFileName($objFile)
    Local $objFolder = $objShell.Namespace($objFSO.GetParentFolderName($objFile))
    EndIf
    Local $arRet[1][34]
    For $i = 0 To 33
    $arrHeaders[$i] = $objFolder.GetDetailsOf($objFolder.Items, $i)
    $arRet[0][$i] = $arrHeaders[$i]
    Next
    For $strFileName In $objFolder.Items
    If $Type = 'F' And $objFolder.GetDetailsOf($strFileName, 0) <> $FileName Then ContinueLoop
    ReDim $arRet[UBound($arRet)+1][34]
    For $i = 0 to 33
    $arRet[UBound($arRet)-1][$i] = $objFolder.GetDetailsOf($strFileName, $i)
    Next
    Next
    Return $arRet
    EndFunc ;_FileInfoExtended

    [/autoit]

    Edit: Übrigens, die DLL ist kostenfrei limitiert auf die Erkennung von max. 10 Seiten.

  • richtiger contdown

    • BugFix
    • 25. November 2008 um 16:13

    Guckst du: CountDown

  • Download per Objekt

    • BugFix
    • 25. November 2008 um 14:56
    Zitat von Xenobiologist

    Leider funktioniert auch das nicht aus der Firma :(


    Sicherlich wird bei dir das Objekt "Adodb.Stream" geblockt. Da dieses zur Ausnutzung der "ach so seltenen" :rofl: Windows-Sicherheitslücken verwendet werden kann, wird Schutzsoftware auf Servern dieses Objekt gar nicht zulassen vermute ich mal.

  • Mit AutoIt Wert aus HTML Tabelle auslesen und verarbeiten

    • BugFix
    • 25. November 2008 um 09:22

    Hiermit liest du die Tabelle in ein Array aus, das dann identisch, wie die Tabelle ist.
    Kannst dann die gewünschten Werte aus den Arrayelementen abfragen und vergleichen.

    [autoit]

    #include <IE.au3>
    #include <array.au3>
    Local $url = 'http://statistik.xxxxx.de/monatsstat.php'
    Local $oIE = _IECreate($url, 0, 0)
    Local $oTable = _IETableGetCollection($oIE, 0)
    Local $array = _IETableWriteToArray($oTable, True)
    _ArrayDisplay($array)
    _IEQuit($oIE)

    [/autoit]
  • Download per Objekt

    • BugFix
    • 24. November 2008 um 22:21

    Das Besondere? - Nun nicht unbedingt besonders, nur anders. ;)
    Wollte nur aufzeigen, dass es auch andere Funktionen außerhalb der Standardfunktionen gibt.
    Werde mal bei Gelegenheit einen Geschwindigkeitsvergleich machen. Könnte mir vorstellen, dass es da Unterschiede (in welche Richtung auch immer) gibt. Aber meist schneiden Objektlösungen sehr gut ab. :)

  • Download per Objekt

    • BugFix
    • 24. November 2008 um 22:07

    Hi,
    mal 2 Funktionen zum DL (Source u. Datei) per Objekt.
    _GetSource() habe ich im EN-Forum entdeckt und _DownLoad() habe ich aus einem VB-Skript.

    Spoiler anzeigen
    [autoit]

    Local $Path = @ScriptDir & '\weihnachtsgedicht2.txt'
    _DownLoad('http://fun.drno.de/txt/german/weihnachtsgedicht2.txt', $Path)

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

    ConsoleWrite(_GetSource('http://www.autoit.de/') & @CRLF)

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

    Func _DownLoad($URL, $PATH2SAVE)
    $oHttp = ObjCreate("WinHttp.WinHttpRequest.5.1")
    $oHttp.Open("GET", $URL)
    $oHttp.Send
    $HttpErrorCode = $oHttp.Status
    If $HttpErrorCode = 200 Then
    $oStream = ObjCreate("Adodb.Stream")
    With $oStream
    .Type = 1
    .Open
    .Write($oHttp.ResponseBody)
    .SaveToFile($PATH2SAVE, 2)
    .Close
    EndWith
    Endif
    EndFunc

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

    Func _GetSource($URL)
    $oHttp = ObjCreate("WinHttp.WinHttpRequest.5.1")
    $oHttp.Open("GET", $URL)
    $oHttp.Send
    Return $oHttp.ResponseText
    EndFunc

    [/autoit]
  • Vier Fragen

    • BugFix
    • 24. November 2008 um 19:55
    Zitat von Nimos

    kann man auch aus der 0 1 2 3 4 nummerierung rausgehen, und strings oder unzusammenhängende zahlen verwenden?


    Nein, du greifst per Index auf das Array zu, d.h. du gibst die "Hausnummer" an, unter der im Array das Element lagert.
    Alternativ kannst du mit Dictionary-Objekt arbeiten. Dann ist assoziativer Zugriff möglich.

  • Pointer in AutoIt

    • BugFix
    • 24. November 2008 um 19:53

    Das Problem ist, dass du nicht die Forenregeln beachtest.
    NO GAME-BOTS!!

  • Sers @all

    • BugFix
    • 24. November 2008 um 18:46

    Na, dann Herzlich Willkommen!
    Ich denke, du wirst dich in unserer Community wohl fühlen.

  • Stringregexp Frage

    • BugFix
    • 24. November 2008 um 18:32

    In diesem Fall ist festgelegt, dass alle Ergebnisse, auf die das RegEx-Pattern zutrifft, in einem Array zurückgegeben werden. Da ich abfrage, ob die Rückgabe überhaupt ein Array ist, und das Array nur ein Element enthält, greife ich auf dieses eine Element mit $ret[0] zu.

  • GUI Fensterschließen

    • BugFix
    • 24. November 2008 um 17:28
    Zitat von AutoGhost

    Weiß jemand wie man danach die Radio Boxes oder den OK Button wieder aktiviert?


    Das kann man ohne Code nicht beurteilen.

  • Hoffentlich könnt Ihr mir weiterhelfen!? (sollte ein Leichtes für Euch sein!)

    • BugFix
    • 24. November 2008 um 16:01
    Zitat von mehrsolala

    jedes Zeichen mit switch/case überprüfen ob es nun ein A/B/C/D ist


    Wenn 3 oder 4 Buchstaben/Koordinaten hinterlegt sind, mag das OK sein. Aber bei z.B. 15 od. 20 ist das Array die bessere Alternative.

  • Hoffentlich könnt Ihr mir weiterhelfen!? (sollte ein Leichtes für Euch sein!)

    • BugFix
    • 24. November 2008 um 14:34
    [autoit]

    ; mußt halt vorher ein Array erstellen, dass alle Koordinaten enthält
    $arCoord[2][3] = [ _
    ['A',1122,623], _
    ['B',1153,718]] ; usw.

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

    ; $varBuchstabe enthält den Buchstaben mit dem du vergleichen willst
    For $i = 0 To UBound($arCoord) -1
    If $varBuchstabe = $arCoord[$i][0] Then MouseClick('left', $arCoord[$i][1], $arCoord[$i][2])
    Next

    [/autoit]


    Wäre mal ganz nett, wenn du sagst, was das werden soll.

  • 'Fenster' - Auflistung in Menüleiste

    • BugFix
    • 24. November 2008 um 14:22

    Hi,
    habe das nochmals aufgegriffen und etwas erweitert.
    - Das jeweils aktive Fenster wird im Fenstermenü angehakt
    - Beim Schließen eines Fensters, wird das zuletzt aktive erneut aktiviert

    Spoiler anzeigen
    [autoit]


    #include<WindowsConstants.au3>
    #include <GUIConstants.au3>
    Opt('GUIOnEventmode', 1)
    Opt("GUIEventOptions",1)

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

    ; Deklaration der Sub-GUI
    Global $arWindow[3][3] = [ _ ; ID,State,PosShow
    [Execute('GUICreate("Kunden" , 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)'),1,0], _
    [Execute('GUICreate("Artikel" , 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)'),1,0], _
    [Execute('GUICreate("SerienNr", 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)'),1,0]]
    For $i = 0 To UBound($arWindow) -1
    GUISetOnEvent($GUI_EVENT_CLOSE, '_closeSub', $arWindow[$i][0])
    Next

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

    ; Hotkeys zum Einblenden der Sub-GUI
    HotKeySet("^k", "_StrgK")
    HotKeySet("^a", "_StrgA")
    HotKeySet("^s", "_StrgS")

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

    ; Erstellen Array für ID im Menü 'Fenster' -- Reihenfolge identisch mit erstellten Fenstern, identische Titel!!
    Global $arWndItem[3][3] = [ _ ; ID,Title,Exists
    [0,'Kunden' ,0], _
    [0,'Artikel' ,0], _
    [0,'SerienNr',0]]

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

    ; Deklaration der Main-GUI
    $MainGUI = GUICreate("Main", -1, -1, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_MAXIMIZE))
    GUISetOnEvent($GUI_EVENT_CLOSE, '_closeMain')
    $menu0 = GUICtrlCreateMenu("Menü")
    $m0_item1 = GUICtrlCreateMenuItem("Ende", $menu0)
    GUICtrlSetOnEvent(-1, '_closeMain')
    $menu1 = GUICtrlCreateMenu("Stammdaten")
    $m1_item1 = GUICtrlCreateMenuItem("Kunden Strg+K", $menu1)
    GUICtrlSetOnEvent(-1, '_StrgK')
    $m1_item2 = GUICtrlCreateMenuItem("Artikel Strg+A", $menu1)
    GUICtrlSetOnEvent(-1, '_StrgA')
    $m1_item3 = GUICtrlCreateMenuItem("SerienNr Strg+S", $menu1)
    GUICtrlSetOnEvent(-1, '_StrgS')
    $menu2 = GUICtrlCreateMenu("Fenster")
    $menu3 = GUICtrlCreateMenu("?")
    $m2_item1 = GUICtrlCreateMenuItem("Hilfe", $menu3)
    $m2_item2 = GUICtrlCreateMenuItem("Über", $menu3)
    GUISetState(@SW_SHOW, $MainGUI)

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

    GUIRegisterMsg($WM_SETFOCUS, 'WM_SETFOCUS')

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

    While 1
    Sleep(100)
    WEnd

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

    #region - Shortcut Funktionen
    Func _StrgK()
    _RunShortcuts(0)
    EndFunc

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

    Func _StrgA()
    _RunShortcuts(1)
    EndFunc

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

    Func _StrgS()
    _RunShortcuts(2)
    EndFunc
    ; per Shortcut gewähltes Fenster einblenden und aktivieren
    Func _RunShortcuts($i)
    GUISetState(@SW_SHOW,$arWindow[$i][0])
    WinActivate($arWindow[$i][0])
    _byWinActivate($arWindow[$i][0])
    _checkState()
    _SetEntryWindowMenu()
    EndFunc
    #endregion - Shortcut Funktionen

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

    ; Hauptfenster schließen
    Func _closeMain()
    Exit
    EndFunc

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

    ; Unterfenster schließen
    Func _closeSub()
    For $i = 0 To UBound($arWindow) -1
    If WinGetHandle($arWindow[$i][0]) = @GUI_WinHandle Then
    GUISetState(@SW_HIDE, $arWindow[$i][0])
    _byWinHide($arWindow[$i][0])
    ExitLoop
    EndIf
    Next
    _checkState()
    _SetEntryWindowMenu()
    EndFunc

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

    ; ein Fenster wird aktiviert - Reihenfolge speichern
    Func _byWinActivate($ID)
    Local $pos, $max = 0
    For $i = 0 To UBound($arWindow) -1
    If $arWindow[$i][0] = $ID Then $pos = $i
    If $arWindow[$i][2] > $max Then $max = $arWindow[$i][2]
    Next
    If $arWindow[$pos][2] = 0 Then
    $arWindow[$pos][2] = $max +1
    ElseIf $arWindow[$pos][2] = $max Then
    Return
    Else
    For $i = 0 To UBound($arWindow) -1
    If $arWindow[$i][0] = $ID Then
    $arWindow[$i][2] = $max
    ElseIf $arWindow[$i][2] > 0 Then
    $arWindow[$i][2] = $arWindow[$i][2] -1
    EndIf
    Next
    EndIf
    EndFunc

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

    ; Fenster wird Hide gesetzt - das zuvor aktive Fenster aktivieren
    Func _byWinHide($ID)
    Local $pos, $max = 0
    For $i = 0 To UBound($arWindow) -1
    If $arWindow[$i][0] = $ID Then $arWindow[$i][2] = 0
    If $arWindow[$i][2] > $max Then
    $max = $arWindow[$i][2]
    $pos = $i
    EndIf
    Next
    If $max > 0 Then
    WinActivate($arWindow[$pos][0])
    _checkState()
    _setChecked()
    EndIf
    EndFunc

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

    ; Fenstereintrag geklickt
    Func _WindowItem()
    For $i = 0 To UBound($arWndItem) -1
    If $arWndItem[$i][0] = @GUI_CtrlId Then
    WinActivate($arWindow[$i][0])
    _byWinActivate($arWindow[$i][0])
    ExitLoop
    EndIf
    Next
    _checkState()
    _setChecked()
    EndFunc

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

    ; Fensterstatus prüfen
    Func _checkState()
    For $i = 0 To UBound($arWindow) -1
    $arWindow[$i][1] = WinGetState($arWindow[$i][0])
    Next
    EndFunc

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

    ; Fenster-Menü-Eintrag setzen
    Func _SetEntryWindowMenu()
    For $i = 0 To UBound($arWindow) -1
    If $arWindow[$i][1] = 7 Or $arWindow[$i][1] = 15 Then
    If $arWndItem[$i][2] = 0 Then
    $arWndItem[$i][0] = GUICtrlCreateMenuItem($arWndItem[$i][1], $menu2)
    GUICtrlSetOnEvent($arWndItem[$i][0], '_WindowItem')
    $arWndItem[$i][2] = 1
    EndIf
    Else
    If $arWndItem[$i][2] = 1 Then
    GUICtrlDelete($arWndItem[$i][0])
    $arWndItem[$i][2] = 0
    EndIf
    EndIf
    Next
    _setChecked()
    EndFunc

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

    ; Menüeintrag für aktives Fenster markieren
    Func _setChecked()
    For $i = 0 To UBound($arWindow) -1
    If $arWindow[$i][1] = 15 Then
    GUICtrlSetState($arWndItem[$i][0], $GUI_CHECKED)
    Else
    GUICtrlSetState($arWndItem[$i][0], $GUI_UNCHECKED)
    EndIf
    Next
    EndFunc

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

    ; wenn ein Fenster den Fokus bekommt
    Func WM_SETFOCUS($hWnd)
    Local $match = False
    For $i = 0 To UBound($arWindow) -1
    If WinGetHandle($arWindow[$i][0]) = $hWnd Then
    _byWinActivate($arWindow[$i][0])
    $match = True
    ExitLoop
    EndIf
    Next
    If $match Then
    _checkState()
    _setChecked()
    EndIf
    EndFunc

    [/autoit]
  • Hoffentlich könnt Ihr mir weiterhelfen!? (sollte ein Leichtes für Euch sein!)

    • BugFix
    • 24. November 2008 um 12:24

    Wie vorab beschrieben, die Datei mit _FileReadToArray einlesen.
    Dann in einer Schleife die einzelnen Zeilen aufsplitten in Einzelzeichen (StringSplit angucken). Solltest du Leerzeichen im String haben entferne die vorher (StringStripWS).
    Oder viel besser:
    Speichere die Koordinaten in einer INI-Datei. Die Sektion kannst du mit einem Rutsch in ein Array (INIReadSection) einlesen und hast dann bereits die Koordinaten einzeln zur Verfügung.

  • Stringregexp Frage

    • BugFix
    • 23. November 2008 um 22:37

    Das wird jetzt dem Replace nicht mehr gerecht, so gehts einfacher:

    [autoit]

    $1 = "ab-22"
    $ret = StringRegExp($1 , '\d', 3)
    If IsArray($ret) And UBound($ret) = 1 Then
    MsgBox (0,"",$ret[0]);mache weiter
    Else
    MsgBox (0,"","geht nicht")
    EndIf

    [/autoit]
  • Stringregexp Frage

    • BugFix
    • 23. November 2008 um 22:28

    Dann mußt du außerdem die Stringlänge prüfen:

    [autoit]

    $1 = "ab-22"
    $ret = StringRegExpReplace($1 , '\D+', '')
    If @extended <> 1 Or $ret = '' Or StringLen($ret) > 1 Then
    MsgBox (0,"","geht nicht")
    Else
    MsgBox (0,"",$ret);mache weiter
    EndIf

    [/autoit]
  • Stringregexp Frage

    • BugFix
    • 23. November 2008 um 21:21

    Kleine Ergänzung, falls keine Ziffer im String:

    [autoit]

    ;~ $1 = "1a2b-5"
    $1 = "ab-"
    $ret = StringRegExpReplace($1 , '\D+', '')
    If @extended <> 1 Or $ret = '' Then
    MsgBox (0,"","geht nicht")
    Else
    MsgBox (0,"",$ret);mache weiter
    EndIf

    [/autoit]
  • Stringregexp Frage

    • BugFix
    • 23. November 2008 um 21:01

    Alles klar, nur Länge 1 anzeigen:

    [autoit]

    $1 = "1a2b-5"
    $ret = StringRegExpReplace($1 , '\D+', '')
    If @extended <> 1 Then
    MsgBox (0,"","geht nicht")
    Else
    MsgBox (0,"",$ret);mache weiter
    EndIf

    [/autoit]
  • Stringregexp Frage

    • BugFix
    • 23. November 2008 um 20:49

    Sry, aber jetzt habe ich echt nicht verstanden, was du willst.
    bei:
    1 Ziffer Ausgabe Ja/Nein
    2 Ziffern Ausgabe Ja/Nein
    3 Ziffern Ausgabe Ja/Nein
    mehr Ziffern Ausgabe Ja/Nein ??

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™