BugFix : Doch, mit AutoIt kann man Environment Variablen schreiben, EnvSet()
Du kannst nur eigene, von deinem AutoIt-Skript erstellte Umgebungsvariablen verwenden. Auf die Systemvariablen (TEMP, PATH etc.) hast du nur Lesezugriff.
BugFix : Doch, mit AutoIt kann man Environment Variablen schreiben, EnvSet()
Du kannst nur eigene, von deinem AutoIt-Skript erstellte Umgebungsvariablen verwenden. Auf die Systemvariablen (TEMP, PATH etc.) hast du nur Lesezugriff.
Die Ahnung geht in die richtige Richtung, genau dadrüber liegt der Hund begraben. ![]()
Die von dir angeführte Befehlszeile druckt aus. In den Zeilen dadrüber ( DllStructSetData($RECT, .... ) wird der Druckbereich in Form eines Rectangle (Rechteck) festgelegt.
Die heute gängigen Drucker drucken nicht in Zeilen und Spalten - sie drucken Bilder. Aus diesem Grund wird das Rechteck in dem das Textabbild dargestellt wird definiert.
Ausnahmen findest du in Form von Typenraddruckern oder Nadeldruckern meist in Arztpraxen zum Rezeptdruck. Die Dinger kann man noch richtig hardcodiert mit Zeile & Spalte ansprechen.
Spiele einfach mal mit den Werten für das Rectangle - dann merkst du am Besten, wie es funktioniert.
Erstelle doch mit deinem C++ Programm eine Systemvariable (Env) in der du deine Ergebnisse parkst. Mit EnvGet() kannst du dir die Werte dann im AutoIt Skript einlesen.
Falls es mit C++ nicht möglich sein sollte eine eigene Systemvariable zu setzen (kann ich mir eigentlich nicht vorstellen), kannst du ja auch TEMP dafür nutzen.
Nur andersrum geht es leider nicht. Die Ersteller von AutoIt haben uns die Tür zum Schreiben in Systemvariablen (warum auch immer) verschlossen. Zumindest bieten die Standardfunktionen dazu keine Möglichkeit.
Falls du sicher gehen möchtest, dass derselbe Satz nicht mehrfach hintereinander ausgegeben wird (bei geringer Anzahl recht große Wahrscheinlichkeit), kannst du das auch anders lösen:
[autoit]Local $aSaetze[4] = [ _
"Das ist Satz 1.", _
"Das ist Satz 2.", _
"Das ist Satz 3.", _
"Das ist Satz 4."]
; LeerString in den der ZufallsIndex geschrieben wird
Local $sIndex = ''
Local $iRandom, $iCount = 0
Do
$iRandom = Random(0, UBound($aSaetze)-1, 1)
If Not StringInStr($sIndex, $iRandom, 1) Then
$sIndex &= $iRandom & " "
$iCount += 1
ConsoleWrite($aSaetze[$iRandom] & @crlf)
EndIf
Until $iCount = UBound($aSaetze)
Hast du mal die Ausgabe des gesamten Textes angeschaut? Eine Darstellung in einem 2D-Array ist dafür nicht sonderlich geeignet. Es sei denn du erweiterst die 2.te Dimension auf die max. Anzahl der Unterpunkte.
Denn das Ergebnis sieht z.B. so aus (Ausschnitt), ein Splitten an : geht da auch voll in die Hose
:
Netzwerkkarte(n): 4 Netzwerkadapter installiert.
[01]: Marvell Yukon 88E8042 PCI-E Fast Ethernet Controller
Verbindungsname: LAN-Verbindung
Status: Medien getrennt
[02]: Broadcom 802.11b/g-Netzwerkadapter
Verbindungsname: Drahtlosnetzwerkverbindung
DHCP aktiviert: Ja
DHCP-Server: 192.168.1.1
IP-Adresse(n)
[01]: 192.168.1.30
[02]: fa80::12c3:51c9:b424:e2b7
[03]: Bluetooth Device (Personal Area Network)
Verbindungsname: Bluetooth-Netzwerkverbindung
Status: Medien getrennt
[04]: Microsoft Virtual WiFi Miniport Adapter
Verbindungsname: Drahtlosnetzwerkverbindung 2
Status: Medien getrennt
Alles anzeigen
Übrigens, hier noch etwas absolut Geniales in NPP!! ==> der Blockeditor!
Bsp.
$test[] = ""
$test[] = ""
$test[] = ""
$test[] = ""
$test[] = ""
- den Cursor in das erste eckige Klammernpaar setzen
- Alt+Shift drücken
- mit Pfeil abwärts bis zum untersten Klammernpaar bewegen ( Alt+Shift gedrückt halten! ), eine Markierung ist dabei NICHT zu sehen.
- Alt+C drücken ==> Blockeditor wird aufgerufen
- Startwert und Schrittweite eingeben -- Ausführen
und schwupps, alles ist ausgefüllt. Saugeil ![]()
Mit Alt+Shift kann man super Spalten markieren, z.B. 5 Zeichen nebeneinander normal markieren und dann mit gedrückter Alt+Shift über die Pfeil abwärts Taste mehrere Zeilen auswählen. Somit wird der kpl. Block (hier 5 Zeichen breit mal n-Zeilen) markiert und kann kopiert, gelöscht oder ersetzt werden.
Vielleicht nicht exakt, was du suchst - aber schau es dir mal an: https://autoit.de/index.php?page…79275#post79275
Möglichkeiten gibt es da einige... ![]()
Func _NumberFormatThousand($vNumber, $ret='DE') ; bis 18 Vorkommastellen
Local $sOut = '', $a = StringRegExp(StringReplace($vNumber, '.', ','), "(-?\d{1,3})(\d{3})?(\d{3})?(\d{3})?(\d{3})?(\d{3})?(?:\Z|(,\d+))", 3)
For $i = 0 To UBound($a) -1
If $a[$i] <> '' Then $sOut &= '.' & $a[$i]
Next
If $ret <> 'DE' Then Return StringTrimLeft(StringReplace(StringReplace($sOut, '.', ','), ',,', '.'), 1)
Return StringTrimLeft(StringReplace($sOut, '.,', ','), 1)
EndFunc
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]Global $hListView, $B_DESCENDING
GUICreate("ListView SimpleSort by Column Click", 400, 300)
$hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
_GUICtrlListView_SetColumnWidth($hListView, 0, 75)
_GUICtrlListView_SetColumnWidth($hListView, 1, 75)
_GUICtrlListView_SetColumnWidth($hListView, 2, 75)
GUISetState()
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
$tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
_GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
EndIf
EndFunc ;==>WM_NOTIFY
Häbbieee Bööööhrsdayyyyy!
Hi eukalyptus, feiere schön und genieße das neue Lebensjahr. Bleib uns noch lange erhalten. ![]()
Achso - das soll jetzt in keinster Weise frech o.ä. rüberkommen. Ich will nur helfen
He, so schnell bin ich nicht angepißt. Hier hatte ich einfach verpennt mal in _StringBetween selbst reinzuschauen, denn die macht genau das, was ich vermeiden wollte.
Naja, irgendwie bin ich wohl auch nur ein Mensch. ![]()
Ich verstehe deine Frage nicht. Natürlich mußt du per Referenzpunkt die Inhalte separieren. Wenn du das mit RegEx löst mußt du für alle Eventualitäten maskieren. Dadurch wird das Pattern greedy und der Geschwindigkeitsvorteil gegenüber Stringoperationen ist dahin. ![]()
Ähm... ich kann in deinem Code keinen Unterschied zu _ArrayMax entdecken.
Außer dass bei dir keine Fehlerabfragen und Userdefinierte Start/Endindex enthalten sind.
Da diese Frage aufgetaucht war, habe ich mal eine Alternative auf Tag-Basis erstellt mit allen bekannten Ini-Funktionen in exakt derselben Funktionalität.
Ich habe hierbei bewußt auf die Verwendung von RegEx verzichtet um größtmögliche Vielfalt in Schlüssel und Wert zuzulassen.
Vielleicht kann es jemand brauchen.
#include-once
#include <File.au3>
#include <String.au3>
#cs ===== Funktionsliste =======================================================
[/autoit] [autoit][/autoit] [autoit]Erstellen / Verwalten von Schlüssel-Wert-Paaren ohne INI-Größenlimit
[/autoit] [autoit][/autoit] [autoit]Musterdatei:
<sec>Sektion 1
<key>Schlüssel 1_1<val>Wert 1_1</val></key>
<key>Schlüssel 1_2<val>Wert 1_2</val></key>
<key>Schlüssel 1_3<val>Wert 1_3</val></key>
<key>Schlüssel 1_4<val>Wert 1_4</val></key>
</sec>
Funktionen sind identisch zu den bekannten Standard-Ini-Funktionen
[/autoit] [autoit][/autoit] [autoit]_IniEx_ReadSectionNames
_IniEx_ReadSection
_IniEx_Read
_IniEx_RenameSection
_IniEx_Write
_IniEx_WriteSection
#ce ============================================================================
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];===============================================================================
; Function Name..: _IniEx_ReadSectionNames
; Description....: Liest die Sektionsnamen der IniEx-Datei aus
; Parameter(s)...: $sPath Pfad zur IniEx-Datei
; Return Value(s): Erfolg Array mit den Sektionsnamen, Anzahl in Array[0]
; Fehler 0 @error 1 - Datei nicht gefunden
; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _IniEx_ReadSectionNames($sPath)
If Not FileExists($sPath) Then Return SetError(1, 0, 0)
Local $sRead = FileRead($sPath)
Local $aSec = _StringBetween($sRead, '<sec>', @CRLF)
Local $aOut[UBound($aSec) + 1]
$aOut[0] = UBound($aSec)
For $i = 0 To UBound($aSec) - 1
$aOut[$i + 1] = $aSec[$i]
Next
Return $aOut
EndFunc ;==>_IniEx_ReadSectionNames
;===============================================================================
; Function Name..: _IniEx_ReadSection
; Description....: Liest die angegebene Sektion aus
; Parameter(s)...: $sPath Pfad zur IniEx-Datei
; $sSection Sektionsname
; Return Value(s): Erfolg 2D-Array, Array[0][0] enthält Anzahl, [n][0]=Key, [n][1]=Value
; Fehler 0 @error 1 - Datei nicht gefunden
; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _IniEx_ReadSection($sPath, $sSection)
If Not FileExists($sPath) Then Return SetError(1, 0, 0)
Local $fInSection = False, $aIni, $iKeys = 0, $aPairs[1][2] = [[$iKeys]], $aKeyVal, $sKeyVal
_FileReadToArray($sPath, $aIni)
For $i = 1 To $aIni[0]
If Not $fInSection And $aIni[$i] <> '<sec>' & $sSection Then ContinueLoop
$fInSection = True
If $aIni[$i] = '</sec>' Then ExitLoop
If StringLeft($aIni[$i], 5) = '<key>' Then
$aKeyVal = _StringBetween($aIni[$i], '<key>', '</val></key>')
If @error Then ContinueLoop
$aKeyVal = StringSplit($aKeyVal[0], '<val>', 3)
$iKeys += 1
ReDim $aPairs[$iKeys + 1][2]
$aPairs[0][0] = $iKeys
$aPairs[$iKeys][0] = $aKeyVal[0]
$aPairs[$iKeys][1] = $aKeyVal[1]
EndIf
Next
Return $aPairs
EndFunc ;==>_IniEx_ReadSection
;===============================================================================
; Function Name..: _IniEx_Read
; Description....: Liest den Wert für den Schlüssel einer Sektion aus
; Parameter(s)...: $sPath Pfad zur IniEx-Datei
; $sSection Sektionsname
; $sKey Schlüsselname
; $sDefault Defaultwert, wenn Key nicht gefunden
; Return Value(s): Erfolg Wert des Schlüssels
; Fehler 0 @error 1 - Datei nicht gefunden
; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _IniEx_Read($sPath, $sSection, $sKey, $sDefault = 'Default')
If Not FileExists($sPath) Then Return SetError(1, 0, 0)
Local $fInSection = False, $aIni, $iKeys = 0, $aPairs[1][2] = [[$iKeys]], $aKeyVal, $sKeyVal
_FileReadToArray($sPath, $aIni)
For $i = 1 To $aIni[0]
If Not $fInSection And $aIni[$i] <> '<sec>' & $sSection Then ContinueLoop
$fInSection = True
If $aIni[$i] = '</sec>' Then ExitLoop
If StringLeft($aIni[$i], 5) = '<key>' Then
$aKeyVal = _StringBetween($aIni[$i], '<key>', '</val></key>')
If @error Then ContinueLoop
$aKeyVal = StringSplit($aKeyVal[0], '<val>', 3)
If $aKeyVal[0] = $sKey Then Return $aKeyVal[1]
EndIf
Next
Return $sDefault
EndFunc ;==>_IniEx_Read
;===============================================================================
; Function Name..: _IniEx_RenameSection
; Description....: Umbenennen einer Sektion
; Parameter(s)...: $sPath Pfad zur IniEx-Datei
; $sSection Sektionsname
; $sNewSection neuer Sektionsname
; $fOverwrite falls sNewSection bereits besteht wird Inhalt gelöscht, Standard=False
; Return Value(s): Erfolg 1
; Fehler 0 @error 1 - Datei nicht gefunden
; 2 - Sektionsname existiert nicht
; 3 - Sektion existiert aber Überschreib-Flag nicht gesetzt
; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _IniEx_RenameSection($sPath, $sSection, $sNewSection, $fOverwrite = False)
If Not FileExists($sPath) Then Return SetError(1, 0, 0)
Local $fExists = False, $fInSection = False, $aIni, $iFirstLine = 0, $iLastLine
_FileReadToArray($sPath, $aIni)
For $i = 1 To $aIni[0] ; check ob $sNewSection bereits existiert
If $aIni[$i] = '<sec>' & $sNewSection Then
$fExists = True
ExitLoop
EndIf
Next
For $i = 1 To $aIni[0]
If Not $fInSection And $aIni[$i] = '<sec>' & $sSection Then ; Sektion Startzeile suchen
$fInSection = True
$iFirstLine = $i
ContinueLoop
EndIf
If $fInSection And Not $fExists Then ExitLoop ; $sNewSection existiert noch nicht >> Endzeile braucht nicht ermittelt werden
If $fInSection And $aIni[$i] = '</sec>' Then ; Sektion Endzeile suchen
$iLastLine = $i
$fInSection = False
ExitLoop
EndIf
Next
If $iFirstLine = 0 Then Return SetError(2, 0, 0) ; Sektionsname nicht enthalten
If Not $fExists Then Return _FileWriteToLine($sPath, $iFirstLine, '<sec>' & $sNewSection, 1)
If $fExists And Not $fOverwrite Then
Return SetError(3, 0, 0) ; $sNewSection existiert aber Überschreib-Flag nicht gesetzt
Else ; alte Sektion kpl. löschen
For $i = $iLastLine To $iFirstLine Step -1
_FileWriteToLine($sPath, $iFirstLine, '', 1)
Next
EndIf
_FileReadToArray($sPath, $aIni)
For $i = 1 To $aIni[0]
If Not $fInSection And $aIni[$i] = '<sec>' & $sNewSection Then ; Sektion Startzeile suchen
$fInSection = True
$iFirstLine = $i
ContinueLoop
EndIf
If Not $fExists Then ExitLoop ; $sNewSection existiert noch nicht >> Endzeile braucht nicht ermittelt werden
If $fInSection And $aIni[$i] = '</sec>' Then ; Sektion Endzeile suchen
$iLastLine = $i
$fInSection = False
ExitLoop
EndIf
Next
For $i = $iLastLine - 1 To $iFirstLine + 1 Step -1 ; Sektion mit selbem Namen, wie $sNewSection leeren
_FileWriteToLine($sPath, $i, '', 1)
Next
Return 1
EndFunc ;==>_IniEx_RenameSection
;===============================================================================
; Function Name..: _IniEx_Write
; Description....: Schreibt einen neuen Wert in einen Schlüssel oder fügt ein neues Schlüssel-Wert-Paar ein
; Parameter(s)...: $sPath Pfad zur IniEx-Datei
; $sSection Sektionsname
; $sKey Schlüsselname
; $sValue Wert
; Return Value(s): Erfolg Letzter Wert des Schlüssels, bei Neuanlage Leerstring
; Fehler 0 @error 1 - Datei nicht gefunden
; 2 - Sektion existiert nicht
; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _IniEx_Write($sPath, $sSection, $sKey, $vValue)
If Not FileExists($sPath) Then Return SetError(1, 0, 0)
Local $fInSection = False, $aIni, $aKeyVal, $vOldVal = '', $fKeyNew = False, $iKeyLine = 0
_FileReadToArray($sPath, $aIni)
For $i = 1 To $aIni[0]
If Not $fInSection And $aIni[$i] = '<sec>' & $sSection Then ; Sektion Startzeile suchen
$fInSection = True
ContinueLoop
EndIf
If $fInSection And StringLeft($aIni[$i], 5) = '<key>' Then
$aKeyVal = _StringBetween($aIni[$i], '<key>', '</val></key>')
$aKeyVal = StringSplit($aKeyVal[0], '<val>', 3)
If $aKeyVal[0] = $sKey Then
$iKeyLine = $i
$vOldVal = $aKeyVal[1]
ExitLoop
EndIf
EndIf
If $fInSection And $aIni[$i] = '</sec>' Then ; Sektionsende
If $iKeyLine = 0 Then
$fKeyNew = True
$iKeyLine = $i
EndIf
ExitLoop
EndIf
Next
If Not $fInSection Then Return SetError(2, 0, 0) ; Sektion existiert nicht
If $fKeyNew Then
_FileWriteToLine($sPath, $iKeyLine, '<key>' & $sKey & '<val>' & $vValue & '</val></key>')
Else
_FileWriteToLine($sPath, $iKeyLine, '<key>' & $sKey & '<val>' & $vValue & '</val></key>', 1)
EndIf
Return $vOldVal ; Rückgabe alter Wert
EndFunc ;==>_IniEx_Write
;===============================================================================
; Function Name..: _IniEx_WriteSection
; Description....: Schreibt eine Sektion in die IniEx-Datei
; Parameter(s)...: $sPath Pfad zur IniEx-Datei
; $sSection Sektionsname
; $vData String (Schlüssel=Wert, mehrere mit @LF trennen) oder Array [n][0]= Schlüssel, [n][1]= Wert
; $iIndex Falls Array übergeben, der Startindex (Default=1)
; Return Value(s): Erfolg 1
; Fehler 0 @error 1 - Datei nicht gefunden
; 2 - kein 2D-Array übergeben
; Author(s)......: BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _IniEx_WriteSection($sPath, $sSection, $vData, $iIndex = 1)
If Not FileExists($sPath) Then Return SetError(1, 0, 0)
Local $aIni, $aTmp, $aSplit, $aData[1][2] = [[0]], $sSectionData
Local $fInSection = False, $iFirstLine = 0, $iLastLine, $sRead, $fh
If Not IsArray($vData) Then ; Daten in Array packen
$aTmp = StringSplit($vData, @LF, 1)
ReDim $aData[$aTmp[0] + 1][2]
$aData[0][0] = $aTmp[0]
For $i = 1 To $aTmp[0]
$aSplit = StringSplit($aTmp[$i], '=')
$aData[$i][0] = $aSplit[1]
$aData[$i][1] = $aSplit[2]
Next
Else
If UBound($aData, 2) <> 2 Then Return SetError(2, 0, 0)
$aData = $vData
EndIf
_FileReadToArray($sPath, $aIni)
For $i = 1 To $aIni[0] ; check ob $sSection bereits existiert
If $aIni[$i] = '<sec>' & $sSection Then
$iFirstLine = $i
$fInSection = True
EndIf
If $fInSection And $aIni[$i] = '</sec>' Then ; Sektion Endzeile suchen
$iLastLine = $i
$fInSection = False
EndIf
Next
$sSectionData = '<sec>' & $sSection & @CRLF ; zu schreibenden Sektions-String zusammenstellen
For $i = $iIndex To UBound($aData) - 1
$sSectionData &= '<key>' & $aData[$i][0] & '<val>' & $aData[$i][1] & '</val></key>' & @CRLF
Next
$sSectionData = $sSectionData & '</sec>'
If $iFirstLine > 0 Then ; Sektion besteht bereits
For $i = $iLastLine To $iFirstLine + 1 Step -1
_FileWriteToLine($sPath, $iFirstLine, '', 1)
Next
Return _FileWriteToLine($sPath, $iFirstLine, $sSectionData, 1) ; Sektion neu schreiben
Else ; neue Sektion am Ende anfügen
$fh = FileOpen($sPath, 1)
FileWrite($fh, @CRLF & $sSectionData)
Return FileClose($fh)
EndIf
EndFunc ;==>_IniEx_WriteSection
So, wie du die MsgBoxen gesetzt hast, erfährst du niemals, was in dem Skript passiert.
Egal was passiert - du gibst stets dieselbe Nachricht aus. Also hab ich auch nicht die geringste Ahnung, was genau du erreichen willst und was stattdessen passiert.
Ich zeig dir mal meine (etwas bereinigte) Auswerteschleife.
Ist eigentlich selbsterklärend, ich übergebe z.B. Nick und Message an Auswertefunktionen.
While 1
$recv = TCPRecv($sock, 8192)
If @error Then
If Not $Quit_Done Then _FileWriteLog($errLog, "Server has errored or disconnected")
Exit
EndIf
Local $sData = StringSplit($recv, @CRLF)
For $i = 1 To $sData[0] Step 1
Local $sTemp = StringSplit($sData[$i], " ")
If $sTemp[1] = "" Then ContinueLoop
If $sTemp[1] = "PING" Then _IRCPing($sock, $sTemp[2])
If $sTemp[0] <= 2 Then ContinueLoop
Switch $sTemp[2]
Case "266"
_IRCJoinChannel ($sock, $channel)
If IniRead($INI, 'bot', 'auto_identify', 0) = 1 Then _
_IRCSendMessage($sock, 'IDENTIFY ' & IniRead($INI, 'bot', 'pass', ''), 'NickServ')
_IRCSendMessage($sock, "Hallo, ich bin der liebe " & $nick & "!", $channel)
_IRCChangeMode ($sock, IniRead($INI, 'bot', 'mode', '+i'), $channel, $nick)
Case "332" ; Raumthema
$thema = ''
For $k = 5 To $sTemp[0]
If $k = 5 Then $sTemp[$k] = StringTrimLeft($sTemp[$k], 1)
$thema &= $sTemp[$k] & ' '
Next
If StringStripWS($thema, 3) <> '' Then _IRCSendMessage($sock, "Unser Thema heute: " & $thema, $channel)
Case 'PRIVMSG'
$USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
$text = ''
$txtUSER = ''
For $k = 4 To $sTemp[0]
$text &= $sTemp[$k] & ' '
Next
$text = StringTrimLeft($text, 1)
$text = StringStripWS($text, 2)
If StringInStr($text, 'ACTION', 1) Then
$text = StringTrimLeft($text, ![]()
$text = StringLeft($text, StringLen($text)-2)
_AuswertungAction($USER)
$startIdle = TimerInit()
ElseIf StringInStr($text, 'DCC CHAT', 1) Then
;~ ConsoleWrite('DCC: ' & $text & @CRLF)
$text = 'DCC-Chatanfrage von ' & $USER
Else
;~ ConsoleWrite('Else PrivMsg: ' & $text & @CRLF)
_AuswertungText($USER)
$startIdle = TimerInit()
EndIf
Case 'NOTICE'
$USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
$text = ''
If $sTemp[0] > 3 Then
For $k = 4 To $sTemp[0]
If $k = 4 Then
$text &= StringTrimLeft($sTemp[$k], 1) & ' '
Else
$text &= $sTemp[$k] & ' '
EndIf
Next
$text = StringTrimRight($text, 1)
EndIf
_AuswertungNotiz($USER, $text)
$startIdle = TimerInit()
Case 'JOIN'
$USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
_AuswertungJoin($USER)
$startIdle = TimerInit()
Case 'NICK'
$USER_alt = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
$USER = StringTrimLeft($sTemp[3], 1)
_AuswertungNick($USER_alt, $USER)
$startIdle = TimerInit()
Case 'PART'
$USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
$txt = $USER & ' verläßt den Chatraum '
$text = ''
If $sTemp[0] > 3 Then
For $k = 4 To $sTemp[0]
If $k = 4 Then
$text &= StringTrimLeft($sTemp[$k], 1) & ' '
Else
$text &= $sTemp[$k] & ' '
EndIf
Next
$text = StringTrimRight($text, 1)
EndIf
_AuswertungPartQuit($USER)
$startIdle = TimerInit()
Case 'QUIT'
$USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
$txt = $USER & ' verläßt den Chatraum '
If $sTemp[0] > 3 Then
For $k = 4 To $sTemp[0]
$text &= $sTemp[$k] & ' '
Next
$text = StringTrimRight($text, 1)
$text = $txt & $text
EndIf
_AuswertungPartQuit($USER)
$startIdle = TimerInit()
EndSwitch
Next
WEnd
bin aber trotzdem überzeugt dass sie funktionieren würde,
Richtig! ![]()
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
Local $hImage, $ListView, $hListView
[/autoit] [autoit][/autoit] [autoit]GUICreate("ListView Set Image List", 400, 300)
$ListView = GUICtrlCreateListView("", 2, 2, 394, 268)
$hListView = GUICtrlGetHandle($ListView)
; Load images
$hImage = _GUIImageList_Create()
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x0000FF, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
_GUICtrlListView_SetImageList($hListView, $hImage, 1)
; Add columns
_GUICtrlListView_AddColumn($hListView, "Column 1", 100)
_GUICtrlListView_AddColumn($hListView, "Column 2", 100)
_GUICtrlListView_AddColumn($hListView, "Column 3", 100)
; Add items
For $i = 0 To 10
_GUICtrlListView_AddItem($hListView, "Item " & $i+1, $i)
_GUICtrlListView_AddSubItem($hListView, $i, 'Sub ' & $i+1 & '-1', 1)
_GUICtrlListView_AddSubItem($hListView, $i, 'Sub ' & $i+1 & '-2', 2)
Next
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $hWndFrom, $iCode, $tNMHDR
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
If $hWndFrom = $hListView Then
Switch $iCode
Case $NM_CUSTOMDRAW
Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Local $iDrawStage, $iItem
$iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
Switch $iDrawStage
Case $CDDS_ITEMPREPAINT
Return $CDRF_NOTIFYSUBITEMDRAW
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
$iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
Switch Mod($iItem, 2)
Case 0 ; geradzahlig
DllStructSetData($tCustDraw, 'clrTextBk', 0x23FFFF)
Case 1 ; ungeradzahlig
DllStructSetData($tCustDraw, 'clrTextBk', 0x0044FF)
EndSwitch
Return $CDRF_NEWFONT
EndSwitch
EndSwitch
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Das geht so:
#include<GUIListview.au3>
#include<Array.au3>
$gui = GUICreate('')
$Listview = GUICtrlCreateListView('A|B', 10, 10, 300, 200)
$hListview = GUICtrlGetHandle($Listview)
For $i = 0 To 20
GUICtrlCreateListViewItem(Random(1000, 9999, 1) & '|' & Random(1000, 9999, 1), $Listview)
Next
$bToArray = GUICtrlCreateButton('Read To Array', 10, 230, 130, 20)
GUISetState()
While True
Switch GUIGetMsg()
Case -3
Exit
Case $bToArray
$count = _GUICtrlListView_GetItemCount($hListview)
Local $aLV[$count][2]
For $i = 0 To $count -1
$tmpArray = _GUICtrlListView_GetItemTextArray($hListview, $i)
$aLV[$i][0] = $tmpArray[1]
$aLV[$i][1] = $tmpArray[2]
Next
_ArrayDisplay($aLV)
EndSwitch
WEnd
[OT]
Code um 100% kürzer
100 - 100 = 0 ![]()
Dir ist ein großer Wurf gelungen - Code der Null % Platz beansprucht. Respekt
[/OT]
Ich hatte mir dazu eine "SwipBar" aus Labels gebastelt:
Global $gui = GUICreate('test')
GUISetState()
$arBar = _SwipBarOn(10, 10, 300, 20)
$t = TimerInit()
Do
If TimerDiff($t) > 8000 Then _SwipBarOff($arBar) ; nach 8 Sekunden wird Bar gelöscht
Until GUIGetMsg() = -3
_SwipBarOff($arBar)
#region - SwipBar Funktionen
Func _SwipBarOn($x, $y, $width, $heigth, $iCol=0x000090, $iBkCol=0xD4D0C8)
Global $SwipBar[3], $aSwipPos[4], $xSwip, $upSwip = True
Local $swipWidth = Floor($width/4.5)
$SwipBar[0] = GUICtrlCreateGroup('', $x-1, $y-7, $width+2, $heigth+8)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$SwipBar[1] = GUICtrlCreateLabel('', $x, $y, $width, $heigth)
GUICtrlSetBkColor(-1, $iBkCol)
$SwipBar[2] = GUICtrlCreateLabel('', $x, $y+2, $swipWidth, $heigth-1)
GUICtrlSetBkColor(-1, $iCol)
$aSwipPos[0] = $x
$aSwipPos[1] = $y
$aSwipPos[2] = $swipWidth
$aSwipPos[3] = $width
AdlibRegister('_swip', 30)
Return $SwipBar
EndFunc
Func _swip()
If Not IsDeclared('upSwip') Then Global $upSwip = True
If Not IsDeclared('xSwip') Then Global $xSwip
If Not IsDeclared('aSwipPos') Then Global $aSwipPos[4]
If Not IsDeclared('SwipBar') Then Global $SwipBar[3]
If $upSwip Then
$xSwip += 4
Else
$xSwip -= 4
EndIf
If $upSwip And ($xSwip + $aSwipPos[2] >= $aSwipPos[0] + $aSwipPos[3]) Then $upSwip = False
If Not $upSwip And ($xSwip <= $aSwipPos[0]) Then $upSwip = True
ControlMove($gui, '', $SwipBar[2], $xSwip, $aSwipPos[1])
EndFunc
Func _SwipBarOff($arID)
AdlibUnRegister('_swip')
GUICtrlDelete($arID[0])
GUICtrlDelete($arID[1])
GUICtrlDelete($arID[2])
EndFunc
#endregion - SwipBar Funktionen