Hast Du schon mal ermittelt, ob es sich bei den Zeichen zwischen den Einträgen wirklich um Leerzeichen "chr(32)" handelt?
Mal mit StringToASCIIArray prüfen. Eventuell lässt sich das viel einfacher trennen...
Beiträge von Oscar
-
-
Mars: Das sieht schon ganz gut aus. Animation halte ich aber für überflüssig. Der Zahlenstrahl sollte außerdem unterhalb von AutoIt.de stehen (IMHO).
-
Internet per SAT hat BugFix schon alles geschrieben und ich denke, dass sind Minimumwerte. Es gibt wohl auch Anbieter (habe ich gelesen), die zusätzlich (als Upload für kürzere Latenzen) einen DSL-Anschluss anbieten. Das dürfte aber teurer sein. Damit habe ich aber keine Erfahrung.
ADSL wird über die alten Telefon-Kupferkabel übertragen. Dort sind bis zu 16 MBit DL möglich. Betonung auf "bis zu", weil das ganz erheblich von der Länge des Kabels bis zum nächsten Anschlusskasten abhängig ist. Ich habe hier bei mir nur 2 MBit.
Bei VDSL bekommst Du garantierte Werte (meist 25 oder 50 MBit). ADSL/VDSL haben kürzere Laufzeiten/Latenzen als SAT, aufgrund der relativ kurzen Laufzeit durch das Kabel.
Außerdem gibt es noch Internet über das TV-Kabel (z.B. bei Kabel Deutschland). Dort gibt es bis zu 100 MBit. Wobei das Kabel von mehreren genutzt wird und Du in Spitzenzeiten keine garantierten Werte erhälst. Das kommt aber auch auf das Nutzungsverhalten der User an und hängt außerdem von der Anbindung des Knotens beim Anbieter ab. -
Dein Fehler ist, dass Du die Tab-Definition nicht beendest. Es fehlte ein: GUICtrlCreateTabItem("")
Außerdem würde ich Dir empfehlen Switch statt Select zu verwenden:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
$hWnd = GUICreate("WhoIsInTheHouse", 700, 700)
$tab = GUICtrlCreateTab(0, 0, 600, 600)
Local $tabs[7]
For $i = 0 To 5
$tabs[$i] = GUICtrlCreateTabItem($i & ". Stock")
Next
$tabs[6] = GUICtrlCreateTabItem("Aktualisieren")
GUICtrlCreateTabItem("") ; Beendet die Tab Definition$mainContextMenu = GUICtrlCreateContextMenu($tab)
[/autoit]
Global $mainContextMenuItem[5] ;Hauptkontextmenü
$mainContextMenuItem[0] = GUICtrlCreateMenuItem("create Computer", $mainContextMenu) ;neuen Computer erstellen
$mainContextMenuItem[1] = GUICtrlCreateMenuItem("edit Computer", $mainContextMenu) ;vorhandenen Computer bearbeiten
$mainContextMenuItem[2] = GUICtrlCreateMenuItem("delete Computer", $mainContextMenu) ;vorhanden Computer löschen
$mainContextMenuItem[3] = GUICtrlCreateMenuItem("", $mainContextMenu) ;Strich
$mainContextMenuItem[4] = GUICtrlCreateMenuItem("show Log", $mainContextMenu) ;show Log-File
GUISetState()
While 1
Switch GUIGetMsg()
Case $mainContextMenuItem[0] ; create Computer
MsgBox(0, "", "create Computer")
Case $mainContextMenuItem[1] ; edit Computer
MsgBox(0, "", "edit Computer")
Case $mainContextMenuItem[2] ; delete Computer
MsgBox(0, "", "delete Computer")
Case $mainContextMenuItem[4] ; delete Computer
MsgBox(0, "", "show Log")
Case $GUI_EVENT_CLOSE
GUIDelete()
Exit
EndSwitch
WEnd -
Ich hatte jetzt weniger an einen "Schutz" des Programms gedacht, als vielmehr an einen Schutz der Daten, die mit dem Programm erstellt werden.
Also eine verschlüsselte Ablage der Daten und ein ablegen des Hashwertes des verwendeten Passwortes.
Einen 100% sicheren Programmschutz gibt es nicht. Da sind wir uns einig.
-
kurze frage denn an ein ähnliches problem sitz ich auch, was passsiert wenn man die ini öffnet und den passwortparameter entfernt fragt er dann nicht wieder nach einen neuen passwort und mit diesen lässt erdann doch den zugriff auf die gesicherten daten zu
Man sollte die gesicherten Daten auch mit dem eingegebenen Passwort verschlüsseln, dann ist der Zugriff darauf nur mit diesem Passwort möglich.
Ein löschen des Passworts in der Ini führt dann dazu, dass man nicht mehr auf die Daten zugreifen kann. Oder man muss das so programmieren, dass dann nach dem alten Passwort gefragt wird.Einen Passwortwechsel sollte man dem User aber ermöglichen. Das geschieht, indem man zuerst das alte Passwort eingeben lässt, mit diesen werden dann die Daten entschlüsselt, dann fragt man nach einem neuen Passwort und mit dem werden dann die Daten zukünftig verschlüsselt.
funkey: Danke, dass Du schon für mich geantwortet hast. Dem habe ich nichts hinzuzufügen.

