No records found" isn't returned as an error by Excel. The function just returns an empty array. So you need to check for the number of rows in the array.
Und du weißt doch schon wie du dies überprüfen kannst:
No records found" isn't returned as an error by Excel. The function just returns an empty array. So you need to check for the number of rows in the array.
Und du weißt doch schon wie du dies überprüfen kannst:
Ich würde es so lösen:
$sData=FileRead('Neues Textdokument 2.0.txt')
$sData=Stringreplace($sData,' '&@CRLF,'')
$sData=Stringreplace($sData,' rt','')
$sData=StringStripWS($sData,7)
ConsoleWrite($sData)
$hFile=FileOpen('New.txt',2)
FileWrite($hFile,$sData)
FileClose($hFile)
ShellExecute('New.txt')
auch kein RegEX, aber wie du siehst es geht auch ohne.
Ich würde dafür ein 1 basiertes Array nehmen:
#include <Array.au3>
Global $aAll[1], $aBlack[1]
For $i=1 to 10
_ArrayAdd($aAll,$i)
_ArrayAdd($aBlack,$i)
Next
$aAll[0]=UBound($aAll)-1
$aBlack[0]=UBound($aBlack)-1
For $i=$aAll[0] to 1 Step -1
ConsoleWrite('I: '&$i&$aAll[$i]&@TAB)
If _ArraySearch($aBlack,$aAll[$i],1) Then
_ArrayDelete($aAll,$i)
$aAll[0]-=1
EndIf
Next
_ArrayDisplay($aAll)
ConsoleWrite('Elements left: '&$aAll[0]&@CRLF)
Alles anzeigen
Ich habe hierzu ein Code gefunden der aber ab einer bestimmten Größe ein Ereignis auslöst.
Ich möchte wenn Person X / Programm Y etwas in eine Datei schreibt, dass PC Z eine MSGBOX erhält.
ja und warum machst du das nicht? Ich erkenne keine Frage im Thema!
Das Datumsformat ist mm.dd.yyyy.
liegt wohl daran, daß @n00b-it script aus dem englischsprachigen Raum kommt und die Funktion:
<strong>Func WMIDateStringToDate($dtmDate)</strong>
<strong> Return (StringMid($dtmDate, 5, 2) & "/" & StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))</strong>
<strong>EndFunc ;==>WMIDateStringToDate</strong>
nicht eingedeutsch bzw. internationalisiert wurde.
hier die dt. Version:
<strong>Func WMIDateStringToDate($dtmDate)</strong>
<strong> Return (StringMid($dtmDate, 7, 2) & "/" & StringMid($dtmDate, 5, 2)& "/" & StringLeft($dtmDate, 4) & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))</strong>
<strong>EndFunc ;==>WMIDateStringToDate</strong>
und jetzt noch die internationale Variante:
<strong>Func WMIDateStringToDate($dtmDate)</strong>
<strong> ;bnötigt #include <Date.au3></strong>
<strong> ConsoleWrite($dtmDate&@CRLF)</strong>
<strong> $sDate=StringLeft($dtmDate,4)&'/'& StringMid($dtmDate, 5, 2)&'/'&StringMid($dtmDate, 7, 2)&' '&StringMid($dtmDate,9,2)&':'&StringMid($dtmDate,11,2)&':'&StringMid($dtmDate,13,2)</strong>
<strong> Return _DateTimeFormat($sDate)</strong>
<strong>EndFunc ;==>WMIDateStringToDate</strong>
hier wird automatisch das Datumsformat lt. den Ländereinstellungen genommen.
Ich fahre mein PC jeden Tag hoch und runter =)
Bist du dir da sicher? Ausschalten über PowerOff heißt bei Win10 nicht unbedingt herunterfahren, kommt auf die Einstellungen an:
101_Systemeinstellungen.jpg
Was liest der Script denn genau aus`? wie lange der Computer läuft, oder wie lange der tatsächliche start des Computers gedauert hat`? Also von "On/Off" drücken bis Login Screen / Desktop?
wann der letzte "Kalt'-Start von Windows war.
UUpps, dachte das wäre offensichtlich.
Offensichtlich wäre es vielleicht, wenn ein lauffähiges Skript zum Testen verbügbar wäre! Aber immerhin weis ich jetzt, daß sich "daneben" nicht auf die Position bezieht.
nur ist die Darstellung des Textes ein wenig "daneben"
was erwartest du wenn der Text rechts ausgerichtet wird? Bersuch es mit $SS_CENTER.
Vor allem solltest du mal ein wenig "daneben" definieren!
WO GENAU steht, dass das Ergebnis ein 2D Array ist?
weis ich nicht, aber wenn es einer weis, dann water.
Aber spätestens durch _Arraydisplay weist du ja das es ein 2D-Array ist:
Das funktioniert und ich kann es mit _Arraydisplay anschauen.
Jede Funktion hat einen Rückgabewert. Die warscheins von dir verwendete _Excel_RangeRead
gibt bei mehrern Zellen logischerweise ein Array zurück. Wie man mit Array's umgeht kann man in https://www.autoitscript.com/wiki/Arrays nachlesen.
@BugFix hat auch ein Arraytutorial geschrieben, sollte in seiner Signatur verlinkt sein.
Mit Seite meinst du GUI?
einfach GuiSetState mit allen Parametern benutzen. Wichtiger bei Programmen mit mehreren GUI's ist allerdings das korrekte Zuordnen der Events, dazu benutzt man am besten GUIGetMsg im extended Modus:
#include <GUIConstantsEx.au3>
#include<WindowsConstants.au3>
Global $hGui1, $hGui2 = -99, $idMsgBox, $idZurueck, $idbtnExit2
;_CreateGui2() ;entweder hier oder erst wenn benötigt ($idbtmToGui2 Klick)
#Region GUI1 #####################################################################################
$hGui1 = GUICreate('GUI 1', 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX),$WS_EX_TOPMOST)
;erzeugt eine GUI , das zurückgebebene Handle wird in der Variablen $hGui1 gespeichert
;die GUI hat BOXen für Mininmieren, Maximieren und ist in der Größe frei änderbar
$idbtnToGui2 = GUICtrlCreateButton('&Aufruf GUI 2', 20, 20, 100, 21)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
;verankert den Button "Aufruf Gui 2" links und oben und fixiert die Größe
;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
$idbtnICQ = GUICtrlCreateButton('&ICQ', 20, 50, 100, 21)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKLEFT + $GUI_DOCKTOP)
;verankert den Button "ICQ" links und oben und fixiert die Größe
;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
$idbtnExit1 = GUICtrlCreateButton('be&enden', 280, 225, 100, 21)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM)
;verankert den Button "beenden" links und oben und fixiert die Größe
;beim Resizen bleibt es dadurch auf seiner Position am rechten Rand
GUISetState(@SW_SHOW, $hGui1)
#EndRegion ###########################################################################################
While 1
$nMsg = GUIGetMsg(1) ;extended Modus wichtig!!
Switch $nMsg[1] ;für welches Fenster ist die Message
Case $hGui1 ;ab hier ist Gui 1 dran
Switch $nMsg[0] ;welche Message wurde ausgelöst
Case $idbtnToGui2
GUISetState(@SW_DISABLE, $hGui1) ;Gui 1 gegen Benutzereingaben sperren
If $hGui2 = -99 Then _CreateGui2() ;nur wenn noch nicht erzeugt
GUISetState(@SW_SHOW, $hGui2) ;Gui 2 anzeigen
Case $idbtnICQ
MsgBox(0, "", "Jetzt würde ICQ gestartet", 0, $hGui1)
;Run("C:\Program Files\ICQ7.0\ICQ.exe")
Case $idbtnExit1, $GUI_EVENT_CLOSE
_end()
EndSwitch
Case $hGui2 ;ab hier ist Gui 2 dran
Switch $nMsg[0] ;welche Message wurde ausgelöst
Case $idMsgBox
MsgBox(0, 'Test', 'Test', 0, $hGui2)
Case $idZurueck, $GUI_EVENT_CLOSE
GUISetState(@SW_ENABLE, $hGui1) ;Gui 1 wieder entsperren
GUISetState(@SW_HIDE, $hGui2) ;Gui 2 verstecken
Case $idbtnExit2
_end()
EndSwitch
EndSwitch
WEnd
Func _CreateGui2()
$hGui2 = GUICreate('GUI 2', 400, 280, 200, 50, -1, -1, $hGui1) ;wichtig ist der letzte Parameter
;erzeugt eine GUI als Child von Gui1, das zurückgebebene Handle wird in der Variablen $hGui2 gespeichert
$idMsgBox = GUICtrlCreateButton('&MsgBox', 20, 20, 100, 21)
$idZurueck = GUICtrlCreateButton('&Zurück zu GUI 1', 20, 50, 100, 21)
$idbtnExit2 = GUICtrlCreateButton('be&enden', 280, 250, 100, 21)
GUISetState(@SW_HIDE, $hGui2) ;Gui 2 vorerst verstecken
EndFunc ;==>_CreateGui2
Func _end()
GUIDelete($hGui2)
GUIDelete($hGui1)
Exit
EndFunc ;==>_end
Alles anzeigen
Einfach nicht mehr antworten, das wäre auch eine Lösung.
zu Tode reden posten die andere.
Ich denke er möchte in seinem Fall keinen Exitloop, sondern die Möglichkeit an einem früheren Punkt wieder einzusteigen.
Wer redet den von ExitLoop? ContiniueLoop scheint das gewünschte zu sein:
While 1
Case $Button1
Function1()
if @Error then continueloop
Function2()
if @Error then continueloop
Function3()
if @Error then continueloop
Function4()
if @Error then continueloop
Function5()
WEnd
Alles anzeigen
aber da der TE sich so stark weigert ein komplett laufbares (Demo?)-Skript einzustellen, votiere ich hiermit dafür das Them zu schliessen!
Hier zwei kleine Demoskripte:
mfg (auto)Bert
Nun ja, definiere "ähnliches".
Ich erinnere mich an ein Script (mit Dali als Bild) bei dem das Gesicht sich verändert. Es handelt sich um https://autoit.de/index.php/Atta…ave-v1-3-2-au3/ in dem ich spaßhalber Dali (aus CosinusBrothers) eingesetzt habe, läuft bei mir mit 2 FPS.
Ich habe jetzt den Code angepasst, sodass nur im gleichen Pfad geschaut wird, d.h. sollte jetzt funzen.
Bitte mal testen!
Funktioniert auf win10 x64 mit 7 FPS. Afair hast du aber schon einmal ein ähnliches mit AutoIt geschriebenes Skript eingestellt. Und da ich dem Source entnehme, das du zeitkritische Aufgaben mit Inlineassembler löst, sollte der Nachteil von AutoIt nicht so stark zum tragen kommen.
mfg (auto)Bert