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

  • ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3)

    • BugFix
    • 24. Juli 2011 um 17:52
    Zitat von chip

    Jetzt habe ich doch noch ein Problem. Wenn ich ein Subitem, welches mit _GUICtrlListView_AddSubItem hinzugefügt wurde, umfärben will kommt immer der Fehler:


    Das ist auch völlig korrekt. Beim StartUp ( _GUICtrlListView_Formatting_Startup($hGUI, $hListView) ) wird die Spaltenzahl des/der verwendeten Listview ausgelesen und anhand dieser Werte das Array $aIParam erstellt. Wenn du später eine Spalte hinzufügst, ist dafür im Array kein Platz reserviert und der Fehler tritt auf.
    Ich möchte auch ungern diesen Schritt variabel gestalten, da eine ständige zusätzliche Überprüfung auf neue Spalten in allen betroffenen Funktionen auch einen erheblichen (zeitlichen) Mehraufwand im Programmablauf darstellt.
    Ich denke mal, es ist auch keine allzu große Hürde beim Programmieren, die Spaltenzahl zuerst festzulegen. ;)

  • Veränderte Registry Aktuallisieren!

    • BugFix
    • 24. Juli 2011 um 11:51

    Bei Registryeinträgen ist Windows nunmal zickig. :D Aber wenn du in den Schlüssel "HKEY_CURRENT_USER" schreibst, brauchst du nicht kpl. neustarten. Hier reicht Abmelden/Anmelden zum Aktivieren der Änderungen. Geht etwas schneller als Neustart.
    Eventuell reicht es ja auch die explorer.exe neu zu starten - schon probiert?

  • Virtuelles (partielles) Laufwerk Erstellen/Löschen

    • BugFix
    • 23. Juli 2011 um 23:33
    Zitat von owi dowi spinn

    Liegt es an XP?

    Nun dadran nicht. Vermutlich hast du das erforderliche NET Framework nicht installiert. Bin mir nicht ganz sicher - sollte im 2.0 enthalten sein. Aber es ist generell sinnvoll, alle Versionen zu installieren, da immer mehr Software das voraussetzt.

    Mit folgendem Skript kannst du prüfen ob das Objekt vorhanden ist.

    [autoit]

    $oArrayList = ObjCreate("System.Collections.ArrayList")
    If Not IsObj($oArrayList) Then ConsoleWrite( 'Das Objekt "System.Collections.ArrayList" ist auf dem PC nicht enthalten' & @CRLF )

    [/autoit]
  • ListView - SubItem einzeln färben/formatieren, Finale Version! (v1.3)

    • BugFix
    • 23. Juli 2011 um 23:12
    Zitat von chip

    dass wenn man einen Button drückt sich die Farbe des entsprechenden Listview eintrages erst dann ändert, wenn man im Anschluss nochmal den Eintrag im Listview anklickt.


    Du bist wahrscheinlich der erste, der keine Änderung der Hintergrundfarbe vornimmt. :D Hatte ich niemals bewußt allein geprüft, da das Färben des Hintergrundes im Vordergrund der UDF stand.
    Stimmt, die Überprüfung, ob das Subitem neu gezeichnet werden muß berücksichtigte nicht, dass evtl. nur die Vordergrundfarbe geändert wird. Hab das jetzt angepaßt.
    Tausche mal in der LV_Format_include.au3 die folgende Funktion aus, dann paßt es:

    _GUICtrlListView_FormattingCell
    [autoit]

    Func _GUICtrlListView_FormattingCell($hWnd, $iItem, $iSubItem, $iBkCol=-1, $iCol=-1, $iSize=-1, $iWeight=-1, $sFont=-1)
    Local $sumParam = 0
    Local $iParam = _GUICtrlListView_GetItemParam($hWnd, $iItem)
    Local $index = $oParamSearch.Item($iParam)
    If $iBkCol = -1 Then
    $iBkCol = $defBkColLV
    $sumParam += 1
    EndIf
    If $iCol = -1 Then
    $iCol = $defColLV
    $sumParam += 1
    EndIf
    If $iSize = -1 Then
    $iSize = $defSize
    $sumParam += 1
    EndIf
    If $iWeight = -1 Then
    $iWeight = $defWeight
    $sumParam += 1
    EndIf
    If $sFont = -1 Then
    $sFont = $defFont
    $sumParam += 1
    EndIf
    $aIParam[$index][$iSubItem+1][0] = $iBkCol
    $aIParam[$index][$iSubItem+1][1] = $iCol
    $aIParam[$index][$iSubItem+1][2] = $iSize
    $aIParam[$index][$iSubItem+1][3] = $iWeight
    $aIParam[$index][$iSubItem+1][4] = $sFont
    ; if SubItem not registered in IParam OR all values by -1 (delete Sub from IParam) ==> switch Sub value in IParam
    Local $mark = DllStructGetData($aIParam[$index][0][0], 2, $iSubItem+1)
    If Not $mark Or $sumParam = 5 Then
    DllStructSetData($aIParam[$index][0][0], 2, BitXOR($mark, 1), $iSubItem+1)
    EndIf
    ;~ If DllStructGetData($aIParam[$index][0][0], 2, $iSubItem+1) <> $mark Then
    If DllStructGetData($aIParam[$index][0][0], 2, $iSubItem+1) <> $mark Or $sumParam <> 5 Then
    _GUICtrlListView_RedrawItems($hWnd, $iItem, $iItem)
    EndIf
    EndFunc ;==>_GUICtrlListView_FormattingCell

    [/autoit]
  • Variable ausgeben die sich ändert

    • BugFix
    • 23. Juli 2011 um 12:52
    Zitat von patiii

    also erst wenn man auf den button drückt soll man die zwischenschritte sehen


    Und was hindert dich, den Schritt unterhalb des Case einzufügen? :wacko:

  • Variable ausgeben die sich ändert

    • BugFix
    • 23. Juli 2011 um 10:38
    Zitat von patiii

    ich habe z.b. 1 + 1 = $a


    Das geht schon mal gar nicht ;) - wenn dann so: $a = 1 +1
    Ausgeben kannst du doch per MsgBox - oder um es anschaulicher zu machen und Klickerei zu sparen, in ein Edit ausgeben. Rechenschritt ins Edit schreiben, nächste Zeile das Ergebnis, kurzes Sleep() und nächster Schritt usw.

    Edit:
    Hier mal ein Muster

    [autoit]

    #include <GuiEdit.au3>
    Local $a = 10, $b = 20

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

    GUICreate('Test')
    $hEdit = GUICtrlCreateEdit('', 10, 10, 200, 200)
    GUISetState()

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

    Sleep(500)
    _Operate($a, $b, '+')
    Sleep(500)
    _Operate($a, $b, '-')
    Sleep(500)
    _Operate($a, $b, '*')
    Sleep(500)
    _Operate($a, $b, '/')

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

    Do
    Until GUIGetMsg() = -3

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

    Func _Operate($a, $b, $action)
    _GUICtrlEdit_AppendText($hEdit, $a & ' ' & $action & ' ' & $b & @CRLF)
    _GUICtrlEdit_AppendText($hEdit, @TAB & '=' & Execute($a & $action & $b) & @CRLF)
    EndFunc

    [/autoit]
  • 2 Hexwerte überprüfen, dann Aktion

    • BugFix
    • 22. Juli 2011 um 18:19

    Hexwerte werden in Autoit so dargestellt: 0xABCDEF

    [autoit]

    AND NOT > $max_Wert1 Then

    [/autoit]

    geht nicht, es fehlt die Vergleichsbedingung

    [autoit]

    $a_Regex_mit_2_Hexwerten[0] <= $max_Wert1

    [/autoit]
  • Auto IT Supporttool

    • BugFix
    • 22. Juli 2011 um 18:04
    Zitat von campweb

    OT: AutoIt


    Da hättest du mal besser den Startpost gründlich gelesen, es geht um ein Auto - IT - Support - Tool (automatisches IT Support Tool), nicht um ein AutoIt-Support-Tool. ;)

  • stringInStr Problem

    • BugFix
    • 21. Juli 2011 um 20:04

    Laß dir den gelesenen Text in die Konsole ausgeben, vergleiche mit deinem Suchbegriff, ob dieser überhaupt in der Form enthalten ist (da Case Sense geprüft wird, ist natürlich der exakte Begriff und Schreibweise erforderlich).


    Edit:
    @campweb: Was soll diese Bot-Vermuterei? Ich sehe bisher nichts, was gegen unsere Forenregeln verstößt! Also bitte nicht hinter jedem Skript einen Bot vermuten. ;)

  • stringInStr Problem

    • BugFix
    • 21. Juli 2011 um 19:50

    Ich habe dir doch gesagt du mußt Casesens auf 1 setzen ;)
    So gehts:

    [autoit]

    $Read = 'Hallo liebe Gemeinde und ein besonderes Willkommen, USER_X aus Klein-Siehste-mich-nicht.'
    $IdL = 'USER_X'
    IF StringInStr($Read, "Willkommen, " & $IdL, 1) Then MsgBox(0, '', $IdL & ' - im Text enthalten')

    [/autoit]
  • Dynamisches Label

    • BugFix
    • 21. Juli 2011 um 16:57

    Verwende doch die Meßfunktion aus meinem TextMeter. Etwas anpassen, dann kannst du das dazu verwenden.

  • regex

    • BugFix
    • 20. Juli 2011 um 17:48

    Das leidige Problem mit der schwachbrüstigen RegEx-Engine in AutoIt :wacko:
    Im RegexBuddy funzt es tadellos.

  • regex

    • BugFix
    • 20. Juli 2011 um 13:06

    OK, mit dem folgenden Pattern und Flag 3 bekommst du im Array nur "keywords" aus dem Quelltext.
    Voraussetzung, dass das mit anderem Source auch klappt ist, was zwischen "type=hidden" und "name=" steht.
    Nach dem vorgegeben Source folgt "name" direkt auf "type=hidden" oder es steht "value="" " dazwischen (In den Zeilen, die "name=" enthalten aber nicht ins Ergebnis sollen). Sollte das in anderer Source nicht so sein, muß dort mit Oder-Verknüpfungen im Optionalzweig [ (?:value="" )? ] angepaßt werden.
    Hier das Pattern: (?<!type="hidden" (?:value="" )?)(?:name=")([^"]+)

  • regex

    • BugFix
    • 20. Juli 2011 um 12:33

    Also mal als Kurzfassung:
    Wenn eine Zeile mit "<input" beginnt UND das Feld "name=" enthalten ist, dann möchtest du den Begriff hinter "name=" als Ergebnis haben. Ist das korrekt?

    Edit:
    Ich sehe gerade, das würde ja auch auf "userUsedAutocompletion" und "categoryId" zutreffen.
    Mal sehen, ob das mit einem Aufruf geht.

  • Script mit mehreren Mäusen bedienen

    • BugFix
    • 20. Juli 2011 um 12:24
    Zitat von eukalyptus

    Die Lösung ist nicht ganz zufriedenstellend, aber für meine Zwecke reicht es fürs erste...

    Habs nochmal angeschaut, gibt wohl keinen anderen Weg als
    - Mouse Events auffangen und blocken
    - Input Device abfragen
    - gewollte Events senden

    Es ist recht aufwändig - aber weshalb nicht zufriedenstellend?

  • Script mit mehreren Mäusen bedienen

    • BugFix
    • 20. Juli 2011 um 12:11

    Habs gerade bemerkt, dass es um die Selektion geht. ;) Der Code war zu lang :D
    Ich muß mal mit mehrerer Mäusen testen, aber vermutlich gehts wohl nicht.

  • Script mit mehreren Mäusen bedienen

    • BugFix
    • 20. Juli 2011 um 12:04
    Zitat von eukalyptus

    Da gibt es jedoch ein großes Problem: $WM_MOUSE_LL-Hook wird VOR RawInput aufgerufen und ich hab keine Chance auf diesem Weg!


    Dann verwende RawInput nicht und hol dir die Infos, die du damit erhalten willst aus dem Hook.
    Wenn ich richtig geschaut habe, sollte der Hook doch alle relevanten Infos liefern:

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    OnAutoItExitRegister('OnAutoItExit')
    HotKeySet('{ESC}', '_Exit')

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

    Global Const $HC_ACTION = 0
    Global $hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)

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

    While True
    Sleep(50)
    WEnd

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

    Func _MouseProc($nCode, $wParam, $lParam)
    Local $event, $info, $iX, $iY, $mouseData = "", $wheelData = "", $wheelCount
    $info = DllStructCreate("int X;int Y;dword mouseData;dword flags;dword time;ulong_ptr dwExtraInfo", $lParam)
    $iX = DllStructGetData($info, 1)
    $iY = DllStructGetData($info, 2)
    $mouseData = DllStructGetData($info, 3)
    If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    If $nCode = $HC_ACTION Then
    Switch $wParam
    Case $WM_MOUSEMOVE
    $event = "Mouse Move"
    Case $WM_MOUSEWHEEL
    $event = "Mouse Wheel"
    If _WinAPI_HiWord($mouseData) > 0 Then
    $wheelData = " Forward"
    Else
    $wheelData = " Backward"
    EndIf
    $wheelCount = _WinAPI_HiWord($mouseData)/120
    Case $WM_LBUTTONDOWN
    $event = "Left Down"
    Case $WM_LBUTTONUP
    $event = "Left Up"
    Case $WM_RBUTTONDOWN
    $event = "Right Down"
    Case $WM_RBUTTONUP
    $event = "Right Up"
    Case $WM_MBUTTONDOWN
    $event = "Wheel Down"
    Case $WM_MBUTTONUP
    $event = "Wheel Up"
    EndSwitch
    EndIf
    ConsoleWrite($iX & ', ' & $iY & ' ' & $event & $wheelData & ' count: ' & $wheelCount & @CRLF)
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_MouseProc)
    EndFunc ;==>OnAutoItExit

    [/autoit]
  • Das Verhältnis verhält sich verhältnismäßig nicht so wie es soll

    • BugFix
    • 20. Juli 2011 um 11:56

    Dein Ergebnis der neuen Größe hat mit Sicherheit Nachkommastellen, die dann gerundet werden. Somit verändert sich dein Control von mal zu mal mehr.
    Das kannst du nur verhindern, indem du die neue Größe nicht berechnest, sondern festlegst in einer Tabelle in der Form:

    Code
    WheelEvents  Ctrl-Größenänderung (Breite, Höhe)
        1                +1, +3
        2                +2, +4
        3                +3, +6
       ...
       -1                -1, -3
       -2                -2, -4
       -3                -3, -6
  • regex

    • BugFix
    • 20. Juli 2011 um 11:47
    Zitat von BugFix

    den Musterquellcode und färbe die Elemente ein, die du als Ergebnis willst


    Ist denn das sooo schwer??? Jetzt hast du wieder mit Worten beschrieben, was du dir vorstellst - und damit kann ich leider nicht viel anfangen.
    Dein Bild mußt du erst noch erklären, blau, gelb.. :D

  • Prüfen auf Rechtsklick mit _isPressed

    • BugFix
    • 20. Juli 2011 um 11:00

    Ich nutze die MouseOnEvent.au3 nicht, letzlich macht diese aber nichts anderes, als ich im folgenden Skript - nämlich das Wheel-Event auswerten.
    Im Bsp. siehst du, wie nur bei gedrückter rechter Maustaste eine Zählervariable mit dem Mausrad hoch- oder runtergezählt wird, je nach Richtung (vorwärts "+", rückwärts "-").

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    OnAutoItExitRegister('OnAutoItExit')

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

    Global Const $HC_ACTION = 0
    Global $hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)

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

    Global $SecMousState = False
    Global $WheelCount

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

    $gui = GUICreate('Test')
    GUISetState()

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

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $GUI_EVENT_SECONDARYDOWN
    If Not $SecMousState Then
    $SecMousState = True
    $WheelCount = 0
    EndIf
    Case $GUI_EVENT_SECONDARYUP
    If $SecMousState Then $SecMousState = False
    EndSwitch
    WEnd

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

    Func _Wheel($iCount)
    $WheelCount += $iCount
    ConsoleWrite($WheelCount & @CRLF) ; hier kannst du dein Skript ausführen
    EndFunc

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

    Func _MouseProc($nCode, $wParam, $lParam)
    Local $event, $info, $iX, $iY, $mouseData = "", $wheelData = "", $iWheelCount
    $info = DllStructCreate("int X;int Y;dword mouseData;dword flags;dword time;ulong_ptr dwExtraInfo", $lParam)
    $iX = DllStructGetData($info, 1)
    $iY = DllStructGetData($info, 2)
    $mouseData = DllStructGetData($info, 3)
    If $nCode < 0 Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    If $nCode = $HC_ACTION Then
    Switch $wParam
    Case $WM_MOUSEWHEEL
    $iWheelCount = _WinAPI_HiWord($mouseData)/120
    If $SecMousState Then _Wheel($iWheelCount)
    EndSwitch
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_MouseProc)
    EndFunc ;==>OnAutoItExit

    [/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™