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

  • Do Until mit 2 Statements?

    • BugFix
    • 20. Oktober 2009 um 11:05

    Da war ich etwas zu wortkarg :D
    Eigentlich wollte ich nur drauf aufmerksam machen, dass = 1 bei Funktionen die 0 bei Fehler/Mißerfolg zurückgeben auch eingespart werden kann. ;)

  • 3. Txt dateien zusammen in 1. ini schreiben

    • BugFix
    • 20. Oktober 2009 um 11:00
    Code
    Name1 - Nachname1
    Straße1 
    Name2 - Nachname2
    Straße2 
    usw....


    Das ist aber kein INI-Format.
    Eine INI sieht so aus:

    Code
    [section]
    key=value

    Könnte bei dir etwa so aussehen:

    Code
    [adressen]
    id=name,vorname,strasse_nr,plz,ort


    ID deshalb, weil über Name+... keine eineindeutige Identifizierung gesichert ist. Ich hatte schon mal zwei Klaus Müller unter derselben Adresse und auch noch demselben Geburtstag. Sowas kommt häufiger vor als man denkt.

    Wenn es mehr Daten werden solltest du evtl. über den Einsatz von SQLite nachdenken.

    Beitrag # 4.444 :D

  • Do Until mit 2 Statements?

    • BugFix
    • 20. Oktober 2009 um 10:50
    Zitat von VERGiL

    Until WinActive ("Neues Dokument scannen", "Voreinstellung für das Scannen") = 1 or WinActive("Neues Dokument scannen", "Das Scannen ist aufgrund eines") = 1


    Etwas zu viel des Guten. ;)

  • Text aus Chatfenster bis Keyword auslesen

    • BugFix
    • 20. Oktober 2009 um 10:46
    Zitat von dschihejns

    Angenommen ich habe ein Chatfenster, welches sich dauernd wieder erneuert weil einer der beiden Partner schreibt.


    Ich vermute mal:
    - Du liest den Text in Intervallen aus.
    - Das, was du bisher schon ausgelesen hast, möchtest du nicht mehr im aktuellen Text drin haben.
    Wenn dem so ist:
    Der Text enthält doch mit Sicherheit Zeilenumbrüche. Also:
    - Gesamten Text lesen und an den Zeilenumbrüchen splitten. Nun hast du ein Array mit den Zeilen.
    - Die letzte Zeile (letzter Eintrag im Array) speicherst du in einer Vergleichsvariablen. (Beim Programmstart ist diese leer)
    - Mit For-Schleife vom letztem zum ersten Element durch das Array iterieren und vergleichen ob aktuelle Zeile identisch mit Vergleichsvariable. Ausnahme: Vergleichsvariable ist leer - dieser dann den letzten Eintrag zuweisen und den gesamten Inhalt verwenden
    - Wenn Übereinstimmung Variable=ArrayEintrag sind alle Arrayeinträge vor und diesem alte Sachen.

  • Tooltip bei mouseover in listview?

    • BugFix
    • 19. Oktober 2009 um 20:02
    Zitat von ThinkCross

    Ich würde gerne beim Eintragen der Werte individuelle Tooltipps setzen.


    Ja, mein Bsp. sollte auch nur den Weg zeigen, wie du an Zeilen- und SpaltenIndex des HotItems kommst. Individuelle Tooltipps müßtest du dann in einem separaten Array ablegen.
    Dabei wirst du evtl. auf ein Problem stoßen: Was passiert, wenn z.B. Elemente eingefügt, gelöscht werden oder das Listview sortiert wird?
    Dann stimmt deine Zuordnung aus dem Array nicht mehr.
    Das kannst du umgehen, indem du
    - entweder alle Aktionen, die im Listview stattfinden auch auf dein Array anwendest um dort den selben Status zu haben - seeehr aufwändig ;)
    oder
    - du nutzt (so, wie ich es in ListviewFormat getan habe) iParam zum Speichern eines Verweises zum Array. Dann sind Veränderungen im Listview nicht relevant. Allerdings mußt du für SimpleSort die von mir modifizierte Version verwenden, damit auch iParam mitsortiert wird.

  • Tooltip bei mouseover in listview?

    • BugFix
    • 19. Oktober 2009 um 17:43

    Dafür gibt es LVN_HOTTRACK:

    Spoiler anzeigen
    [autoit]

    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIListView.au3>

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

    $gui = GUICreate('test')
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 146)
    _GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
    For $i = 1 To 10
    GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView)
    Next
    GUISetState()

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

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

    Func ListView_HOTTRACK($iSubItem)
    Local $HotItem = _GUICtrlListView_GetHotItem($hListView)
    If $HotItem <> -1 Then _ToolTipMouseExit("Überfahrenes Item: " & $HotItem & " SubItem: " & $iSubItem & @CRLF & _
    'Inhalt: ' & _GUICtrlListView_GetItemText($hListView, $HotItem, $iSubItem), 500)
    EndFunc ;==>ListView_HOTTRACK

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

    Func _ToolTipMouseExit($TEXT, $TIME=-1, $x=-1, $y=-1, $TITLE='', $ICON=0, $OPT='')
    If $TIME = -1 Then $TIME = 3000
    Local $start = TimerInit(), $pos0 = MouseGetPos()
    If ($x = -1) Or ($y = -1) Then
    ToolTip($TEXT, $pos0[0], $pos0[1], $TITLE, $ICON, $OPT)
    Else
    ToolTip($TEXT, $x, $y, $TITLE, $ICON, $OPT)
    EndIf
    Do
    Sleep(50)
    $pos = MouseGetPos()
    Until (TimerDiff($start) > $TIME) Or _
    (Abs($pos[0] - $pos0[0]) > 10 Or _
    Abs($pos[1] - $pos0[1]) > 10)
    ToolTip('')
    EndFunc ;_ToolTipMouseExit

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

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

    [/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 $LVN_HOTTRACK ; Sent by a list-view control when the user moves the mouse over an item
    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    ListView_HOTTRACK(DllStructGetData($tInfo, "SubItem"))
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Gui in 2 Sprachen darstellen - Wie?

    • BugFix
    • 19. Oktober 2009 um 09:21

    Hier mal ein Ausschnitt, aus einem Programm von mir. Hier wird der deutsche Text verwendet, sofern die vom OS verwendete Sprache eine der deutschen ist. Anderenfalls kommt der englische Text zum Einsatz. Dazu hinterlege ich alle Texte in einem 2D-Array und greife über den Index ($iLang) auf deutsch oder englisch zu:

    Spoiler anzeigen
    [autoit]

    Global $iLang=1
    If StringInStr("0407 0807 0c07 1007 1407", @OSLang) Then $iLang = 0
    Global $aText[18][2] = [ _
    ["Schließen","Close"],['FEHLER','ERROR'], _
    ["Die Datei 'xyz.exe' konnte nicht gefunden werden.","File 'xyz.exe' couldn't found."], _
    ['Das Programm wird beendet.','The program will close.'], _
    ["Ferneinstellungssoftware ","Remotesoftware "],["Hilfe","Help"],["Über","About"], _
    ["Neues Fenster","New Instance"],['Raum|Notiz|Status','Room|Note|State'],["Notiz","Note"], _
    ["COM-Port wählen","Choose COM-Port"],["Bett ","Bed "],["Notiz eintragen","Set Note"], _
    ["Geben Sie hier den neuen Titel ein: ","Set here new title: "],[" aktuelles Fenster:"," current window:"], _
    ["Starte Fernbedienung","Run Remote"],["Dieser Fenstername existiert bereits.","This window title always exists."], _
    ["Verbindung besteht bereits.","Connection always exists."]]

    [/autoit]
  • Die englische Hilfe wird bugfreier

    • BugFix
    • 18. Oktober 2009 um 20:27
    Zitat von Tweaky

    Von den Posts die auf meinen folgenden habe ich allerdings die Hälfte nicht verstanden.

    Mal ganz salopp gesagt: Da Jos der Meinung ist, dass eine andere Nation unfähig ist die Hilfe komplett zu übersetzen ohne auf halbem Weg aufzugeben, ist es ihm gelinde gesagt wohl schei..egal ob und was in dieser Richtung getan wird.
    Es ist also nicht unbedingt davon auszugehen, dass der aktuelle Link von Jos eingearbeitet wird. :S

  • passwortmanager

    • BugFix
    • 18. Oktober 2009 um 13:51

    Hier findest du Bsp. dazu: Auto-Ersetzen u. Input-Check mit Hook

  • [StringRight] Klappt das Programm nicht? Oder bin ich einfach nur dumm? :D

    • BugFix
    • 18. Oktober 2009 um 13:49

    Schau dir mal _StringReverse($sString) an.

  • [Problem] Beep

    • BugFix
    • 18. Oktober 2009 um 13:31
    Zitat von masterRobb

    Kann mir jemand sagen, welche Frequenz etc. welcher Ton hat? also: c, d, e, f, g, a, h,... + länge eines Viertel Tons.... etc.

    Guckst du: Beep Komponist

  • 'Ersatz'-Signatur

    • BugFix
    • 18. Oktober 2009 um 13:20

    Ich habe mal eine Auflistung der meisten meiner Skripte und UDF in Post 1 mit Verlinkung eingestellt. Dann habt ihr es leichter (und ich auch ;) ) nach etwas zu suchen.

  • Lizenzcode

    • BugFix
    • 18. Oktober 2009 um 09:49
    Zitat von slin

    Denkst du ich probiere nichts selber? :cursing: Da hast du dich aber geschnitten! Du "Profi"

    Bleib bitte auf dem Teppich und halte dich an die Netiquette!
    Der Einwurf von blubbstar ist völlig berechtigt: Wenn du nicht weiterkommst, dann zeig uns bitte, was du bisher versucht hast. Dann können wir auch ganz gezielt helfen.

  • passwortmanager

    • BugFix
    • 18. Oktober 2009 um 09:43
    Zitat von Rubberducky

    Kleiner Tipp:
    Ich würd die Tastenkombination Alt+Tab auch blockieren, Genauso wie Windows + m und Alt+F4.
    Was bringt sonst, wenn Taskmanager nicht möglich zu öffnen ist, aber die Sperre per Alt+F4 umgänglich ist?


    Ehe du mühselig alle Tastenkombinationen mit ALT und WIN unterdrückst, setze einfache einen Hook auf die ALT- und die WIN- Taste.

  • Ordner durchsuchen

    • BugFix
    • 18. Oktober 2009 um 09:31
    Zitat von mille86

    wolltet ihr nicht schon immer alle Dateien und / oder Ordner eines Pfades ermitteln?


    Haben wir das nicht auch schon getan...? :D
    Rekursive Datei/Ordner Auflistung per Objekt
    _RecursiveFileListToArray (mit StringRegExp)
    ..einen hab ich noch. Schon etwas älter und muß wohl mal wieder auf die aktuelle AutoIt-Version angepaßt werden:
    Dateien / Ordner rekursiv lesen

  • Einzelne ListView Items einfärben.

    • BugFix
    • 17. Oktober 2009 um 22:47

    So sieht die Funktionskopfzeile zum Formatieren aus.

    [autoit]

    _GUICtrlListView_FormattingCell($hWnd, $iItem, $iSubItem, $iBkCol=-1, $iCol=-1, $iSize=-1, $iWeight=-1, $sFont=-1)

    [/autoit]


    Und wenn du in die Funktionsbeschreibung schaust: dort steht nirgendwo, dass man auf ein Item mit '-1' Bezug nehmen kann.
    Du mußt schon die Indexwerte für Item(Zeile) und SubItem(Spalte) angeben.
    Wenn du die Werte für alle Spalten einer Zeile mit denselben Werten setzen möchtest, mach es in einer Schleife:

    [autoit]

    For $i = 0 To $Index_letzteSpalte
    _GUICtrlListView_FormattingCell($hWnd, $iItem, $i, ... )
    Next

    [/autoit]


    Wenn du aber nur 2 Farben im Wechsel auf die Zeilen anwenden möchtest, das geht einfacher:

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    GUICreate('Test')

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

    $ListView1 = GUICtrlCreateListView("Col 1|Col 2", 15, 15, 300, 250)
    GUICtrlSetBkColor(-1, 0xFF4400) ; Color odd row
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
    _GUICtrlListView_SetColumnWidth($ListView1, 0, 148)
    _GUICtrlListView_SetColumnWidth($ListView1, 1, 148)

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

    For $i = 1 To 30
    GUICtrlCreateListViewItem(Random(10000, 1000000, 1) & '|' & Random(10000, 1000000, 1), $ListView1)
    GUICtrlSetBkColor(-1, 0xFFFF23) ; Color even row
    Next

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

    GUISetState()

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • Einzelne ListView Items einfärben.

    • BugFix
    • 17. Oktober 2009 um 19:33

    Dem Manne kann geholfen werden ;)

    ListView - SubItem einzeln färben/formatieren, Finale Version!

  • Programm deinstallieren?

    • BugFix
    • 17. Oktober 2009 um 19:04

    Wenn das Programm beim Installieren eine "uninstall.exe" angelegt hat, brauchst du diese nur mit AutoIt aufrufen.

  • Tab Fenster

    • BugFix
    • 17. Oktober 2009 um 13:50

    Falls du willst, dass das angeklickte (oder per Tastatur angewählte) TabItem erst nach erfolgreicher Passwortabfrage gezeigt wird, muß man Maus- und Tastatur per Hook abfangen.
    Ich habe auch mal dieses Bsp. erstellt:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <GuiTab.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>

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

    Global Const $HC_ACTION = 0
    Global Const $WM_LBUTTONDOWN = 0x201

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

    Global $hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
    Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)
    Global $hHook2 = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    Global $hTab, $lastTab = 0, $checkPass = 0
    Global $Passwort = 'pass', $passItem = 2 ; <== Index des PW-geschützten TabItems

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

    $Form1_1 = GUICreate("Testfenster", 297, 341, 210, 144)
    $Programme = GUICtrlCreateTab(8, 8, 280, 304)
    $hTab = GUICtrlGetHandle($Programme)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    $tab1 = GUICtrlCreateTabItem("Tab1")
    $tab2 = GUICtrlCreateTabItem("Tab2")
    $tab3 = GUICtrlCreateTabItem("Tab3")
    $tab4 = GUICtrlCreateTabItem("Tab4")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)

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

    Global $hookGUI = $Form1_1, $hookID = $Programme

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

    While 1
    If $checkPass Then _CheckPass()
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Programme
    Switch GUICtrlRead($Programme)
    Case 0
    ;~ MsgBox(0, '', 'Tab1 aktiviert')
    Case 1
    ;~ MsgBox(0, '', 'Tab2 aktiviert')
    Case 2
    ;~ MsgBox(0, '', 'Tab3 aktiviert')
    Case 3
    ;~ MsgBox(0, '', 'Tab4 aktiviert')
    EndSwitch
    EndSwitch
    WEnd

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

    Func _MouseProc($nCode, $wParam, $lParam)
    If $nCode < 0 Or (Not _MouseOverTabItem($hookGUI, $hTab, $passItem)) Then
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndIf
    If $nCode = $HC_ACTION And $wParam = $WM_LBUTTONDOWN Then
    $checkPass = 1 ; Überprüfung aktivieren
    Return -1 ; Mausklick wird ignoriert ==> TabItem noch nicht aktiviert
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc

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

    Func _CheckPass()
    If InputBox('Passwort', 'Bitte Passwort eingeben:') == $Passwort Then
    _GUICtrlTab_SetCurSel($hTab, $passItem)
    Else
    MsgBox(0, 'Fehler', 'Falsches Passwort!')
    EndIf
    $checkPass = 0
    EndFunc

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

    Func _MouseOverTabItem($GUI, $hWnd, $iTabItem)
    If Not BitAND(WinGetState($GUI), 8) Then Return False
    Local $old = Opt('MouseCoordMode', 2)
    Local $posM = MouseGetPos()
    Opt('MouseCoordMode', $old)
    Local $posC = _GUICtrlTab_GetItemRect($hWnd, $iTabItem)
    If ($posM[0] >= $posC[0] And $posM[0] <= $posC[2]) And _
    ($posM[1] >= $posC[1] And $posM[1] <= $posC[3]) Then
    Return True
    Else
    Return False
    EndIf
    EndFunc

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

    Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS, $vkCode, $ret, $curPos, $curItem
    $ret = DllCall("user32.dll","long","GetKeyState","long", 0x14)
    If $ret[0] Then $isCapsLock = 1
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    $curPos = GUIGetCursorInfo($hookGUI) ; <== check, welche ID aktiv
    If $nCode < 0 Or $curPos[4] <> $hookID Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    $vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
    If $wParam = $WM_KEYDOWN Then
    Switch $vkCode
    Case 0x25 ; ==> Pfeil li.
    If GUICtrlRead($hookID) -1 = $passItem Then
    $checkPass = 1
    Return -1
    EndIf
    Case 0x27 ; ==> Pfeil re.
    If GUICtrlRead($hookID) +1 = $passItem Then
    $checkPass = 1
    Return -1
    EndIf
    EndSwitch
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc

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

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

    [/autoit]

    Edit: Hatte grad noch einen Fehler beim Positionsvergleich der Maus entdeckt - nun passt es. ;)

  • Tab Fenster

    • BugFix
    • 17. Oktober 2009 um 12:02

    Das geht so (statt MsgBox dann dein Code):

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    $Form1_1 = GUICreate("Testfenster", 297, 341, 210, 144)
    $Programme = GUICtrlCreateTab(8, 8, 280, 304)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    $tab1 = GUICtrlCreateTabItem("Tab1")
    $tab2 = GUICtrlCreateTabItem("Tab2")
    $tab3 = GUICtrlCreateTabItem("Tab3")
    $tab4 = GUICtrlCreateTabItem("Tab4")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Programme
    Switch GUICtrlRead($Programme)
    Case 0
    MsgBox(0, '', 'Tab1 aktiviert')
    Case 1
    MsgBox(0, '', 'Tab2 aktiviert')
    Case 2
    MsgBox(0, '', 'Tab3 aktiviert')
    Case 3
    MsgBox(0, '', 'Tab4 aktiviert')
    EndSwitch
    EndSwitch
    WEnd

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