Zeile 15 habe ich ein ConsoleWrite mit dem Pfad des Ordners geschrieben. An der Stelle kannst du mit dem Pfad ($GFolders[$i][0]) machen was du willst
Beiträge von Kanashius
-
-
Das sind Befehle... in der autoit-hilfe kannst du nachsehen, was sie bewirken.
(oder einfach im Scite eingeben, anklicken und F1 drücken (Dafür muss die datei, in der du arbeitest gespeichert sein)) -
Mach nen String, schreib für jede taste nen kürzel rein. wenn dein code in dem string drinsteht lässt du was anzeigen. sobald der string nicht mehr zu deinem code werden kann trennst du einfach alles bis zum nächsten 1 zeichen vom code.
-
So kann man das Lösen. Aber Achtung: 1. Solange dein Programm läuft können andere Programme den Ordner nicht löschen (zumindest nicht, wenn in dem moment deine dirgetsize abfrage läuft, was ja mehrmals die sekunde passiert (solange es nicht zu viele ordner sind). 2. Alle übergeordneten Ordner ändern auch ihre größe, wenn der untergeordnete seine größe ändert!
Spoiler anzeigen
[autoit][/autoit] [autoit][/autoit] [autoit]#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]
$Folder=_searchFolders("")
local $GFolders[UBound($Folder)][2]
for $i=0 to UBound($Folder)-1 step 1
$GFolders[$i][0]=$Folder[$i]
$GFolders[$i][1]=DirGetSize($Folder[$i])
next
_ArrayDisplay($Folder)local $Timer
[/autoit] [autoit][/autoit] [autoit]
While 1
$Timer=TimerInit()
for $i=0 to UBound($GFolders)-1 step 1
if $GFolders[$i][1]<>DirGetSize($GFolders[$i][0]) then
ConsoleWrite("Der Ordner "&$GFolders[$i][0]&" änderte seine Größe."&@CRLF)
$GFolders[$i][1]=DirGetSize($GFolders[$i][0])
endif
next
if TimerDiff($Timer)<100 then ;damit nicht zu viel cpu verbraucht wird
sleep(100-TimerDiff($Timer))
endif
WEndFunc _searchFolders($folder)
[/autoit]
local $array[10],$count=0
$search=FileFindFirstFile($folder&"\"&"*.*")
while NOT @error
$name=FileFindNextFile($search)
If @error then
ExitLoop
ElseIf @extended then
$array[$count]=$folder&"\"&$name
$count+=1
$ar=_searchFolders($folder&"\"&$name)
if UBound($ar)>0 then
ReDim $array[UBound($array)+UBound($ar)+1]
for $i=0 to UBound($ar)-1 step 1
$array[$count]=$ar[$i]
$count+=1
next
endif
if $count=UBound($array) then
ReDim $array[UBound($array)+10]
endif
EndIf
WEnd
ReDim $array[$count]
return $array
EndFuncViel Freude mit dem Script!
-
So kann man es machen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <File.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>Global $ursprungspfad
[/autoit] [autoit][/autoit] [autoit]
Global $ordneranzahl
Global $dateizahl$run = 0
[/autoit] [autoit][/autoit] [autoit]
$ursprungspfad = "C:\Users\Marv\Dropbox\Hompage"
$zielpfad = ""$files=_searchFiles($ursprungspfad)
[/autoit] [autoit][/autoit] [autoit]
local $filesCopy[UBound($files)][2]
local $count=0
for $i=0 to UBound($files)-1 step 1
$ar=StringSplit($files[$i],"\")
if StringInStr($ar[$ar[0]],"v")=1 then
$name=""
;von hier
for $l=1 to UBound($ar)-2 step 1
$name&=$ar[$l]&"\"
next
;bis hier weglassen, damit alle in einen Ordner kopiert werden (ohne unterordner)
$name&=StringRight($ar[$ar[0]],StringLen($ar[$ar[0]])-1)
$filesCopy[$count][0]=$files[$i]
$filesCopy[$count][1]=StringReplace($name,$ursprungspfad,"");ebenso das hier mit $filesCopy[$count][1]=$name ersetzen (schneller)
$count+=1
endif
next
ReDim $filesCopy[$count]
for $f=0 to UBound($filesCopy)-1 step 1
FileCopy($filesCopy[$f][0],$zielpfad&$filesCopy[$f][1],1+8)
nextFunc _searchFiles($folder)
[/autoit]
local $array[10],$count=0
$search=FileFindFirstFile($folder&"\"&"*.*")
while NOT @error
$name=FileFindNextFile($search)
if @error then
ExitLoop
elseif @extended then
$ordneranzahl+=1
$ar=_searchFiles($folder&"\"&$name)
ReDim $array[UBound($array)+UBound($ar)+1]
for $i=0 to UBound($ar)-1 step 1
$array[$count]=$ar[$i]
$count+=1
next
else
$dateizahl+=1
$array[$count]=$folder&"\"&$name
$count+=1
if $count=UBound($array) then
ReDim $array[UBound($array)+10]
endif
endif
WEnd
ReDim $array[$count]
return $array
EndFuncIch hoffe, das funktioniert bei dir
-
So wie ich das verstehe möchtest du im Inhalt der PDFs suchen und dann alle PDFs mit dem Inhalt auflisten...
Dabei entsteht meiner Meinung nach das Problem, dass du PDFs nur mit Adobe-Programmen (Reader) öffnen kannst. In den Öffnungsmöglichkeiten von Autoit ist das so nicht möglich.
Du müsstest eine Möglichkeit finden, das PDF Format zu öffnen, bzw. zu Text zu konvertieren... -
In die While-Schleife ein
[autoit]if @extended then
[/autoit]
InstallFont($sSourceFile&"\"&$sFontName)
endif
@extended zeigt bei FileFindNextFile an, wenn ein Ordner gefunden wurde. Wenn das der Fall ist musst du nur die Funtkion mit dem anderen Ordner aufrufen. Das läuft dann durch alle Unterordner mit durch. -
Für mich bitte $KanAI_[...] _ KanAI_[...]() :). Ich werd wohl auch erst ab 11.02 mitmachen... Dann ist meine Klausurenphase vorbei.Aber ich hätte dann ja noch mehr als ne Woche, daher klappt es hoffentlich schon beim ersten mal
EDIT:
Ich hab grad gelesen, dass es vermutlich erst Mitte Februar losgeht. Daher freu ich mich schon drauf -
Ich weiß das leider nicht so genau (und hab auch gerade kaum Zeit (Klausurenphase)). Daher nur ein paar Tipps:
Es gibt ein Event: GUISetOnEvent($GUI_EVENT_DROPPED, 'Function') (weiß nicht, ob es auch bei deinem Problem hilfe)
Sonst könnte man eventuell auf GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY') reagieren.
Falls das alles nicht geht könntest du dich hier einmal umsehen: https://msdn.microsoft.com/de-de/library/…(v=vs.110).aspx
Wenn du das dort durchließt sind dort einige Links. Kanst dich mal durchklicken.Ich hoffe ich konnte dir weiterhelfen.
-
So könnte man es machen. (IE hat anscheinend für jedes Fenster ein 2tes kleineres. Deshalb prüf ich vorher, ob das Fenster überhaupt angezeigt wird.
Ich denke, es wird dir recht nützlich seinSpoiler anzeigen
[autoit]$IEWins=_HideAllIEWin()
[/autoit] [autoit][/autoit] [autoit]
msgbox(48,"","Press to Show")
_ShowAllIEWin($IEWins)Func _HideAllIEWin()
[/autoit] [autoit][/autoit] [autoit]
$Windows=WinList()
global $HiddenWindows[$Windows[0][0]],$count=0
for $i=1 to UBound($Windows)-1 step 1
if StringInStr($Windows[$i][0],"Windows Internet Explorer") and WinGetState($Windows[$i][0])<>5 then
WinSetState($Windows[$i][1],"",@SW_HIDE)
$HiddenWindows[$count]=$Windows[$i][1]
$count+=1
endif
next
ReDim $HiddenWindows[$count]
return $HiddenWindows
EndFuncFunc _ShowAllIEWin($WinList)
[/autoit] [autoit][/autoit] [autoit][/autoit]
for $i=0 to UBound($HiddenWindows)-1 step 1
WinSetState($WinList[$i],"",@SW_SHOW)
next
EndFunc -
Ich hab ein kleines Programm geschrieben, welches das Audio eine Mikrofones aufnehmen und über einen Stream wieder ausgegeben werden soll... Leider tut sich garnichts
Ich hoffe ihr könnt mir helfen.
Spoiler anzeigen
[autoit]#include "udf\Bass.au3"
[/autoit] [autoit][/autoit] [autoit]
#include <GuiComboBoxEx.au3>
#include <GUIConstants.au3>
#include <array.au3>
Opt("GUIOnEventMode", 1)_BASS_Startup("udf\Bass.dll")
[/autoit] [autoit][/autoit] [autoit]
$iRecFreq = 44100
$iRecChannel = 2
$iRecBit = 16
global $aktDevice=[-1,""],$AudioOutHandle,$aktInDevice=[-1,""],$AudioInHandle_BASS_RecordInit(-1)
[/autoit] [autoit][/autoit] [autoit]
_BASS_Init(0, -1, $iRecFreq, 0, "")$Form1=GuiCreate("MikrozuLautsprecher",500,500)
[/autoit] [autoit][/autoit] [autoit]
$AudioOutCombo=_GUICtrlComboBoxEx_Create($Form1,"",10,10,300)
GUICtrlSetOnEvent(_GUICtrlComboBoxEx_GetComboControl($AudioOutCombo),"_setOutDevice")
$AudioInCombo=_GUICtrlComboBoxEx_Create($Form1,"",10,40,300)
GUICtrlSetOnEvent(_GUICtrlComboBoxEx_GetComboControl($AudioInCombo),"_setInDevice")
;$Form1_ctrl_input=GUICtrlCreateCombo("",5,8,200,20)
GUISetOnEvent($GUI_EVENT_CLOSE, 'Close')
GUISetState(@SW_SHOW,$Form1)
aktOutDevices()
aktInDevices()
_start()while sleep(10)
[/autoit] [autoit][/autoit] [autoit]
WEndFunc _start()
[/autoit] [autoit][/autoit] [autoit]
$AudioOutHandle=_BASS_StreamCreate(44100, 2, 0)
$AudioInHandle=_BASS_RecordStart(44100, 2, 0, "RecProc")
EndFuncFunc Close()
[/autoit] [autoit][/autoit] [autoit]
_BASS_ChannelStop($AudioOutHandle)
_BASS_FREE()
Exit
EndFuncFunc _RecProc($handle, $buffer, $length, $user)
[/autoit] [autoit][/autoit] [autoit]
_BASS_StreamPutData($AudioOutHandle,$buffer,$length)
EndFuncFunc aktInDevices()
[/autoit] [autoit][/autoit] [autoit]
$i=0
While 1
$device=_BASS_RecordGetDeviceInfo($i)
;_ArrayDisplay($device)
if $device=0 then
ExitLoop
endif
_GUICtrlComboBoxEx_AddString($AudioInCombo,$device[0])
$i+=1
WEnd
EndFuncFunc _setInDevice()
[/autoit] [autoit][/autoit] [autoit]
Local $sText
$nr=_GUICtrlComboBoxEx_GetCurSel($AudioInCombo)
_GUICtrlComboBoxEx_GetItemText($AudioInCombo,$nr,$sText)
$aktInDevice[0]=$nr
$aktInDevice[1]=$sText
$device=_BASS_RecordGetDeviceInfo($nr+1)
if $device[2]<4 then
_BASS_RecordInit($nr+1)
endif
_BASS_RecordSetDevice($aktInDevice[0]+1);$AudioInHandle,
EndFuncFunc _setOutDevice()
[/autoit] [autoit][/autoit] [autoit]
Local $sText
$nr=_GUICtrlComboBoxEx_GetCurSel($AudioOutCombo)
_GUICtrlComboBoxEx_GetItemText($AudioOutCombo,$nr,$sText)
$aktDevice[0]=$nr
$aktDevice[1]=$sText
$device=_BASS_GetDeviceInfo($nr+1)
if $device[2]<4 then
_BASS_Init(0, $nr+1, $iRecFreq, 0, "")
endif
_BASS_ChannelSetDevice($AudioOutHandle,$aktDevice[0]+1)
EndFuncFunc aktOutDevices()
[/autoit]
$i=0
While 1
$device=_BASS_GetDeviceInfo($i)
if $device=0 then
ExitLoop
endif
if $device[0]<>"No Sound" then
_GUICtrlComboBoxEx_AddString($AudioOutCombo,$device[0])
endif
$i+=1
WEnd
EndFuncPS: Natürlich kenne ich die "Abhören" Funktion von Windows, wo man das Mikro direkt in den Lautsprecher schicken kann, ich möchte nur vorher das Audio noch bearbeiten, weshalb ich es selbst machen möchte/muss.
(Hauptsächlich die Lautstärke erhöhen, da mein Mikrofon selbst wenn es (in Windows) auf volle Lautstärke eingestellt ist noch sehr leise ist.) -
Oder du speicherst alle Controls in einem Array. Dann könntest du inner Schleife durchgehen, welche gedrückt werden. (Mit bedingung, damit nicht ständig die Farbe gesetzt wird, obwohl sie schon gesetzt ist)
[autoit]
(Das mit dem $Timer ist nur, damit es nicht flackert)#Region ### START INCLUDES ###
[/autoit][autoit][/autoit][autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <WindowsConstants.au3>
#EndRegion ### END INCLUDES ####Region ### START GLOBAL VARIABLES ###
[/autoit][autoit][/autoit][autoit]
Global $hDLL = DllOpen("user32.dll"),$Keys[2][3],$Timer
#EndRegion ### END GLOBAL VARIABLES ####Region ### START Koda GUI section ### Form=
[/autoit][autoit][/autoit][autoit]
$Form1 = GUICreate("Form1", 125, 74, 192, 124)
$Keys[0][0] = GUICtrlCreateButton("Q", 0, 0, 20, 20)
$Keys[0][1]=false
$Keys[0][2]="51"
GUICtrlSetBkColor(-1, 0xFF0000)
$Keys[1][0] = GUICtrlCreateButton("W", 20, 0, 20, 20)
$Keys[1][1]=false
$Keys[1][2]="57"
GUICtrlSetBkColor(-1, 0xFF0000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit]
$Timer=TimerInit
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
DllClose($hDLL)
Exit
EndSwitch
for $i=0 to UBound($Keys)-1 step 1
$bool=_IsPressed($Keys[$i][2],$hDLL)
if $bool and NOT $Keys[$i][1] then
GuiCtrlSetBkColor($Keys[$i][0],0x00FF00)
$Keys[$i][1]=true
ElseIf Not $bool and $Keys[$i][1] then
GuiCtrlSetBkColor($Keys[$i][0],0xFF0000)
$Keys[$i][1]=False
endif
next
if TimerDiff($Timer)<10 then
Sleep(10)
endif
WEnd -
Nur mal zu TrueCrypt:
Ich nutze es immernoch und halte es für eins der besten verschlüsselungstools.
Ich schließe mich der vermutung an, die viele äußern: die usa hatte zu viele probleme mit dem tool, da sie natürlich nicht nur legal genutzt wurden. Truecrypt-Entwickler hätten nicht von einem tag auf den andern einfach gesagt: wir sind nicht mehr sicher. wir stellen jetzt die komplette entwicklung ein.Aber das ist nur meine Meinung.
-
Ich kann den Code leider nicht ausführen...
Erst musste ich die includes aus dem include ordner in das verzeichnis kopieren, wo die beatit-au3 liegt... dann die id3.au3 ausm internet suchen... es kommt ne fehlermeldung beim initialisieren mit _bass_getinfo. (Zeile 176). Der tritt auch bei den compilierten dateien auf. (Generell sollte vermieden werden, bei einer funktion [$index] zu verwenden, da, sobald das element nicht existiert eine fehlermeldung kommt. also dort error-handling betreiben. (auch wenn es mehr arbeit macht). nach auskommentieren der genannten zeile kann ich es ausführen, die musik wird aber nicht abgespielt.Ideen:
2 Songs gleichzeitig (zum faden)
Den Equalizer mehr grafisch zu machen (wer möchte schon jede frequenz einzeln erhöhen, etc. :D)Ich würde dir deinen Player auch gerne mit GDI+ verschönern Hab da schon einiges mit "Bild-Guis" gemacht.
Was das laden mehrerer Bibliotheken angeht: Vorschlag zur Nutzung einer Datenbank. Die Musik kann dann dort abgespeichert werden. Dadurch müsste nur einmal beim Eintragen der Musik das ganze Verzeichnis durchsucht werden. Danach geht der Zugriff über die Datenbank, was natürlich viel schneller ist :). (Dabei kann ich dir auch gerne behilflich sein).
Was die Verzeichnisse angeht: Eine Empfehlung zur Treeview Ordnerauswahl. (Dazu hab ich auch mal eine UDF erstellt: FileExplorere List and TiewView ) Dann kann schöner in den Ordnern navigiert werden.Ich hoffe du kannst die Fehler beheben und viel spaß beim umsetzen meiner Ideen
Falls ich dir helfen kann schreib mir gerne eine PN.Viel Spaß noch, Kanashius
-
guictrlread($Input1) gibt dir den inhalt der input-box als string aus. Du kannst das somit einfach einbauen:
Sleep(GuiCtrlRead($Input1))
Ein handle kannst du dir so vorstellen:
In der Variable wird eine Nummer gespeichert. diese Nummer sagt dem Programm, welches Control (z.B. Input) du meinst. Dadurch kannst du auf das Element zugreifen und es an bestimmte funktionen übergeben. Wenn du $Input1 so verwendest wird diese Nummer zurückgegeben. Da du den Input als erstes erstellst wird dort eine 0 stehen, da es das 1te erstellte Control ist (Nummerierungen fangen immer bei 0 an). Dein Sleep bekommt also die Zahl 0 übergeben und wartet somit garnicht -
Hier ein schnell zusammengebastelter ansatz. ich hoffe er hilft dir weiter
[autoit]$folder="ORDNER"
[/autoit]
$search=filefindfirstfile(parameter)
while 1
$path=filefindnextfile($search)
if @extended then ;zeigt an, dass es ein ordner ist. sonst eine datei
$path ;entspricht hier der ersten ebene
für die nächste ebene einfach hier erneut die schleife einbauen
endif
if @error then ;kein element mehr
exitloop
endif
WEnd -
Sieht super aus. Gleich mal abspeichern
Großes Lob! -
Du solltest aber nicht sofort bei der HangUp-meldung beenden.
Das aufhängen entsteht dadurch, dass der Prozess nicht mehr auf Events antwortet. Das kann beispielsweise auch daran liegen, dass gerade eine komplizierte Berechnung gemacht wird.
Das kannst du beispielsweise dadurch testen, dass du ein programm schreibst mit guigetmsg oder so. dann machst du ne for schleife darein, die sehr lange läuft. schon würde eine gui sich aufhängen -
Das runden geht auch einfach, indem du int("4,201") machst
int schneidet die nachkommastellen einfach ab
mit mod("4,201",int("4,201")) den nachkommateil -
[autoit]
While Sleep(40);while ist hier richtig. mit sleep und allem
[/autoit]
$sRecvMsg = TCPRecv($ConnectedSocket,1048576 ,1);auch gut
If $sRecvMsg <> "" Then;es wird abgefragt, ob eine message angekommen ist
Do
$sRecvMsgPart = TCPRecv($ConnectedSocket ,1048576 ,1);was soll hier denn hin??? Du hast deine Message doch in $sRecvMsg gespeichert.
If @error Then FileWriteLine(@ScriptDir & "\Server.log", @error & @CRLF)
$sRecvMsg &= $sRecvMsgPart
Until $sRecvMsgPart <> ""
; verarbeitung der Daten in $sRecvMsg
EndIf
WEnd
Ich denke das Problem liegt im Verständnis von TCPRecv.
Stell es dir wie eine Schachtel vor. Alles was dein Client sendet wird beim Server in die Schachtel gepackt. Wenn du TCPRecv aufufst wird die Schachtel geleert und alles in die Variable kopiert.
Dadurch kann es sein, dass TCPRecv ein leeres Ergebnis zurückgibt in deiner DO Schleife. Dadurch gehst du sofort wieder aus der Schleife heraus.
Das TCPRecv wartet nicht darauf, dass eine Message ankommt.
Es kann auch passieren, dass mehrere Pakete, die du von deinem Clienten abschickst auf einmal ankommen.
Client sendet "ab" und "r" und "c"
Server TcpRecv liefert: "" und "" und "" und "ab" und "" und "rc"