Hi,
warum lässt du die Ausgabe des Kommandozeilenprogramms in der Batchdatei nicht per Umleitung ">" in eine Textdatei speichern?
Ich vermute eher den "Fehler" in der Batchdatei bzw bei der Ausgabe statt in deinem AutoIt-Script
ciao
Andy
Edit: 2er^^
Beiträge von Andy
-
-
Hallo,
Zitateine Anwendung gestartet die unter anderem auch auf das Netzwerk zugreift
da hast du doch deine "Abfrage". Wenn du auf eine Netzressource zugreifst und bei diesem Zugriff ein Fehler auftritt, dann ist das Netz wohl nicht erreichbar oder oder oder...
Einfach nur den @error abfragen oder die Rückgabe des Funktionsaufrufs auswerten. Und zwar so lange, bis du eine positive Rückmeldung bekommst.
ciao
Andy -
Hi,
Zitatich hatte einen Beitrag erstellt aber da ich die Lösung direkt nach dem Post gefunden hatte, habe ich ihn kurzerhand wieder gelöscht
Besser wäre es in Zukunft die Lösung zu posten, damit jemand bei einer Suche zu diesem Thema mehr findet wie einen gelöschten Beitrag
ciao
Andy -
Zitat
Erkennt jemand den Fehler?
Ja!^^
[autoit]$Anzahl = UBound($avArray) - 1
[/autoit]Arrays sind idR. nullbasiert. D.h daß der erste Index des Arrays Null ist.
[autoit]
Klick mal auf dasUBound
[/autoit]und schau in der Hilfe unter Bemerkungen.
[autoit]
Dann wird auch klar, warum einDim $Array[1] ;ein Array mit nur einem Feld, beim Dimensionieren!!! die Anzahl der Dimensionen angeben
[/autoit]
$Array[0]="Inhalt" ; beim Füllen und Abfragen ist der Index!!! maßgeblich
$Array[1]="Inhalt2" ;Fehlermeldung, da $array[1] nicht existiert -
Hi,
was ist denn der Unterschied zwischen der Struktur und dem Array? Bis auf die "zwangsweise integrierte Variablendeklaration" (ja, das ist allerdings ein Vorteil^^) ist doch sowohl das Handling als auch der Schreibaufwand identisch?! Sowohl beim Füllen als auch bei der Abfrage. Gibt es signifikante Geschwindigkeitsunterschiede?Zitatdas relationale Datenbankmodell
Dasselbe in grün?!
-
Zitat
da brauche ein eine prog das in einer min sagt das alles funzt bzw eins nicht funzt.
Also wenn ich das jetzt richtig verstanden habe, dann suchst du ein Script, daß nach einer automatischen Installation überprüft, ob das installierte Programm fehlerfrei funktioniert? Sorry, aber mit dem Hintergrund, daß
Zitat"meine Mitarbeiter" ein gutes Prog gebaut hat das richtig installiert.
ist das m.E. der völlig falsche Ansatz!
Wenn jemand nachvollziehbar Fehler macht, dann müssen diese Fehler an der Ursache beseitigt werden. Im Klartext heißt das, wenn dein "Mitarbeiter" nicht in der Lage ist, ein Installationsscript zu schreiben, welches eventuelle Fehler während der Installation abfängt, dann wäre es ggf. sinnvoll, diese Aufgabe einem kompetenteren Teammitglied zu übertragen...
Wenn das aber nicht gewünscht ist (oder machbar ist) dann mach doch eine Anfrage in der Job-Börse hier im Forum, Geld sollte keine Rolle spielen, wenn in eurem Unternehmen mehrere Leute involviert sind
, dennZitatEin Kollege von mir solll das jetzt auch machen, ist also kein Einzelfall!
ciao
Andy -
Hallo Stefan,
habe eine Mail bekommen, daß du noch ein Problem hast, aber dein Beitrag hier ist weg^^ZitatAus
[autoit]ControlClick("Titel","","[CLASS:WindowsForms10.BUTTON.app.0.12ab327; INSTANCE:3]")
[/autoit]
[autoit]
sollControlClick("Titel","","[CLASS:WindowsForms10.BUTTON.$appnr; INSTANCE:3]")
[/autoit]werden.
[autoit]
naja, ich antworte mal, du warst aber schon auf dem richtigen Dampfer^^ControlClick("Titel","","[CLASS:WindowsForms10.BUTTON."&$appnr&"; INSTANCE:3]")
[/autoit]
so? -
..oder so...
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ScreenCapture.au3>
#include <Array.au3>
#include <String.au3>
ToolTip("Screenshot Aufruf mit F10", 30, 30)dim $array[1]
[/autoit] [autoit][/autoit] [autoit]
local $maxnumber=0
$filename="Screenshot"
$ext=".jpg"
$search=$filename&"*"&$ext
$hfile=FileFindFirstFile($search) ;datei mit "screenshot" suchen
if not @error and $hfile<>-1 then ;wenn es diese Datei gibt
While 1
$file = FileFindNextFile($hfile) ;Dateinamen holen
If @error Then ExitLoop ;gibt keine Dateien mehr im verzeichnis
$filenumber=_stringbetween($file,$filename,$ext) ;nummer aus dem filenamen holen
if number($filenumber[0])>$maxnumber then $maxnumber=number($filenumber[0]) ;grösste nummer merken
WEnd
endif
$maxnumber+=1 ;eins erhöhen;If FileExists(@scriptdir&"\Screenshot.jpg") Then Exit
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("{F10}", "start1")
While 1
sleep (50)
WEndFunc start1()
[/autoit]
HotKeySet("{F10}")
Opt("MustDeclareVars", 1)
Global $hBitmap, $hImage, $hGraphic, $hFamily, $hFont, $tLayout, $hFormat, $aInfo, $hBrush1, $hBrush2, $iWidth, $iHeight, $hPen
Global $sString=" Created with AutoIt "
_GDIPlus_StartUp()
$hBitmap = _ScreenCapture_Capture(@scriptdir & "\"&$filename&$maxnumber&$ext)
$hImage = _GDIPlus_ImageLoadFromFile(@scriptdir & "\"&$filename&$maxnumber&$ext)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage)
$hFamily = _GDIPlus_FontFamilyCreate("Arial")
$hFont = _GDIPlus_FontCreate($hFamily, 16, 1)
$tLayout = _GDIPlus_RectFCreate(0, 0)
$hFormat = _GDIPlus_StringFormatCreate(2)
$hBrush1 = _GDIPlus_BrushCreateSolid(0xA2FFFFFF)
$hBrush2 = _GDIPlus_BrushCreateSolid(0xC4FF0000)
$hPen = _GDIPlus_PenCreate(0xC4000000, 2)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $sString, $hFont, $tLayout, $hFormat)
$iWidth = DllStructGetData($aInfo[0], "Width" )
$iHeight = DllStructGetData($aInfo[0], "Height")
_GDIPlus_ImageSaveToFile($hImage, @scriptdir & "\"&$filename&$maxnumber&$ext)
_GDIPlus_PenDispose ($hPen )
_GDIPlus_BrushDispose ($hBrush1 )
_GDIPlus_BrushDispose ($hBrush2 )
_GDIPlus_StringFormatDispose($hFormat )
_GDIPlus_FontDispose ($hFont )
_GDIPlus_FontFamilyDispose ($hFamily )
_GDIPlus_GraphicsDispose ($hGraphic)
_GDIPlus_ImageDispose ($hImage )
_GDIPlus_ShutDown()
ShellExecute(@scriptdir&"\"&$filename&$maxnumber&$ext)
HotKeySet("{F10}", "start1")
EndFunc -
Habe mal bissl gestöbert und rausgefunden, daß etliche Regex-Parser das NUL-Byte als End of String ansehen....
Es liegt also nicht am Pattern, sondern am zu überprüfenden String.
Bsp:Spoiler anzeigen
[autoit];chr(8) vor der NUL, chr(9) dahinter
[/autoit] [autoit][/autoit] [autoit]
$bin_data=chr(193)&chr(8)&chr(0)&chr(9)&chr(127)$pos=stringregexp($bin_data,"\x8",1) ;findet char
[/autoit] [autoit][/autoit] [autoit]
if @error then
msgbox (0,"error regex",@error&@crlf&@extended)
else
msgbox (0,"Suchstring gefunden",0)
endif$pos=stringregexp($bin_data,"\x9",1) ;findet char nicht, da "hinter" dem nul-byte
[/autoit]
if @error then
msgbox (0,"error regex",@error&@crlf&@extended)
else
msgbox (0,"Suchstring gefunden",0)
endif
Die "normalen" Stringfunktionen sind hiervon nicht betroffen, d.h. stringinstr() funktioniert in binaries einwandfrei... -
Hallo,
habe mal wieder ein Problemchen mit Regex-Suche in Binärdateien. Es geht eigentlich nur um das Vorhandensein einer x-beliebigen Zeichenfolge in dieser Datei.
In der Hilfe habe ich die Steuerzeichen \Q und \E gefunden, alles was dort dazwischen steht, wird (so wie ich das verstehe) als "normaler" String verwendet, z.B. ein im Suchstring enthaltenes [ würde NICHT als Anfang eines Sets interpretiert, sondern als ganz normales Zeichen.
Nun habe ich zwei kleine Beispiele, in dem einen wird der Suchstring gefunden, in dem anderen nicht.Spoiler anzeigen
[autoit]$bin_data=chr(193)&chr(1)&chr(16)&chr(65)&chr(127)
[/autoit] [autoit][/autoit] [autoit]
$searchstring=chr(1)&chr(16)&chr(65)$pos=stringregexp($bin_data,"(?-i)(\Q"&$searchstring&"\E)",1) ;findet den string
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
if @error then
msgbox (0,"error regex",@error&@crlf&@extended)
else
msgbox (0,"Suchstring gefunden",0)
endif;chr(1) durch chr(0) ersetzt
[/autoit] [autoit][/autoit] [autoit]
$bin_data=chr(193)&chr(0)&chr(16)&chr(65)&chr(127)
$searchstring=chr(0)&chr(16)&chr(65)$pos=stringregexp($bin_data,"(?-i)(\Q"&$searchstring&"\E)",1) ;findet string nicht
[/autoit]
if @error then
msgbox (0,"error regex",@error&@crlf&@extended)
else
msgbox (0,"Suchstring gefunden",0)
endif
zzt stehe ich auf dem Schlauch....ciao
Andy -
Zitat
Ansonsten gilt wirklich viel lesen welche Hardware kompatibel zueinander ist
Da die Dokumentation der Hardwareentwicklung immer hinterherhinkt oder Features beschrieben sind, die so nie in die Hardware integriert wurden, würde ich diesen Satz so nicht unterschreiben wollen.
Es gibt Leute, die sind völlig begeistert, wenn sie nach 58 Stunden gebastel und Treibersuche den Startbildschirm von Windows sehen. Das sind aber auch genau die, welche beim Online-Zocken im TS über "plötzliche" schwarze Screens und Grafikfehler berichten, einmal pro Woche den Rechner komplett neu aufsetzen, weil "nichts mehr richtig geht" und die einschlägigen Foren mit Hilfethreads zuspammen.
Ein Handy mit diesen "Macken" würden diese Leute völlig entrüstet dem Händler an den Kopf schmeissen, aber bei "selbst(zusammen)gebauten" Rechnern gehört das wohl schon zum guten Ton. Ja, bei einem mangelhaften Handy kann man sich auch auf Gewährleistung oder ggf auch Garantie beziehen, aber versuche mal z.B. ein Mainboard umzutauschen, weil dieses im Zusammenspiel mit irgendwelchen anderen Komponenten ab und zu Aussetzer hat.....
Daher gerade als "Bastelanfänger" die Rechnerkomponenten zusammenstellen und diese dann bei einem der rennomierten Kistenschrauber zusammenbauen lassen. Die sollen auch ein BS draufspielen, sch*** auf die 20 Euro dafür! Wenn die Kiste irgendwann muckt, abholen lassen, der Paketdienst bringt auf dem Weg gleich noch einen Ersatzrechner mit, und weiterarbeiten....
Ich habe schon nächtelang mit Lötkolben und Fädeldraht über irgendwelchen Controllerkarten gebrütet damit diese Dinger funktionierten, und muss ehrlich sagen, verschwendete Zeit. Da hätte man wirklich besseres machen können^^
Daher mein Rat: Kompletten Rechner kaufen! Dann musst du dir auch keine Gedanken z.B. darüber machen....ZitatBei Sockel AM3 unbedingt auf QVL des Mainboard-Herstellers oder des RAM-Herstellers achten !
ciao
Andy -
Hi,
sag blos du willst von uns wissen wie man Mailadressen und Passwörter von Webseiten ausliest^^
Ich denk mal das war ein Witz
Wenn du das Script dazu benutzen willst, um dich dort einzuloggen, dann ist das etwas anderes, oder soll das etwa ein automatischer "Login-Tester" werden?
Mail und Passwort eingeben, und das Script gibt zurück, ob das Login geklappt hat?
Bin konfus...
ciao
Andy -
Zitat
was die meisten Taschenrechner nicht können
Wenn du jetzt noch die Anzahl der Dezimalstellen korrigierst, dann ruf ich morgen bei HP an und lass die Funktion posthum ins ROM vom 48e patchen
Btw. für den HP48E gabs mal nen tollen Emulator für meinen Nokia Communicator 9210....wenn einem das damals einer gesagt hätte, daß mal nen Taschenrechner im Emulator auf nem Telefon läuft, dann wäre ich bei der umgekehrt polnischen Notation nicht so verzweifelt^^ -
Hi,
passt dazu^^Spoiler anzeigen
[autoit];binary2ascii
[/autoit] [autoit][/autoit] [autoit]
$a = "010011000011000001100011001101000110110001101000001100000111001101010100"
$b = "010001110110010101100010011101010111001001110100011100110111010001100001011001110"
$c = "www.autoit.de"MsgBox(0, $a, bin2ascii($a))
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, $b, bin2ascii($b))
MsgBox(0, $c, ascii2bin($c))
ExitFunc bin2ascii($bin_string)
[/autoit] [autoit][/autoit] [autoit]
$step = 8 ;8-Bit ASCII Buchstaben
$ascii_string = "" ;Rückgabestring
For $f = 1 To StringLen($bin_string) Step $step ;string von Vorne nach hinten 8-bitweise durchsuchen
$t = StringMid($bin_string, $f, $step) ; 8-Bit-Wort, ein ASCII-Buchstabe
$bin = 0 ;startwert für
For $i = 1 To $step ;jedes Bit suchen
If StringMid($t, $i, 1) = "1" Then $bin += (2 ^ ($step - $i)) ;wenn Bit=1 dann binärzahl=binärzahl+2^(8-Bitposition)
Next
$ascii_string &= Chr($bin)
Next
Return $ascii_string
EndFunc ;==>bin2asciifunc ascii2bin($ascii_string)
[/autoit]
$step=8 ;8-Bit ASCII Buchstaben
$bin_string=""
for $t=1 to stringlen($ascii_string) ;jeden Buchstaben im String
$asciicode=asc(stringmid($ascii_string,$t,1)) ;in asciicode umwandeln
for $i=7 to 0 step -1 ;asciicode in bits
if bitand($asciicode,2^$i) then
$bin_string&="1"
else
$bin_string&="0"
endif
next
next
return $bin_string
endfuncBugFix
daß du die schweißtreibende Arbeit anderer Leute immer so niedermachen musst
ciao
Andy -
Hallo,
ZitatHallo habe mal ne gui erstellt
Sehr schön! Wenn du das Script dieser Gui postest, dann lassen sich die Probleme/Fehler/Anmerkungen/Vorschläge wesentlich einfacher feststellen...
ciao
Andy -
Hallo,
[autoit]
In deinem Script wurde immer nur der erste Servername gespeichert, mitCase $line = ("Mailserver")
[/autoit]
; Ermittelt den Itemtext und schreibt diesen in die Variable $Mailanswer
_GUICtrlComboBoxEx_GetItemText($Combo1,_GUICtrlComboBoxEx_GetCurSel($combo1), $mailanswer)
$line = ("Mailserver=" & $mailanswer)
FileWriteLine($fileNew, $line)wird der aus der Combobox angewählte in die INI geschrieben.
ciao
Andy -
Hallo,
in einem Thread zu einem ähnlichen Problem meinte Peethebee, daß die 32-Bit-Versionen von AutoIt nicht die 64-Bit dll´s laden könnten.
Aber mal eine Frage
(ich will ja nicht dumm sterben)
Würde ein 32-Bit-Kompilat ( komplett auf einem 32-Bitsystem kompiliert) generell nicht funktionieren? Vista64 führt doch m.E. 32-Bitcode aus, oder etwa nicht?
ciao
Andy -
Hi,
das Script schreibt eine Batchdatei und führt sie nachher aus. Das ist alles.
Man könnte das Script gewaltig kürzen, aber das ist eine andere Sache.
ciao
Andy -
Hallo,
ZitatMit deiner Aussagt ist das Thema beendet ohne gelöst zu sein, ich selbst merke immer wieder das hier im Forum oft so verfahren wird
Was soll uns das jetzt sagen? Wir sollen uns um eine Lösung bemühen weil dein Ansatz so nicht funktioniert?
Hast du dir auch nur ansatzweise mal überlegt was du überhaupt machen möchtest und was das in einem MODEREN Betriebssystem incl. der Hardware (Netzlaufwerke) bedeutet?
Wirklich SICHER Daten zu überschreiben heisst, vollen Zugriff auf die Speicherzellen (Sektoren) deines Datenträgers zu haben. Vorbei an allem, was heutzutage Dateien vor dem Schreiben puffert (incl. Festplattenelektronik, Treiber, Caches uswusf...)
Wie Peethebee schon geschrieben hat, alles andere als einfach.
Mit diesem Thema wird in der Industrie RICHTIG Geld verdient, glaubst du man bastelt dafür ein Programm in einigen Minuten mit einer Scriptsprache?
Viel Spass bei z.B. Flash-Speicher (USB-Sicks usw), dort verteilt ein interner Controller die Zugriffe gleichmäßig über die NAND-Speicherchips, da jede einzelne Speicherzelle nur einige hunderttausend Löschzyklen verträgt. Oder muss es SOOO sicher garnicht sein?ciao
Andy -
Hallo,
sehr schönes Projekt zum Üben und Einsteigen!Zunächst würde ich mir Gedanken über den eigentlichen Programmablauf machen, d.h. wie soll der Benutzer das Programm verwenden. Du hast ja selbst gesehen, daß mit den vielen Messageboxen kein "flüssiges" lernen zu machen ist.
Beim Lernen sehr wichtig ist ein Belohnungssystem, also etwas ähnliches wie eine Highscoreliste sollte auch dabei sein, ggf. auch verschiedene "Wettbewerbe", die meisten Vokabeln in 2 Minuten, oder die meisten richtigen Antworten in Folge usw.Danach geht es um das "einfache Nachfüllen" der Vokabeln und Übersetzungen. Ggf gibt es ja "online" irgendwo im Netz schon Vokabellisten zu Deinem Thema, die du dann nur noch in deine Liste aufnehmen musst. Da wären wir schon bei der Liste, ich würde die Vokabeln in eine oder mehrere Dateien aufteilen.
Um die Vokabeln in die Dateien reinzubekommen, sollte in Deinem Vokabeltrainer auch ein Eingabe-Modul dafür vorgesehen sein.Das ist schon mal viel Stoff für einen Anfänger^^
Nun die Zusammenfassung, jeweils Frage und Lösung, ganz zum Schluss kommt dann die Programm-Syntax (die Befehle in AutoIt)
Wie soll das Programm funktionieren?
- Programm starten
- Programm liest Vokabel und Übersetzung aus einer Datei
- Programm fragt ab, ob Vokabel oder Übersetzung gelernt werden soll (oder legt das zufällig fest^^ )
- Programm zeigt je nach Auswahl die Vokabel oder Übersetzung
- Eingabe der Antwort
- Programm vergleicht Antwort mit "richtiger" Antwort aus der Datei
- Wenn Antwort richtig, dann gibts Belohnungspunkte
- wenn Antwort falsch, dann richtige Lösung zeigen
- nächstes Vokabelpaar aus der Datei lesen
- solange weitermachen bis keine Vokabeln mehr in der Datei sind oder der User das Programm abbrichtSo, das ist der ungefähre Ablauf, und nun die Syntax.
[autoit]
Ich schreibe dir kein vollständiges Script auf sondern nur AutoIt-Funktionen. Schau mal in der Hilfe nach, einfach nur auf den Funktionsnamen klicken in deinem Browser. Wenn du Scite nutzt, dann den Mauscursor dort auf den Funktionsnamen setzen und F1 drücken.fileopen() fileread() filereadline() fileclose() ;Dateien öffnen und Daten lesen
[/autoit]
For To Next ;Schleife um Funktionen zu wiederholen
Do Until ;Schleife um Funktionen zu wiederholen
While Wend ;Schleife um Funktionen zu wiederholen
So, das sollte reichen fürs erste^^Du siehst, die Schleife ist wichtig, damit du nur EINMAL im Programmablauf eine Abfrage und eine Ausgabe hast.
Dann wird dein Programm wesentlich kürzer...ca 10-20 Zeilen sollten reichen....ciao
Andy