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

  • Verschicken

    • BugFix
    • 27. Juni 2009 um 13:55
    Zitat von nektus

    ich will ein programm machen

    Zitat von nektus

    kann mir net jemand ein script posten wo einfach steht


    Also wenn ich sowas lese, rollen sich mir die Fußnägel auf. :cursing:
    Hoffentlich weißt du selber, was du willst.
    Mit solchen Aktionen verärgerst du viele, die dir sonst Support gegeben hätten. :thumbdown:

  • Checken wie weit eine Array geht

    • BugFix
    • 27. Juni 2009 um 13:18

    Schau dir mal UBound($array) an.

  • µit - Juli

    • BugFix
    • 27. Juni 2009 um 01:15

    Das hier aus deiner Testsuite erscheint mir auch fehlerhaft:
    _Check(16, _StringStrCount("test TEST Test TestTest", "T;E,S", True, False, ";,", True), "3;10;5;5")

    Hier werden 2 Zeichen als Trenner übergeben, also ist nur diese gesamte Zeichenfolge der Trenner. Im Teststring ist dieser Trenner nicht enthalten.
    Du kannst nicht auch noch für jeden Teilstring einen extra Trenner übergeben.

    Der letzte Block weist mehrere Fehler auf:
    _Check(13, _StringStrCount("test TEST Test TestTest", "TEST Test", False, False, "", True), "1;3") ; ni.Sens nach "TEST Test"='1;1'
    _Check(14, _StringStrCount("test TEST Test TestTest", "TEST Test", False, False, " ", True), "2;5;5") ; ni.Sens nach "TEST" u."Test"='2;3;3'
    _Check(15, _StringStrCount("test TEST Test TestTest", "T;EST", False, False, ";", True), "2;10;5") ; ni. Partial "T" u. "EST" ==> 0
    _Check(16, _StringStrCount("test TEST Test TestTest", "T;E,S", False, False, ";,", True), "3;10;5;5") ; kein Ergebnis (Trenner= ;,)
    _Check(17, _StringStrCount("Testat, testen, Test, Attest. Ostestland", "Test", False, False, "", False), 5) ; ni.Sens nach "Test"=1


    Edit
    Bei der Rückgabe als String und mehreren Suchbegriffen wird bisher (wenn ich das aus der Testsuite richtig herausgelesen habe) die Summe aller gefundenen Einzelbegriffe zurückgegeben.
    Wäre es da nicht evtl. sinnvoller die Einzelsummen getrennt durch den übergebenen Delimiter zurückzugeben? Das würde dann auch der Rückgabe bei Array entsprechen.
    Hier mal mein Vorschlag um es nochmal eindeutig zu definieren.

    Code
    _StringStrCount($sString, $sSearch='', $bSens=False, $bPartial=False, $sDelim='', $bReturn=False)
    $sString	zu durchsuchender String
    $sSearch	Suchbegriff(e)
    $bSens		True = Case Sensitiv / False = nicht Case Sensitiv
    $bPartial	True = Suchbegriff auch als Teilstring / False = Suchbegriff alleinstehend
    $sDelim		Trenner bei mehreren Suchbegriffen
    $bReturn	True = Rückgabe Array / False = Rückgabe String
    
    
    Bedingungen:
    $sSearch = Leerstring UND $sDelim = Leerstring 		==> Rückgabe Anzahl ALLER Zeichen
    $sSearch = Leerstring UND $sDelim = String 		==> Rückgabe Anzahl ALLER Zeichen OHNE $sDelim
    $bReturn = True		==> [0]=Anzahl Ergebnisse, [1]..[n]=Anzahl Begriff 1..n
    $bReturn = False UND $sSearch = EIN Begriff		==> String Anzahl Begriff
    $bReturn = False UND $sSearch = MEHRERE Begriffe	==> String Anzahl Summe ALLER Begriffe 
    ? ODER	==> "(Anzahl_Begriff_1)$sDelim(Anzahl_Begriff_2)$sDelim(Anzahl_Begriff_n)" ?
    .
    Alles anzeigen
  • µit - Juli

    • BugFix
    • 26. Juni 2009 um 23:40

    Wir sollten weg von dem Begriff Flag und klar definieren:
    $bSens = Sensitivität = TRUE, dann exakte Übereinstimmung
    $bPartial = Partialsuche = TRUE, dann Teilsuche
    $bReturn = Returntype = TRUE, dann Return Array, sonst String

  • µit - Juli

    • BugFix
    • 26. Juni 2009 um 23:26

    Kann es sein, dass du Flag1 in deiner Testumgebung genau falsch betrachtest? Ich würde sagen: JA :D

    _Check(1, _StringStrCount("test TEST Test TestTest", "Test", False, False, "", False), 5)
    Sensitive = False, Partial=False: ==> Test u. test richtig ==> 3!

    _Check(2, _StringStrCount("test TEST Test TestTest", "Test", True, False, "", False), 3)
    Sensitive =True, Partial=False: ==> Test richtig ==> 1!

    usw.

    Ahh, nochwas:
    _Check(6, _StringStrCount("test TEST Test TestTest", "TEST Test", True, True, " ", False), 2)
    Hier wird ein Leerzeichen als Trenner übergeben, d.h. wir zählen beide Begriffe und bekommen demzufolge auch zwei Ergebnisse: Anzahl_Begriff1-Trenner-Anzahl_Begriff2
    Hast du hier alles zusammengezählt? Dann ergibt das wenig Sinn.

  • µit - Juli

    • BugFix
    • 26. Juni 2009 um 23:13

    Noch eine Frage :D
    Flag4: True für String-JA oder Array-JA ?

  • µit - Juli

    • BugFix
    • 26. Juni 2009 um 22:43

    Das das mit den Flags abgeklärt wird ist klar.
    Ich wollte nur eine Definition von Partialsuche geklärt haben, da es innerhalb der AutoIt-Funktionen dort auch unterschiedliche Suchmethoden gibt:
    1. partial ist, wenn ein Begriff mit dem Suchbegriff beginnt (Test Testosteron)
    2. partial ist, wenn der Begriff den Suchbegriff enthält (test Attest)

    Verstehst du jetzt, was ich meine? ;)

  • µit - Juli

    • BugFix
    • 26. Juni 2009 um 22:29
    Zitat von Schnuffel

    das beantwortet sich doch eigentlich von selbst, da es ja ein Flag "Case sensitiv" gibt


    Das würde nun gerade bei meinem Bsp. zutreffen. Aber wie ist es hiermit: (insensitiv test) Testat, testen, Test, Attest. Ostestland ;)

  • µit - Juli

    • BugFix
    • 26. Juni 2009 um 22:13

    Noch eine Frage zur Partialsuche:
    Treffer nur am Wortanfang (Test - Testosteron)
    oder beliebig im Wort (Test - Attest)

  • Neue Funktionen für GuiMenu ==> ..._ColumnsCreate, ..._JustifyRight

    • BugFix
    • 26. Juni 2009 um 21:39
    Zitat von tobi_girst

    Aber ich kapier nicht, wie man nur 1en Teil auf die rechte Seite bringt


    Die Menüs haben in der Reihenfolge, in der du sie erstellst einen 0-basierten Index. Wenn du also das zweite Menü rechts anordnen willst, mußt du, wie im Bsp., _GUICtrlMenu_JustifyRight($gui, 1) anwenden.

  • µit - Juli

    • BugFix
    • 26. Juni 2009 um 18:59
    Zitat von eukalyptus

    Flag3=' ' : 'Test Muster Das ist ein Muster und ein Test' (SubString wird in diesem Fall beim Leerzeichen getrennt und nach allen Teilen einzeln gesucht)


    Das solltest du dann für den Return präzisieren:
    Rückgabe Anzahl
    - für jedes Element einzeln? (Array, delimited String)
    - als Summe für alle Elemente?

    Also ich würde mitmachen.

  • Verschicken

    • BugFix
    • 26. Juni 2009 um 18:49

    Schau dir mal TCPSend() und die zugehörigen Funktionen an. Die Bsp. in der Hilfe enthalten schon genau dein Problem.

  • Neue Funktionen für GuiMenu ==> ..._ColumnsCreate, ..._JustifyRight

    • BugFix
    • 26. Juni 2009 um 14:57
    Zitat von progandy

    warum machst du das nicht mit Unicode ?

    :D Die Macht der Gewohnheit. Aber hast recht, werde es einfügen.

  • Neue Funktionen für GuiMenu ==> ..._ColumnsCreate, ..._JustifyRight

    • BugFix
    • 26. Juni 2009 um 14:21

    Hi,
    wenn ihr mal sehr viele Menüpunkte unterbringen müßt, ist es übersichtlicher diese in Spalten anzuordnen.
    Da diese Funktion in der GuiMenu.au3 nicht enthalten ist, habe ich sie mal erstellt.

    Edit:
    Habe grad noch erweitert um die Möglichkeit, Menüpunkte rechts im Fenster anzuordnen.

    Anwendung s. Bsp. bzw. Angaben im Funktionskopf:

    Spoiler anzeigen
    [autoit]

    #Include <GuiMenu.au3>

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

    $gui = GUICreate('Test')
    $mnu1 = GUICtrlCreateMenu('Mainmenü 1')
    For $i = 1 To 20
    GUICtrlCreateMenuItem('SubMenü_' & $i, $mnu1)
    Next
    $mnu2 = GUICtrlCreateMenu('Mainmenü 2')
    For $i = 1 To 20
    GUICtrlCreateMenuItem('SubMenü_' & $i, $mnu2)
    Next
    GUISetState()

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

    _GUICtrlMenu_ColumnsCreate($gui, 0, 5)
    _GUICtrlMenu_ColumnsCreate($gui, 1, 10)

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

    _GUICtrlMenu_JustifyRight($gui, 1)

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

    Do
    Until GUIGetMsg() = -3

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

    ;===============================================================================
    ; Function Name: _GUICtrlMenu_JustifyRight($hWnd, $iMnuIndex)
    ; Description:: Das MenüItem wird rechts im Fenster positioniert
    ; Parameter(s): $hWnd - Fenster ID
    ; $iMnuIndex - 0-Index des gewünschten Menüs
    ; Requirement(s): #Include <GuiMenu.au3>
    ; Return Value(s): Erfolg - 1
    ; Fehler - 0
    ; @error: 1= Fenster enthält kein Menü
    ; 2= $iMnuIndex außerhalb des Indexbereiches
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUICtrlMenu_JustifyRight($hWnd, $iMnuIndex)
    Dim $hMenu, $mnuID, $mnuItemText, $buffer
    $hMenu = _GUICtrlMenu_GetMenu($hWnd)
    If Not $hMenu Then Return SetError(1,0,0)
    If ($iMnuIndex+1 > _GUICtrlMenu_GetItemCount($hMenu)) Or ($iMnuIndex < 0) Then Return SetError(2,0,0)
    $mnuID = _GUICtrlMenu_GetItemID($hMenu, $iMnuIndex)
    $mnuItemText = _GUICtrlMenu_GetItemText($hMenu, $iMnuIndex)
    $buffer = DllStructCreate('wchar[' & StringLen($mnuItemText)+1 & ']')
    DllStructSetData($buffer, 1, $mnuItemText)
    DllCall("user32", 'long', "ModifyMenuW", 'long', $hMenu, 'long', $mnuID, _
    'long', $MF_RIGHTJUSTIFY, 'long', $mnuID, 'ptr', DllStructGetPtr($buffer))
    DllCall("user32", 'long', 'DrawMenuBar', 'long', $hWnd)
    Return 1
    EndFunc ;<==_GUICtrlMenu_JustifyRight

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

    ;===============================================================================
    ; Function Name: _GUICtrlMenu_ColumnsCreate($gui, $iMnuIndex, $ItemInCol=0)
    ; Description:: Listet MenüItem spaltenförmig auf
    ; Parameter(s): $gui - Fenster ID
    ; $iMnuIndex - 0-Index des gewünschten Menüs
    ; $ItemInCol - Anzahl der Item in einer Spalte
    ; Requirement(s): #Include <GuiMenu.au3>
    ; Return Value(s): Erfolg - 1
    ; Fehler - 0
    ; @error: 1= Fenster enthält kein Menü
    ; 2= $iMnuIndex außerhalb des Indexbereiches
    ; 3= Menü enthält weniger Item als je Spalte gelistet werden sollen
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GUICtrlMenu_ColumnsCreate($gui, $iMnuIndex, $ItemInCol=0)
    Local $hMenu, $hSubMenu, $buffer
    Local $mnuItemCnt, $mnuItemID, $mnuItemText
    Local $Mode, $count = 0
    $hMenu = _GUICtrlMenu_GetMenu($gui)
    If Not $hMenu Then Return SetError(1,0,0)
    If ($iMnuIndex+1 > _GUICtrlMenu_GetItemCount($hMenu)) Or ($iMnuIndex < 0) Then Return SetError(2,0,0)
    $hSubMenu = _GUICtrlMenu_GetItemSubMenu($hMenu, $iMnuIndex)
    If BitAND(_GUICtrlMenu_GetItemState($hMenu, $hSubMenu), 1) Then
    $Mode = $MF_MENUBARBREAK
    Else
    $Mode = $MF_MENUBREAK
    EndIf
    $mnuItemCnt = _GUICtrlMenu_GetItemCount($hSubMenu)
    If $mnuItemCnt <= $ItemInCol Then
    Return SetError(3,0,0)
    EndIf
    For $i = 1 To $mnuItemCnt
    If ($i > 1) And (Not Mod($i-1, $ItemInCol)) Then
    $mnuItemText = _GUICtrlMenu_GetItemText($hSubMenu, $i-1)
    $mnuItemID = _GUICtrlMenu_GetItemID($hSubMenu, $i-1)
    $buffer = DllStructCreate('wchar[' & StringLen($mnuItemText)+1 & ']')
    DllStructSetData($buffer, 1, $mnuItemText)
    DllCall("user32", 'long', "ModifyMenuW", 'long', $hSubMenu, 'long', $i-1, _
    'long', BitOR($MF_BYPOSITION, $Mode), 'long', $mnuItemID, 'ptr', DllStructGetPtr($buffer))
    EndIf
    Next
    Return 1
    EndFunc ;<==_GUICtrlMenu_ColumnsCreate

    [/autoit]


    Und so sieht es dann aus:

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

  • Feuerwehr - Alarmfax -> Prüfung ob Datei da ist, Verarbeitung

    • BugFix
    • 26. Juni 2009 um 10:20

    Du benötigst:
    - Endlosschleife in der dein Stammordner auf neue Dateien geprüft wird, hier das Prüfintervall festlegen mit Sleep in der Schleife
    - Variable, die den Namen der letzten aktuellen Datei speichert (hatten wir vor kurzem gerade das Thema: Neueste Datei in einem Ordner suchen, schau mal mit der SuFu)
    - gegen diese Variable prüfst du bei jedem Schleifendurchlauf, ob die jetzt neueste Datei einen anderen Namen hat als in der Variable steht
    - wenn ja, ist ein neues Fax da, das du deiner Verarbeitung zuführen kannst
    (Ich würde sicherheitshalber dann explizit alle Dateinamen verwalten und prüfen, es könnten ja auch mehrere Faxe eingegangen sein. Kannst du gut mit _FileListToArray erledigen. Wenn nur die Faxe in dem Ordner landen, hast du schon nur durch die Anzahl der Dateien den Hinweis ob etwas Neues hinzugekommen ist.)

  • String auf gültigen Ordnernamen prüfen

    • BugFix
    • 26. Juni 2009 um 10:10

    Das kannst du so lösen:

    [autoit]


    ; Ordnername prüfen
    $folder1 = 'blablub'
    $folder2 = 'bla?blub'

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

    If StringRegExp($folder1, '[/\\:*?"<>|]') Then
    MsgBox(0, 'Prüfung', 'Ordnername fehlerhaft')
    Else
    MsgBox(0, 'Prüfung', 'Ordnername OK')
    EndIf

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

    If StringRegExp($folder2, '[/\\:*?"<>|]') Then
    MsgBox(0, 'Prüfung', 'Ordnername fehlerhaft')
    Else
    MsgBox(0, 'Prüfung', 'Ordnername OK')
    EndIf

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

    ; nur Klein-/Großbuchstaben
    $str1 = 'abCDefGH'
    $str2 = 'ab12CD'

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

    If StringRegExp($str1, '\A[a-zäöüßA-ZÄÖÜ]*\z') Then
    MsgBox(0, 'Prüfung', 'OK')
    Else
    MsgBox(0, 'Prüfung', 'FEHLER')
    EndIf

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

    If StringRegExp($str2, '\A[a-zäöüßA-ZÄÖÜ]*\z') Then
    MsgBox(0, 'Prüfung', 'OK')
    Else
    MsgBox(0, 'Prüfung', 'FEHLER')
    EndIf

    [/autoit]
  • Listview: Inhalt rechtsbündig anzeigen // Inhalt ins Clipboard kopieren

    • BugFix
    • 26. Juni 2009 um 09:25

    Du mußt das Doppelklick-Event im ListView verwerten. Dazu nutzt du WM_NOTIFY.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>
    $gui = GUICreate('test')
    $lv = GUICtrlCreateListView('eMail|value', 10,10,300,150,Default,$LVS_EX_FULLROWSELECT)
    $hLV = GUICtrlGetHandle($lv)
    _GUICtrlListView_SetColumnWidth($hLV, 0, 200)
    _GUICtrlListView_SetColumnWidth($hLV, 1, 86)
    _GUICtrlListView_JustifyColumn($hLV, 1, 1)
    For $i = 1 To 10
    GUICtrlCreateListViewItem('('&$i&') '&Random(2000,20000,1)&'mail@bla.com|'& StringFormat('%.3f', Random(0,200)), $lv)
    Next
    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')

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

    Do
    Until GUIGetMsg() = -3

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

    Func _LeftDblClick($index)
    If $index < 0 Then Return
    Local $txt = _GUICtrlListView_GetItemText($hLV, $index)
    ClipPut($txt)
    ToolTip('"' & $txt & '"' & @LF & 'wurde in die Zwischenablage kopiert.')
    Sleep(1500)
    ToolTip('')
    EndFunc

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hLV
    If Not IsHWnd($hLV) Then $hWndListView = GUICtrlGetHandle($hLV)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _LeftDblClick(DllStructGetData($tInfo, "Index"))
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • VBS zu EXE Konvertieren

    • BugFix
    • 26. Juni 2009 um 08:43
    Zitat von DjDominik

    Es Konvertiert .VBS Dateien in eine .Exe Datei.

    Nunja, eine Konvertierung ist es nicht. Dazu müßtest du den Inhalt des Skriptes in AutoIt-Befehle umsetzen.
    Es handelt sich hierbei um den Aufruf der Skriptdatei über eine AutoIt.exe.
    Aber warum rufst du dann die VBS nicht direkt auf und gehst den Umweg über eine exe ?

  • Word Dokumente öffnen, aber kein Inhalt???

    • BugFix
    • 25. Juni 2009 um 11:25

    _WordCreate() dient dazu, eine Word-Instanz zu erstellen.
    Deine Datei mußt du dann mit _WordDocOpen() öffnen:

    [autoit]

    #include <Word.au3>

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

    $path ='C:\Test\test.doc'
    $oWordApp = _WordCreate()
    _WordDocOpen($oWordApp, $path)

    [/autoit]

    Edit: Korrigiere mich :D
    $oWordApp = _WordCreate($path) funktioniert auch - wenn es bei dir nich läuft, überprüfe mal den Pfad.

  • Erfahrungen mit Excel

    • BugFix
    • 25. Juni 2009 um 10:06

    Hi,
    du kannst auch die in AutoIt integrierte Excel-UDF nutzen.
    Wenn du allerdings mit dem Excel-Objektmodell vertraut bist, kannst du viele Dinge effektiver lösen, wenn du direkt mit den Methoden arbeitest.

    Zu deiner Frage: Ich schaus mir mal an und erstelle ein Muster.

    Edit
    So, hier die Lösung:

    [autoit]

    Local $LW = 'C:\'
    Local $folder = 'TEST'
    Local $filename = 'beispiel'
    Local $sFilePath = $LW & $folder & '\' & $filename & '.xls'

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

    Local $oExcel = ObjCreate("Excel.Application")
    $oExcel.Visible = 0 ; 1= sichtbar
    Local $oBook = $oExcel.WorkBooks.Open($sFilePath, Default, False)

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

    ; hier folgt dein Code zur Bearbeitung

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

    ; Speichern in neuem Ordner
    Local $sFolderSave = $folder & '_' & $filename
    Local $sFileSave = $LW & $folder & '\' & $sFolderSave & '\' & $sFolderSave & '.xls'
    If Not FileExists($LW & $folder & '\' & $sFolderSave) Then DirCreate($LW & $folder & '\' & $sFolderSave)

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

    $oExcel.Application.DisplayAlerts = False
    $oExcel.ActiveWorkBook.SaveAs($sFileSave)
    $oExcel.Application.Quit

    [/autoit]

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™