-
Zum Einen solltest Du das Passwort nicht im Klartext ablegen. Erstelle einen Hash-Wert (z.B. mit SHA1) von dem Passwort und speichere diesen ab.
Zum Anderen benutze statt des Scriptverzeichnisses das @AppDataDir (Anwendungsdaten) und erstelle dort einen Ordner für Dein Programm. In diesen Ordner packst Du dann die Ini. Dann ist es egal, wo das Script/die Exe gespeichert ist. Alternativ könntest Du auch die Registry benutzen. -
Ich finde Switch in so einem Fall "lesbarer":
[autoit]
[/autoit]
Switch $1
Case 5, 15, 21, 27, 29, 48
GUICtrlSetState($Checkbox1,$GUI_CHECKED)
EndSwitch -
Ich würde das Ganze mit GDI+ zeichnen. Dann kannst Du auch anschließend die einzelnen Linien besser darstellen.
Hier mal ein Anfang:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]
Global $iEdge = 32, $iCount = 10, $iRect = $iEdge * $iCount + $iEdge * 2$hGui = GUICreate('Test', $iRect, $iRect)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_Click')$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
[/autoit] [autoit][/autoit] [autoit]
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iRect, $iRect, $hGraphic)
$hGraphicBuff = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsClear($hGraphic, 0xFFFFFFFF)
$hPen = _GDIPlus_PenCreate(0xFFAAAAAA)
For $y = 0 To $iCount - 1
For $x = 0 To $iCount - 1
_GDIPlus_GraphicsDrawRect($hGraphicBuff, $iEdge + $x * $iEdge, $iEdge + $y * $iEdge, $iEdge, $iEdge, $hPen)
Next
Next
_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)GUIRegisterMsg($WM_PAINT, 'WM_PAINT')
[/autoit] [autoit][/autoit] [autoit]WinWaitClose($hGui)
[/autoit] [autoit][/autoit] [autoit]
ExitFunc _End()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_PenDispose($hPen)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
GUIDelete($hGui)
EndFunc ;==>_EndFunc _Click()
[/autoit] [autoit][/autoit] [autoit]
Local $aInfo = GUIGetCursorInfo($hGui), $iX, $iY
$iX = Int($aInfo[0] / $iEdge)
$iY = Int($aInfo[1] / $iEdge)
ToolTip(StringFormat('Spalte:\t%i\nZeile:\t%i', $iX, $iY))
EndFunc ;==>_ClickFunc WM_PAINT($hWnd, $Msg, $wParam, $lParam)
[/autoit]
_GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
EndFunc ;==>WM_PAINT -
Beim OnEventMode sollte (im Gegensatz zum MsgLoopMode) innerhalb der While...Wend-Schleife immer auch ein Sleep vorhanden sein, weil sonst die Prozessorlast auf 100% steigt.
Also z.B. ein Sleep(20) hinzufügen reicht schon. Je nachdem, wie oft der Rest aktualisiert werden soll (könnte man übrigens auch per AdlibRegister machen), kann der Sleep-Befehl auch größer ausfallen. -
Hier mal meine Variante:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>
$aLotto = _Lotto()
_ArrayDisplay($aLotto)Func _Lotto()
[/autoit]
Local $aNumbers[49], $aWin[6]
For $i = 0 To UBound($aNumbers) - 1
$aNumbers[$i] = $i + 1
Next
For $i = 0 To UBound($aWin) - 1
$iRandom = Random(0, 48 - $i, 1)
$aWin[$i] = $aNumbers[$iRandom]
$aNumbers[$iRandom] = $aNumbers[48 - $i]
Next
_ArraySort($aWin)
Return $aWin
EndFunc ;==>_Lotto -
Zu Split_Streams konnte ich nichts finden. Das mit dem syncen ist aber klasse!

