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

  • Programm aufrufen

    • BugFix
    • 14. September 2009 um 17:54
    Zitat von BigRox

    Wenn da mehr als ein Leerzeichen in Folge im Pfad steht


    Aus mir unerfindlichen Gründen akzeptiert Windows leider solchen Schwachsinn. :huh:
    In meinen Pfaden (außer den von Windoof selbst erstellten) wirst du niemals Leerzeichen finden - wozu gibts den Unterstrich?

  • Taskbar Eigenschaften

    • BugFix
    • 13. September 2009 um 23:35

    Habe noch eine weitere Variante mit Ermittlung von Autohide und Ontop hinzugefügt.

  • Taskbar Eigenschaften

    • BugFix
    • 13. September 2009 um 22:24

    Hi,
    ich war zwar der Meinung, ich hätte diese Funktion schon mal erstellt - aber ich konnte es nicht mehr finden. ;)
    Also somit (evtl. zum zweiten mal) will ich euch nicht davon verschonen. :D
    Mit der Funktion lassen sich Maße und Position der Taskleiste ermitteln.


    EDIT 2021-01-21

    Ich habe mir die Funktion nochmals vorgesucht und die damaligen Fehler in der 2.ten Version korrigiert. Die Werte für die Anordnung sind jetzt auch konform mit Windows (im Uhrzeigersinn: 0=links, 1=oben, 2=rechts, 3=unten). Alles andere erklärt sich selbst.

    AutoIt: _getTaskBarProps.au3
    ;-- TIME_STAMP   2021-01-21 13:19:07   v 0.1
    
    
    Local $tTB = _GetTaskBarProps(True)
    
    ConsoleWrite( _
    'hWnd:     ' & $tTB.hWnd & @CRLF & _
    'Autohide: ' & $tTB.autohide & @CRLF & _
    'uEdge:    ' & $tTB.uEdge & @CRLF & _
    'sEdge:    ' & $tTB.sEdge & @CRLF & _
    'Rect:     ' & '[' & $tTB.left & ', ' & $tTB.top & ', ' & $tTB.right & ', ' & $tTB.bottom & ']' & @CRLF)
    
    ;===================================================================================================
    ; Function Name....: _GetTaskBarProps
    ; Description......: gibt Eigenschaften und Position der Taskbar zurück
    ; Parameter(s).....: [optional] $_bReturnStruct - Rückgabe als (True) Struktur, (False - Standard) Array
    ; Return Value(s)..: Array / Struktur mit den Taskbarwerten
    ;===================================================================================================
    Func _GetTaskBarProps($_bReturnStruct=False)
        Local Const $ABM_GETSTATE = 0x4         ; specify the cbSize.
        Local Const $ABM_GETTASKBARPOS = 0x5    ; specify the cbSize.
        Local Const $ABM_GETAUTOHIDEBAR = 0x7   ; specify the cbSize and uEdge. Returns the handle to the autohide appbar
    
        ; ABM_GETSTATE
        Local Const $ABS_AUTOHIDE = 0x1
        Local Const $ABS_ALWAYSONTOP = 0x2  ; ab Win7 nicht mehr!! --> wenn NICHT $ABS_AUTOHIDE ist es $ABS_ALWAYSONTOP
    
        ; uEdge - ABM_GETAUTOHIDEBAR
        Local Const $ABE_LEFT = 0
        Local Const $ABE_TOP = 1
        Local Const $ABE_RIGHT = 2
        Local Const $ABE_BOTTOM = 3
    
        Local $hWndAppBar = DllCall("user32.dll", 'long', "FindWindowA", 'str', "Shell_traywnd", 'str', "")[0]
        Local $iState, $iEdge, $hWnd, $shell32 = DllOpen("shell32")
        Local $tRC = DllStructCreate("struct;int left;int top;int right;int bottom;endstruct")
        Local $tAPPBARDATA = DllStructCreate("dword cbSize;int hWnd;uint;uint uEdge;int left;int top;int right;int bottom;int")
        $tAPPBARDATA.cbSize = DllStructGetSize($tAPPBARDATA)
        $tAPPBARDATA.hWnd = $hWndAppBar
    
        ; get pos
        $ret = DllCall($shell32, 'int', 'SHAppBarMessage', 'int', $ABM_GETTASKBARPOS, 'ptr', DllStructGetPtr($tAPPBARDATA))
        For $i = 1 To 4
            DllStructSetData($tRC, $i, DllStructGetData($tAPPBARDATA, $i+4))
        Next
    
        ; get state
        $ret = DllCall($shell32, 'int', 'SHAppBarMessage', 'int', $ABM_GETSTATE, 'ptr', DllStructGetPtr($tAPPBARDATA))
        $iState = $ret[0]
    
        ; get Edge
        If $iState = $ABS_AUTOHIDE Then
            For $i = 0 To 3
                $tAPPBARDATA.uEdge = $i
                $ret = DllCall($shell32, 'int', 'SHAppBarMessage', 'int', $ABM_GETAUTOHIDEBAR, 'ptr', DllStructGetPtr($tAPPBARDATA))
                $hWnd = $ret[0]
                If $hWnd Then
                    $iEdge = $i
                    ExitLoop
                EndIf
            Next
            DllClose($shell32)
        Else
            If $tRC.top < 1 And $tRC.left < 1 Then
                    If $tRC.bottom > $tRC.right Then $iEdge = 0
                    If $tRC.right > $tRC.bottom Then $iEdge = 1
            ElseIf $tRC.top < 1 And $tRC.left > 0 Then
                $iEdge = 2
            Else
                $iEdge = 3
            EndIf
        EndIf
    
        ; return array or structure: [.hWnd, .autohide(True/False), .uEdge(0..3), .sEdge(left..bottom), .left, .top, .right, .bottom]
        Local $aEdge[] = ['LEFT','TOP','RIGHT','BOTTOM']
        Local $aRet[] = [$hWndAppBar, ($iState = $ABS_AUTOHIDE), $iEdge, $aEdge[$iEdge], $tRC.left, $tRC.top, $tRC.right, $tRC.bottom]
        Local $tRet = DllStructCreate('int hWnd;bool autohide;uint uEdge;char sEdge[' & StringLen($aEdge[$iEdge]) & '];int left;int top;int right;int bottom;')
        For $i = 0 To UBound($aRet) -1
            DllStructSetData($tRet, $i+1, $aRet[$i])
        Next
    
        Return ($_bReturnStruct ? $tRet : $aRet)
    EndFunc  ;==>_GetTaskBarProps
    Alles anzeigen


    Die alten Versionen belasse ich aber mal im Post.

    _GetTaskBarProps (veraltet)
    [autoit]

    ConsoleWrite("TOP" & @TAB & _GetTaskBarProps('top') & @CRLF)
    ConsoleWrite("LEFT" & @TAB & _GetTaskBarProps('left') & @CRLF)
    ConsoleWrite("HEIGHT" & @TAB & _GetTaskBarProps('height') & @CRLF)
    ConsoleWrite("WIDTH" & @TAB & _GetTaskBarProps('width') & @CRLF)
    ConsoleWrite("ALIGN" & @TAB & _GetTaskBarProps('align') & @CRLF & @CRLF)
    $aProps = _GetTaskBarProps()
    ConsoleWrite("LEFT" & @TAB & $aProps[0] & @CRLF)
    ConsoleWrite("TOP" & @TAB & $aProps[1] & @CRLF)
    ConsoleWrite("RIGHT" & @TAB & $aProps[2] & @CRLF)
    ConsoleWrite("BOTTOM" & @TAB & $aProps[3] & @CRLF)

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

    ;===============================================================================
    ; Function Name: _GetTaskBarProps($hProperty="")
    ; Description:: Ermittelt Taskbareigenschaften
    ; Parameter(s): $hProperty Eigenschaft, die zurückgegeben werden soll
    ; "" (Standard) gibt Rectanglposition als Array zurück [left,top,right,bottom]
    ; "TOP" - X1 obere Position
    ; "LEFT" - Y1 linke Position
    ; "HEIGHT" - Y2-Y1 Höhe der Taskleiste
    ; "WIDTH" - X2-X1 Breite der Taskleiste
    ; "ALIGN" - Anordnung: 1=links, 2=rechts, 3=oben, 4=unten
    ; Return Value(s): s. $hProperty
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _GetTaskBarProps($hProperty="")
    Local $tRect = DllStructCreate("long;long;long;long"), $hWnd, $ret
    $hProperty = StringUpper(StringStripWS($hProperty, 3))
    $ret = DllCall("user32.dll", 'long', "FindWindowA", 'str', "Shell_traywnd", 'str', "")
    $hWnd = $ret[0]
    DllCall("User32.dll", "int", "GetWindowRect", "hwnd", $hWnd, "ptr", DllStructGetPtr($tRect))
    Local $left = DllStructGetData($tRect, 1)
    Local $top = DllStructGetData($tRect, 2)
    Local $right = DllStructGetData($tRect, 3)
    Local $bottom = DllStructGetData($tRect, 4)
    If $hProperty = "" Then
    Local $aOut[4] = [$left, $top, $right, $bottom]
    Return $aOut
    EndIf
    Switch $hProperty
    Case "TOP"
    Return $top
    Case "LEFT"
    Return $left
    Case "HEIGHT"
    Return $bottom - $top
    Case "WIDTH"
    Return $right - $left
    Case "ALIGN"
    If $top < 1 Then
    If $left < 1 Then
    If $bottom > $right Then Return 1
    If $right > $bottom Then Return 3
    EndIf
    EndIf
    If $top < 1 Then
    If $left > 0 Then Return 2
    EndIf
    If $left < 1 Then
    If $top > 0 Then Return 4
    EndIf
    EndSwitch
    EndFunc ;==>_GetTaskBarProps

    [/autoit]
    _GetTaskBarProps2 (veraltet)
    [autoit]


    ConsoleWrite(_GetTaskBarProps2() & @CRLF)

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

    ; gibt Eigenschaft(en) und Position der Taskbar zurück
    Func _GetTaskBarProps2()
    Global Const $ABM_NEW = 0x0
    Global Const $ABM_REMOVE = 0x1
    Global Const $ABM_QUERYPOS = 0x2
    Global Const $ABM_SETPOS = 0x3
    Global Const $ABM_GETSTATE = 0x4
    Global Const $ABM_GETTASKBARPOS = 0x5
    Global Const $ABM_ACTIVATE = 0x6
    Global Const $ABM_GETAUTOHIDEBAR = 0x7
    Global Const $ABM_SETAUTOHIDEBAR = 0x8
    Global Const $ABM_WINDOWPOSCHANGED = 0x9

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

    Global Const $ABN_STATECHANGE = 0x0
    Global Const $ABN_POSCHANGED = 0x1
    Global Const $ABN_FULLSCREENAPP = 0x2
    Global Const $ABN_WINDOWARRANGE = 0x3

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

    Global Const $ABS_AUTOHIDE = 0x1
    Global Const $ABS_ALWAYSONTOP = 0x2

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

    Global Const $ABE_LEFT = 0
    Global Const $ABE_TOP = 1
    Global Const $ABE_RIGHT = 2
    Global Const $ABE_BOTTOM = 3

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

    Local $hWndAppBar, $msg = '', $ret
    Local $tRECT = DllStructCreate('long;long;long;long')
    Local $tAPPBARDATA = DllStructCreate( _
    'long cbSize;' & _
    'hwnd hWnd;' & _
    'long uCallbackMessage;' & _
    'long uEdge;' & _
    'ptr ' & DllStructGetPtr($tRECT) & ';' & _
    'long lParam')
    DllStructSetData($tAPPBARDATA, 'cbSize', DllStructGetSize($tAPPBARDATA))
    $ret = DllCall("shell32", 'long', 'SHAppBarMessage', 'long', $ABM_GETSTATE, 'ptr', DllStructGetPtr($tAPPBARDATA))
    $state = $ret[0]
    Switch $state
    Case False
    $msg &= "Auto Hide= False, Always on Top = False." & @CRLF
    Case $ABS_ALWAYSONTOP
    $msg &= "Always on Top = True." & @CRLF
    Case Else
    $msg &= "Auto Hide = True." & @CRLF
    EndSwitch
    For $position = $ABE_LEFT To $ABE_BOTTOM
    DllStructSetData($tAPPBARDATA, 'uEdge', $position)
    $ret = DllCall("shell32", 'long', 'SHAppBarMessage', 'long', $ABM_GETAUTOHIDEBAR, 'ptr', DllStructGetPtr($tAPPBARDATA))
    $hWndAppBar = $ret[0]
    If $hWndAppBar > 0 Then
    Switch $position
    Case $ABE_LEFT
    $msg &= "LEFT "
    Case $ABE_TOP
    $msg &= "TOP "
    Case $ABE_RIGHT
    $msg &= "RIGHT "
    Case $ABE_BOTTOM
    $msg &= "BOTTOM "
    EndSwitch
    EndIf
    Next
    Return $msg
    EndFunc ;==>_GetTaskBarProps2()

    [/autoit]

    Dateien

    _GetTaskBarProps.au3 3,51 kB – 579 Downloads
  • Probleme mit Schleifen

    • BugFix
    • 13. September 2009 um 20:38

    GE IXI TIM:
    Dein Code hat 'nen Fehler. ;)
    Wenn $x True ist, kommst du gar nicht erst in die While-Schleife. (While $x = False !!)

  • Probleme mit Schleifen

    • BugFix
    • 13. September 2009 um 20:11

    Meinst du so?

    [autoit]

    While 1 ; Endlosschleife
    If $var Then ; wenn $var True dann
    Do
    ; irgendein Code
    Until Not $var ; bis $var False
    EndIf
    WEnd

    [/autoit]
  • Deutsche Hilfe - was gibts zu optimieren?

    • BugFix
    • 13. September 2009 um 18:18
    Zitat von Der_Doc

    Also so wie in meinem Post?


    Ja, wobei Band in Rebar wieder eins der Worte ist, dessen Bedeutung klar ist, man aber keine sinnvolle Übersetzung findet. Ein Grund mehr nicht nach Übersetzungen zu suchen.

  • Deutsche Hilfe - was gibts zu optimieren?

    • BugFix
    • 13. September 2009 um 18:04
    Zitat von Tweaky

    siehst du
    Parent Item, Child Item, String, non-zero auch als Steuerelement an


    Wenn es selbst auch keine Controls sind, so sind sie absolut selbsterklärend (auch ohne große Englisch-Kenntnisse) und bei non-zero würde ich eine Übersetzung glatt verweigern. :D Nicht-Null ?? Sachlich korrekt, aber sieht und klingt irgendwie blöd. ;)

  • Deutsche Hilfe - was gibts zu optimieren?

    • BugFix
    • 13. September 2009 um 17:25

    Ich bleibe dabei:
    Namen von Controls sollten keinesfalls übersetzt werden!
    Es ist doch völlig ausreichend, wenn im Glossar eine nähere Beschreibung/Erklärung vorhanden ist. :rolleyes:

  • Programm aufrufen

    • BugFix
    • 13. September 2009 um 17:02

    Zum Editor ersetzen hatte ich mal einen Launcher gebastelt. Da die Notepad.exe unter Umständen 4-fach vorhanden ist, müssen alle Vorkommen auch außer Betrieb gesetzt werden.
    Vielleicht nützt es dir was. https://autoit.de/index.php?page…31932#post31932

  • RichEdit, dessen Text man nicht makieren kann.

    • BugFix
    • 13. September 2009 um 13:51

    Hier mal eine Bsp.-Lösung. Übrigens braucht man WM_MOVE ja gar nicht. Das Child ist durch die Definition bereits an das Parent gekettet und verarbeitet somit auch die MOVE Message des Parents.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>

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

    $GUI = GUICreate('TEST', -1, -1, -1, -1, Default, $GUI_WS_EX_PARENTDRAG)
    $Edit = GUICtrlCreateEdit('Dieser' & @CRLF & 'Text' & @CRLF & 'darf' & @CRLF & 'nicht' _
    & @CRLF & '- gelöscht' & @CRLF & '- geändert' & @CRLF & 'oder' & @CRLF & 'sonstwie' _
    & @CRLF & 'manipuliert' & @CRLF & 'werden', 10, 10, 180, 120, BitOR($WS_VSCROLL, $WS_HSCROLL))
    $Button = GUICtrlCreateButton('Ende', 10, 140, 50, 20)
    ControlFocus($GUI, '', $Button)

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

    Global Const $SM_CAPTION = _WinAPI_GetSystemMetrics(4)
    Global Const $SM_HOR_SB = _WinAPI_GetSystemMetrics(10) -1 ; Breite der Scrollbox auf horizontalaer Scrollbar (-1 zum Überlappen)
    Global Const $SM_VER_SB = _WinAPI_GetSystemMetrics(9) -1 ; Breite der Scrollbox auf vertikaler Scrollbar
    $E_Pos = ControlGetPos($GUI, '', $Edit)
    $Child = GUICreate('', $E_Pos[2]-$SM_VER_SB, $E_Pos[3]-$SM_HOR_SB, $E_Pos[0], $E_Pos[1]+$SM_CAPTION, $WS_POPUP, $WS_EX_MDICHILD, $GUI)
    GUISetBkColor(0xff0000, $Child)
    WinSetTrans($Child, '', 40)

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

    GUISetState(@SW_SHOW, $Child)
    GUISetState(@SW_SHOW, $GUI)

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

    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $Button, -3
    Exit
    EndSwitch
    If BitAND(WinGetState($Child), 8) Then
    GUISetState(@SW_RESTORE, $GUI)
    EndIf
    WEnd

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

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    If $lParam = GUICtrlGetHandle($Edit) Then
    ControlFocus($GUI, '', $Button) ; wenn Focus auf Edit ==> Focus auf anderes Ctrl setzen
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]
  • RichEdit, dessen Text man nicht makieren kann.

    • BugFix
    • 13. September 2009 um 09:32
    Zitat von Deepred

    Ja ok. Aber ist das nicht etwas unprofessionell? Was ist, wenn man die MainGUI veschiebt? Dann bleibt doch das Transparente Fenster an der selben stelle

    Das kannst du mit WM_MOVE abfangen und dann dein Child mitverschieben.
    Und wieso unprofessionell? Wenn etwas ohne viel Aufwand funktioniert ist doch OK - oder?

    Zitat von JoEtHeKiLlEr

    aber ich denke mal die Breite von Scrollbars variiert je nach Style

    Das kannst man mit _WinAPI_GetSystemMetrics ermitteln.

    Es kommt sicher auf den Verwendungszweck an. Vollständigerweise muß man hinzufügen, dass bei dieser Methode der User die Möglichkeit hat, sich per Tastatur in das Editfeld zu bewegen und dann zu manipulieren. Aber da kann man auch die Cursorposition abfangen und entsprechend reagieren.

  • Checken ob MsgBox kommt und drauf reagieren

    • BugFix
    • 12. September 2009 um 23:42

    Hi, du brauchst 'ne Endlosschleife (While - WEnd) und darin prüfst du mit Winwait() auf das Erscheinen der Meldung. Dann simulierst du OK-Klick und die Schleife wartet erneut auf das Erscheinen der Fehlermeldung.

  • RichEdit, dessen Text man nicht makieren kann.

    • BugFix
    • 12. September 2009 um 23:34

    Wir wollen mal nicht mit Kanonen auf Spatzen schießen. :D
    Hierfür braucht es wahrlich keinen Hook. Leg einfach ein Child-GUI (POPUP) exakt über das Edit und laß nur die Scrollbar frei. Transparenz auf 0 und fertig. ;)

  • Checkboxen auswerten

    • BugFix
    • 12. September 2009 um 23:18

    Ich verwende dafür Dualzahlen. Dann kannst du ganz simpel aus der Summe prüfen, welche Boxen gecheckt sind. Macht hier die Funktion _ReadCB().

    Spoiler anzeigen
    [autoit]

    ; Muster Checkbox-Bearbeitung
    ; Ziel: einfache Abfrage, welche CB aktiviert sind

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

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt("MustDeclareVars", 1)
    Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str
    Global $arCB[20][2] ; Array für Handle und Dual-Wert der CB
    For $i = 0 To UBound($arCB) -1
    $arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert
    Next
    Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
    ; Startstatus für alle: UNCHECKED
    Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
    Global $top = -10
    $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
    For $i = 0 To UBound($arCB) -1
    $top += 30
    $arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120)
    GUICtrlSetOnEvent(-1, '_ClickCB')
    Next
    $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
    GUICtrlSetOnEvent(-1, '_CheckAll')
    $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
    GUICtrlSetOnEvent(-1, '_UnCheckAll')
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc

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

    Func _ClickCB()
    For $i = 0 To UBound($arCB) -1
    If $arCB[$i][0] = @GUI_CtrlId Then
    $Checked = BitXOR($Checked, $arCB[$i][1])
    _ReadCB()
    ExitLoop
    EndIf
    Next
    EndFunc

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

    Func _CheckAll()
    For $i = 0 To UBound($arCB) -1
    If Not BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _UnCheckAll()
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
    Local $str = 'Markiert: '
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
    Next
    WinSetTitle($GUI, '', StringTrimRight($str, 2))
    EndFunc

    [/autoit]
  • Windows Töne

    • BugFix
    • 10. September 2009 um 12:45

    Warum willst du eigentlich zum Sound noch 'ne MsgBox einblenden?
    Also Überwachung, ob auf eine Sounddatei zugegriffen wird soll es werden. Da fällt mir adhoc nix ein.
    Wenn ich nicht irre, wird die Datei ja nicht mal vom System gesperrt. Abspielen ist ja reiner Lesevorgang und das könnten mehrere Anwendungen zeitgleich tun. Insofern habe ich keinen Ansatz, woher die Info stammen soll, dass die Datei in Benutzung ist.

  • Windows Töne

    • BugFix
    • 10. September 2009 um 12:15
    Zitat von Reaker

    wenn ein Windows Ton geöffnet wird


    Was ist Windows Ton ?
    Meinst du wenn irgendein Sound abgespielt wird?

  • Array 3D effektiv durchsuchen

    • BugFix
    • 9. September 2009 um 10:11

    Danke für beide Ideen.

    Oscar : Das ist dann ein klares Votum für das Dictionary Object. :thumbup:
    Erspart mir dann auch einiges an Arraymanagement. Werde beim Löschen von Werten dann das Array nicht mehr verändern, sondern nur den Schlüsselwert entfernen. Bringt auch wieder Zeitgewinn.
    Ist eigentlich für ein altes Projekt, dass aber einer Optimierung bedarf. ;)
    Wenn alles fertig ist, zeig ich euch, was draus geworden ist.

  • Array 3D effektiv durchsuchen

    • BugFix
    • 8. September 2009 um 22:48

    OK, Danke.
    Ich hatte überlegt, ob es Sinn macht, wie bei Quicksearch vorzugehen. Bloß bei unsortiert müßte ich dann willkürlich die Richtung wechseln und noch zusätzlich die Bereiche verwalten.
    Dann bleib ich bei meiner Version.

  • Array 3D effektiv durchsuchen

    • BugFix
    • 8. September 2009 um 22:33

    Sortiert sind die Daten nur direkt nach dem Erstellen. Mögliches Löschen von Elementen führt allerdings zu einer geänderten Reihenfolge, da aus Geschwindigkeitsgründen das letzte Arrayelement an die Position des gelöschten geschrieben und dann das Array per ReDim verkleinert wird.

  • Array 3D effektiv durchsuchen

    • BugFix
    • 8. September 2009 um 20:06

    Hi,
    ich habe ein 3D-Array, das durchaus einige hundert Einträge haben kann.
    Nun suche ich eine Möglichkeit dieses Array effektiv zu durchsuchen. Bisher iteriere ich durch das Array, was bei vielen Elementen nicht unbedingt zügig ist. Die Suchposition ist fix, s. Code.

    [autoit]

    Local $ar3D[500][20][5]

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

    Func __ArraySearch(ByRef $array, $search)
    For $i = 0 To UBound($array) -1
    If $array[$i][0][0] = $search Then
    Return $i
    EndIf
    Next
    Return -1
    EndFunc ;==>__ArraySearch

    [/autoit]

    Falls ihr Ideen habt, immer her damit. ;)

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™