Ist das so ok?
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#AutoIt3Wrapper_UseX64=n
;~ #include <Array.au3>
#include 'Bass.au3'OnAutoItExitRegister('_Exit')
[/autoit] [autoit][/autoit] [autoit]
HotKeySet('{ESC}', '_Exit'); BASS starten
[/autoit] [autoit][/autoit] [autoit]
_BASS_Startup(@ScriptDir & '\bass.dll'); Deviceliste anzeigen
[/autoit] [autoit][/autoit] [autoit]
Global $iIndex = 0, $sDevices = '', $aInfo = '', $error = 0
Do
$iIndex += 1
$aInfo = _BASS_GetDeviceInfo($iIndex)
If IsArray($aInfo) Then $sDevices &= '[' & $iIndex & '] ' & $aInfo[0] & @CRLF
Until $aInfo = 0
MsgBox(0, 'Devicelist', $sDevices); Device auswählen
[/autoit] [autoit][/autoit] [autoit]
$idDevice = Int(InputBox('Choose Device', 'Enter Device Id', '1'))
If $idDevice >= $iIndex Or @error Then Exit MsgBox(16, 'Wrong Device', 'Device does not exist!'); Device initialisieren
[/autoit] [autoit][/autoit] [autoit]
If Not _BASS_Init(0, $idDevice, 44100, '', 0) Then Exit MsgBox(16, 'Device error', 'Device could not be initialized.')
;~ $aInfo = _BASS_GetInfo()
;~ _ArrayDisplay($aInfo)
;~ _Exit(); Audiodatei laden
[/autoit] [autoit][/autoit] [autoit]
$sMP3File = FileOpenDialog('Bitte MP3-Datei auswählen', '', 'MP3s (*.mp3)')
If Not FileExists($sMP3File) Then Exit MsgBox(16, 'Datei nicht gefunden!', $sMP3File); Stream erstellen
[/autoit] [autoit][/autoit] [autoit]
$hStream1 = _BASS_StreamCreateFile(0, $sMP3File, 0, 0, $BASS_STREAM_AUTOFREE + $BASS_SPEAKER_FRONT)
$hStream2 = _BASS_StreamCreateFile(0, $sMP3File, 0, 0, $BASS_STREAM_AUTOFREE + $BASS_SPEAKER_REAR)
$hStream3 = _BASS_StreamCreateFile(0, $sMP3File, 0, 0, $BASS_STREAM_AUTOFREE + $BASS_SPEAKER_CENLFE)
_BASS_ChannelSetLink($hStream1, $hStream2)
_BASS_ChannelSetLink($hStream1, $hStream3); Stream abspielen
[/autoit] [autoit][/autoit] [autoit]
_BASS_ChannelPlay($hStream1, 1)$iSongLenght = _BASS_ChannelGetLength($hStream1, $BASS_POS_BYTE)
[/autoit] [autoit][/autoit] [autoit]
$iSongSeconds = Int(_BASS_ChannelBytes2Seconds($hStream1, $iSongLenght))
Do
$iPos = _BASS_ChannelGetPosition($hStream1, $BASS_POS_BYTE)
$iSeconds = Int(_BASS_ChannelBytes2Seconds($hStream1, $iPos))
ToolTip($iSeconds & ' / ' & $iSongSeconds)
Sleep(500)
Until $iSeconds >= $iSongSeconds
_Exit()Func _Exit()
[/autoit]
_BASS_ChannelRemoveLink($hStream1, $hStream3)
_BASS_ChannelRemoveLink($hStream1, $hStream2)
; Bass freigeben
_BASS_Free()
Exit
EndFunc ;==>_Exit -
Ich habs selbst gelöst!
Man erstelle einfach 3 Streams und spiele alle ab.
Hier das Lösungsscript:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#AutoIt3Wrapper_UseX64=n
;~ #include <Array.au3>
#include 'Bass.au3'OnAutoItExitRegister('_Exit')
[/autoit] [autoit][/autoit] [autoit]
HotKeySet('{ESC}', '_Exit'); BASS starten
[/autoit] [autoit][/autoit] [autoit]
_BASS_Startup(@ScriptDir & '\bass.dll'); Deviceliste anzeigen
[/autoit] [autoit][/autoit] [autoit]
Global $iIndex = 0, $sDevices = '', $aInfo = '', $error = 0
Do
$iIndex += 1
$aInfo = _BASS_GetDeviceInfo($iIndex)
If IsArray($aInfo) Then $sDevices &= '[' & $iIndex & '] ' & $aInfo[0] & @CRLF
Until $aInfo = 0
MsgBox(0, 'Devicelist', $sDevices); Device auswählen
[/autoit] [autoit][/autoit] [autoit]
$idDevice = Int(InputBox('Choose Device', 'Enter Device Id', '1'))
If $idDevice >= $iIndex Or @error Then Exit MsgBox(16, 'Wrong Device', 'Device does not exist!'); Device initialisieren
[/autoit] [autoit][/autoit] [autoit]
If Not _BASS_Init(0, $idDevice, 44100, '', 0) Then Exit MsgBox(16, 'Device error', 'Device could not be initialized.')
;~ $aInfo = _BASS_GetInfo()
;~ _ArrayDisplay($aInfo)
;~ _Exit(); Audiodatei laden
[/autoit] [autoit][/autoit] [autoit]
$sMP3File = FileOpenDialog('Bitte MP3-Datei auswählen', '', 'MP3s (*.mp3)')
If Not FileExists($sMP3File) Then Exit MsgBox(16, 'Datei nicht gefunden!', $sMP3File); Stream erstellen
[/autoit] [autoit][/autoit] [autoit]
$hStream1 = _BASS_StreamCreateFile(0, $sMP3File, 0, 0, $BASS_STREAM_AUTOFREE + $BASS_SPEAKER_FRONT)
$hStream2 = _BASS_StreamCreateFile(0, $sMP3File, 0, 0, $BASS_STREAM_AUTOFREE + $BASS_SPEAKER_REAR)
$hStream3 = _BASS_StreamCreateFile(0, $sMP3File, 0, 0, $BASS_STREAM_AUTOFREE + $BASS_SPEAKER_CENLFE); Stream abspielen
[/autoit] [autoit][/autoit] [autoit]
_BASS_ChannelPlay($hStream1, 1)
_BASS_ChannelPlay($hStream2, 1)
_BASS_ChannelPlay($hStream3, 1)$iSongLenght = _BASS_ChannelGetLength($hStream1, $BASS_POS_BYTE)
[/autoit] [autoit][/autoit] [autoit]
$iSongSeconds = Int(_BASS_ChannelBytes2Seconds($hStream1, $iSongLenght))
Do
$iPos = _BASS_ChannelGetPosition($hStream1, $BASS_POS_BYTE)
$iSeconds = Int(_BASS_ChannelBytes2Seconds($hStream1, $iPos))
ToolTip($iSeconds & ' / ' & $iSongSeconds)
Sleep(500)
Until $iSeconds >= $iSongSeconds
_Exit()Func _Exit()
[/autoit]
; Bass freigeben
_BASS_Free()
Exit
EndFunc ;==>_Exit -
Ich bin schon seit Stunden damit beschäftigt, zu versuchen eine MP3-Datei auf einem 5.1 Soundsystem auszugeben.
Irgendwas übersehe ich wahrscheinlich dabei. Hier mal mein Testscript:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#AutoIt3Wrapper_UseX64=n
;~ #include <Array.au3>
#include 'Bass.au3'OnAutoItExitRegister('_Exit')
[/autoit] [autoit][/autoit] [autoit]
HotKeySet('{ESC}', '_Exit'); BASS starten
[/autoit] [autoit][/autoit] [autoit]
_BASS_Startup(@ScriptDir & '\bass.dll'); Deviceliste anzeigen
[/autoit] [autoit][/autoit] [autoit]
Global $iIndex = 0, $sDevices = '', $aInfo = '', $error = 0
Do
$iIndex += 1
$aInfo = _BASS_GetDeviceInfo($iIndex)
If IsArray($aInfo) Then $sDevices &= '[' & $iIndex & '] ' & $aInfo[0] & @CRLF
Until $aInfo = 0
MsgBox(0, 'Devicelist', $sDevices); Device auswählen
[/autoit] [autoit][/autoit] [autoit]
$idDevice = Int(InputBox('Choose Device', 'Enter Device Id', '1'))
If $idDevice >= $iIndex Or @error Then Exit MsgBox(16, 'Wrong Device', 'Device does not exist!'); Device initialisieren
[/autoit] [autoit][/autoit] [autoit]
If Not _BASS_Init(0, $idDevice, 44100, '', 0) Then Exit MsgBox(16, 'Device error', 'Device could not be initialized.')
;~ $aInfo = _BASS_GetInfo()
;~ _ArrayDisplay($aInfo)
;~ _Exit(); Audiodatei laden
[/autoit] [autoit][/autoit] [autoit]
$sMP3File = FileOpenDialog('Bitte MP3-Datei auswählen', '', 'MP3s (*.mp3)')
If Not FileExists($sMP3File) Then Exit MsgBox(16, 'Datei nicht gefunden!', $sMP3File); Stream erstellen
[/autoit] [autoit][/autoit] [autoit]
$hStream = _BASS_StreamCreateFile(0, $sMP3File, 0, 0, $BASS_STREAM_AUTOFREE + $BASS_SPEAKER_REAR) ; $BASS_SPEAKER_FRONT oder $BASS_SPEAKER_REAR; Stream abspielen
[/autoit] [autoit][/autoit] [autoit]
_BASS_ChannelPlay($hStream, 1)$iSongLenght = _BASS_ChannelGetLength($hStream, $BASS_POS_BYTE)
[/autoit] [autoit][/autoit] [autoit]
$iSongSeconds = Int(_BASS_ChannelBytes2Seconds($hStream, $iSongLenght))
Do
$iPos = _BASS_ChannelGetPosition($hStream, $BASS_POS_BYTE)
$iSeconds = Int(_BASS_ChannelBytes2Seconds($hStream, $iPos))
ToolTip($iSeconds & ' / ' & $iSongSeconds)
Sleep(500)
Until $iSeconds >= $iSongSeconds
_Exit()Func _Exit()
[/autoit]
; Bass freigeben
_BASS_Free()
Exit
EndFunc ;==>_ExitDie Infos von _BASS_GetInfo() sehen so aus:
Spoiler anzeigen
[12] = 6 es werden also 6 Lautsprecher erkannt.
Ich habs auch schon versucht mit:
[autoit]_BASS_SetConfig($BASS_CONFIG_3DALGORITHM, $BASS_3DALG_DEFAULT)
[/autoit]
aber das alles hilft nichts. Die MP3-Datei wird immer nur über die Front- oder die Rear-Lautsprecher ausgegeben.
Ich möchte aber gern eine Ausgabe auf allen Lautsprechern. Jemand eine Idee? -
[verschoben nach "Hilfe & Unterstützung"]
-
Einen Trafo sicherlich nicht. Es handelt sich bei der Spannung am USB-Port um Gleichspannung. Einen Widerstand könnte man zwar dazwischenschalten, das wäre dann aber nicht (per Software) regelbar.
Ein Festwiderstand besitzt einen festen Widerstandswert. Das heißt, die Spannung, die am zusätzlichen Widerstand abfällt, steht dem Ventilator nicht mehr zur Verfügung und dieser dreht dann entsprechend langsamer.
Um das regelbar zu machen könnte man zu einem Poti (einstellbarer Widerstand) greifen.
Soweit die Theorie. In der Praxis muss man sehr viel mehr bedenken:
- Reicht die verringerte Spannung noch aus, um den Ventilator anlaufen zu lassen?
- Der Strom, der durch den Ventilator fließt, der fließt auch durch den Widerstand. Dieser Strom mal der Spannung, die an dem Widerstand abfällt ergibt die Verlustleistung des Widerstands. Das sollte man beachten, sonst raucht der Widerstand ab (qualmt und stinkt).Diese Lösung ist aber sowieso eher schlecht, weil die Leistung, die nicht zum Venti soll, einfach "verbraten" wird.
Sieht man sich mal die Steuerung auf einem Mainboard an, so sieht man, dass dort eine Pulsweitenmodulation (PWM) für die Lüfter verwendet wird.Es wäre also eine Alternative, einen Lüfter am Mainboard anzuschließen und diesen dann per Software zu steuern (viele Mainboards unterstützen das).

-
Dein Script kann man ziemlich kürzen (_IsPressed und die Funktion sind überflüssig):
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>#region ### START Koda GUI section ### Form=
[/autoit]
Global $Left = 0
$Form1 = GUICreate("Form1", 272, 100, 192, 124)
$Label1 = GUICtrlCreateLabel("LeftClicks:", 24, 48, 156, 17)
$Label2 = GUICtrlCreateLabel($Left, 96, 48, 50, 17)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_PRIMARYUP
$Left += 1
GUICtrlSetData($Label2, $Left)
EndSwitch
WEnd -
Das, was Du von FileFindNextFile zurück bekommst, ist nur der Dateiname. Das heißt, Du musst noch den Pfad hinzufügen, bevor Du mit FileGetTime das Datum auslesen kannst.
-
Ein normaler USB-Port ist für sowas nicht vorgesehen! Dort liegen immer 5 Volt (+- Toleranz) an.
Das heißt: ohne Zusatzschaltung (Hardware) wird das nicht funktionieren. -
Das sind nur die Jungs vom BND, die kurz nachschauen wollen, was Du gerade so treibst. SCNR
