Beiträge von reeky
-
-
-
OK, hast du schon einen Server, welcher dir regelmäßig neue Zitate liefern kann?
-
Wie meinst du das genau?
Variante 1:
Sollen die Zitate von einem Server abgerufen werden, welcher bereits eine Sammlung von Zitaten zur verfügung stellt?Variante 2:
Oder willst du eine kleine Datenbank (kann auch eine Textdatei sein) auf deinen Webserver speichern und dann soll ein Script automatisch immer 5 zufällige Zitate auswählen?Erkläre das bitte noch etwas genauer.
-
Ich weiß jetzt nicht genau, wo es bei dir noch genau hängt.
Ich habe dir deshalb mal deinen Code ein wenig kommentiert, vielleicht verstehst du ihn dann besser.Spoiler anzeigen
[autoit]Global $aIP[11=["192.168.2.100","192.168.2.101","192.168.2.103","192.168.2.104","192.168.2.105","192.168.2.106","192.168.2.107","192.168.2.108","192.168.2.109","192.168.2.110"]
[/autoit] [autoit][/autoit] [autoit]
Global $bAwake = True
While 1
Sleep (60000)
for $i = 0 to ubound($aIP)-1 ; Durchlaufen aller Ips
$bAwake = False
if ping($aIP[$i]) > 0 then ; IP ist vorhanden
$bAwake = True
Sleep (60000)
ExitLoop ; verlassen der for-Schleife
EndIf
nextif $bAwake = False then
[/autoit]
Sleep(60000)
ShellExecute ("restart twonky server.exe") ; Stimmt dieser Pfad?
Sleep (3000)
Shutdown(64); nach dem Aufwachen oder bei erfolgreichen Pings erstmal schlafen, bevor wieder geprüft wird, das lässt dir Zeit das Script zu beenden, sofern notwendig
EndIf
WEndWenn du noch ne Frage hast dann schieß einfach los, jeder braucht schließlich seine eigene Zeit um eine Sache zu verstehen.

-
Hallo,
ich nutze häufig die FF-UDF von Thorsten Willert.
Heute wollte ich mir wieder ein Script schreiben, wo ich die UDF verwende.
Leider liefert mir der Script nicht das gewünschte Ergebnis.Könntet ihr bitte mal nachschaue, woran das liegen kann?
Hier ist der Script (diese Seite ist im Browser bei mir geöffnet: http://ff-au3-example.thorsten-willert.de/ )
Spoiler anzeigen
[autoit]#Include <FFC.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>Opt("MustDeclareVars", 1)
[/autoit] [autoit][/autoit] [autoit]Global $sTest
[/autoit] [autoit][/autoit] [autoit]If _FFConnect() Then
[/autoit] [autoit][/autoit] [autoit]
$sTest = _FFXPath("/html/body/table/tbody/tr[2]/td/h3",9)
ConsoleWrite(@CRLF & "hier kommt ____" & $sTest & "______" & @CRLF)EndIf
[/autoit]Hier ist dann der Consolentext:
Spoiler anzeigen
Code
Alles anzeigen>Running:(3.3.8.1):C:\Program Files (x86)\AutoIt3\autoit3.exe "D:\Desktop\AutoIt v3 Script (neu).au3" _FFConnect: OS: WIN_7 WIN32_NT 7601 Service Pack 1 _FFConnect: AutoIt: 3.3.8.1 _FFConnect: FF.au3: 0.6.0.1b-3 _FFConnect: IP: 127.0.0.1 _FFConnect: Port: 4242 _FFConnect: Delay: 2ms _FFConnect: Socket: 608 _FFConnect: Browser: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0 __FFSendJavaScripts: Sending functions to FireFox .......... done __FFSend: FFau3.xpath=null;try{FFau3.xpath=FFau3.WCD.evaluate("/html/body/table/tbody/tr[2]/td/h3",FFau3.WCD,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue.9;}catch(e){'_FFXPath_Error: '+e;}; __FFSend: ; __FFRecv: hier kommt __________ __FFWaitForRepl ==> Error return value: MozRepl ....>----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Ich habe gerade meinen Fehler selbst gefunden.
Die Funktion _FFXPath verlangt 3 Parameter, ich habe den 2. ausgelassen und somit hat die Funktion die falschen Werte geliefert. -
Hallo,
ich hab jetzt alles zum laufen bekommen.
Diesen Part habe ich ersetzt und somit werden die Werte automatisch zugeordnet:
[autoit]$arrItemCoords[0] = $iEdgeX + _Min(Number($arrCsvItems[$i][2]), Number($arrCsvItems[$i][0]))
[/autoit]
$arrItemCoords[2] = $iEdgeX + _Max(Number($arrCsvItems[$i][2]), Number($arrCsvItems[$i][0]))
$arrItemCoords[1] = $iEdgeY + _Min(Number($arrCsvItems[$i][1]), Number($arrCsvItems[$i][3]))
$arrItemCoords[3] = $iEdgeY + _Max(Number($arrCsvItems[$i][1]), Number($arrCsvItems[$i][3])) -
Danke für die schnelle Antwort.
Stimmt, das ist mir gar nicht aufgefallen. Ich werde das mal schnell abändern und, den Code posten, falls alles klappt. -
Hallo,
ich verwende eine Schleife um mehrere Screenshots von verschiedenen Bildbereichen zu erstellen.
Wenn ich ca. 20 Screenshots erstelle, dann werden jedoch nicht alle Screenshots erstellt.
Ich habe schon herausgefunden, dass die Funktion _ScreenCapture_Capture einen Fehler verursacht.Hier habe ich mal den relevanten Code-Auszug:
Spoiler anzeigen
[autoit]For $i = 0 To (UBound($arrCsvItems)-1)
[/autoit] [autoit][/autoit] [autoit]; Festlegen der Eckpunkte (sortiert)
[/autoit] [autoit][/autoit] [autoit]
If $arrCsvItems[$i][0] > $arrCsvItems[$i][2] Then
$arrItemCoords[0] = $iEdgeX + $arrCsvItems[$i][2]
$arrItemCoords[2] = $iEdgeX + $arrCsvItems[$i][0]
Else
$arrItemCoords[0] = $iEdgeX + $arrCsvItems[$i][0]
$arrItemCoords[2] = $iEdgeX + $arrCsvItems[$i][2]
EndIf
If $arrCsvItems[$i][1] > $arrCsvItems[$i][3] Then
$arrItemCoords[1] = $iEdgeY + $arrCsvItems[$i][3]
$arrItemCoords[3] = $iEdgeY + $arrCsvItems[$i][1]
Else
$arrItemCoords[1] = $iEdgeY + $arrCsvItems[$i][1]
$arrItemCoords[3] = $iEdgeY + $arrCsvItems[$i][3]
EndIf; Debug
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite($i & " " & $arrItemCoords[0] & ";" & $arrItemCoords[1] & ";" & $arrItemCoords[2] & ";" & $arrItemCoords[3] & @CRLF); Screenshot 1
[/autoit]
_ScreenCapture_Capture(@ScriptDir & "\tmp\" & StringFormat("%02d", $i) & "_l.tif", _
$arrItemCoords[0], $arrItemCoords[1], $arrItemCoords[2], $arrItemCoords[3], _
False)
If @error Then
MsgBox(0,0,"Fehler bei Screenshot")
ConsoleWrite("fehler "& $i & @CRLF)
SetError(0)
EndIf
; Screenshot 2
_ScreenCapture_Capture(@ScriptDir & "\tmp\" & StringFormat("%02d", $i) & "_r.tif", _
377+$arrItemCoords[0], $arrItemCoords[1], 377+$arrItemCoords[2], $arrItemCoords[3], _
False)
If @error Then
MsgBox(0,0,"Fehler bei Screenshot")
ConsoleWrite("fehler "& $i & @CRLF)
SetError(0)
EndIf
Sleep(50)
NextIch habe auch schon versucht die Koordinaten zu sortieren. Dies habe ich getan, damit die Left- und die Top-Koordinate immer kleiner sind, als die Right- und Bottom-Koordinate. Leider hat dies den Fehler auch nicht vermieden.
Ich habe auch schon mal probiert, ob es an dem Dateityp liegt. Sowohl bei Bmp als auch bi Tif treten Fehler auf.Hier habe ich mal ein paar Ergebnisse aus der Konsole:
Spoiler anzeigen
Code
Alles anzeigen1 438;271;474;180 fehler 1 fehler 1 2 495;282;559;206 fehler 2 fehler 2 3 497;198;605;141 fehler 3 fehler 3 4 628;239;667;136 fehler 4 fehler 4 5 573;247;619;331 6 546;351;608;404 7 611;350;638;435 8 641;317;666;392 9 585;439;665;509 10 568;533;587;614 11 592;547;630;612 12 645;536;662;613 13 530;423;578;524 14 448;423;515;480 15 419;521;472;601 16 415;567;366;616 fehler 16 fehler 16 17 346;551;302;613 fehler 17 fehler 17 18 414;473;352;531 fehler 18 fehler 18 19 300;372;353;430 20 405;373;362;455 fehler 20 fehler 20 21 340;356;305;223 fehler 21 fehler 21 22 426;237;367;192 fehler 22 fehler 22 23 410;245;350;306 fehler 23 fehler 23 24 422;285;472;380 25 493;342;536;400 26 478;287;558;308 27 485;542;540;609Habt ihr eine Ahnung, woran es liegen kann, dass nicht immer alle Screenshots erstellt werden?
-
Dankeschön, so klappt es.
Vielleicht schaffe ich es sogar noch ein Makro für diese Abfolge zu schreiben.
-
ImageJ hatte ich auch schon gefunden und getestet.
In dem Programm kann ich zwar Rechtecke ziehen und diese dann ausmessen lassen. Doch leider gibt es bei den Messergebnissen keine Koordinaten für das Rechteck.
Es kann natürlich sein, dass ich diese Option nicht gefunden habe.
@AspirinJunki: Kannst du mir sagen, wie ich an die Koordinaten der aufgezogenen Rechtecke heran komme? -
Hallo,
hast du schonmal probiert einfach ein sleep mit in die schleife einzubauen. Da es ja eine Endlosschleife ist, welche erst durch gewisse Aktionen in deinem Gui beendet wird, verbraucht sie Rechenleistung. Wenn du Sleep(100) am ende in die Schleife einbaust, dann könnte das Problem behoben werden.
Was vielleicht auch hilft, wenn du mit älteren Autoit-versionen testest. -
Hallo,
Bilder möchte ich nicht weitergeben, da ich keine Berechtigung dazu habe.
Ich möchte ja nicht 2 Bildbereiche miteinander vergleichen. Ich möchte nur vergleichen, ob die Prüfsumme, welche ich in der csv-Datei hinterlegt habe, mit der auf den screen übereinstimmt.
Aber eigentlich geht es mir mehr um die Software, womit ich eine Bilddatei öffnen kann und anschließend ausmessen.
Ich benötige so ein Programm öfters mal, wenn ich z.b. keine Controls auslesen kann, dann erstelle ich einen Screenshot und anschließend entnehme ich mir die Koordinaten aus dem Screenshot. -
Ich möchte ermitteln, ob ein gewisser Bildbereich eine bestimmte Pixel-CheckSum besitzt. Wenn ja, dann sollen weitere Aktionen ausgeführt werden.
Die Bildbereiche möchte ich vorher in eine csv-Datei schreiben. Darin soll dann die CheckSum drin stehen und die 4 Koordinaten des Rechtecks.
Mithilfe eines Arrays möchte ich dann alle Bildbereiche prüfen und mit der CheckSum aus der csv-Datei vergleichen. Wenn die Prüfsumme dann abweicht, dann werden die weiteren Aktionen ausgeführt.Hierfür brauche ich das Bildanalyse-Programm, womit ich die Koordinaten ermitteln kann. Derzeit verwende ich ein Programm, jedoch ist dies nur eine Testversion und es funktioniert nicht so, wie ich mir das vorstelle. Es heißt DatInf Measure und hat die Nachteile, dass ich erstens die Daten in der Testversion nicht exportieren kann und zum anderen werden die Pixel mit Nachkommastellen angezeigt.
-
Hallo,
ich scripte recht häufig mit AutoIT und nutze oft die grafischen Analysefunktionen. Hierfür erstelle ich meistens Screenshots und analysiere diese dann mit Paint. Leider ist es oft sehr umständlich, wenn ich mehre Bereiche in dem Bild messen will.
Ich bin daher auf der Suche nach einem Programm, womit ich die erstellen Screenshots analysieren kann.
Folgendes sollte das Programm in etwa erfüllen:- öffnen von Bilddateien
- ziehen von Rechtecken
- Anzeige von Koordinaten in einer Liste
- export der Liste in csv-Datei oder ähnliches
Wenn ihr ein Programm kennt, was mehr kann, dann ist das auch ok.
Es kann englisch oder deutsch sein, sollte jedoch kostenlos sein.Kennt jemand ein solches Programm?
-
Hallo,
ich möchte ein Programm über die DOS-Kommandozeile ausführen. Im Anschluss will ich die Ergebnisse auslesen.
[autoit]
Hier ist mein Code:$iReturn = Run(@COMSPEC & ' /c Start "C:\Program Files (x86)\neeviaPDF.com\PDFtoolbox\cmdLine\CLcompr.exe" "' & $sAusgabeDatei & '" -ci jpx -cq 60 -gi jpx -gq 60 -mi jbig2 -mq 1')
[/autoit]
While 1
$sMeldungen &= StdoutRead($iReturn)
If @error Then ExitLoop
Wend
ConsoleWrite(@CRLF & $sMeldungen & @CRLF)
Leider klappt das nicht so ganz. Der öffnet mir immer die Ausgabedatei im PDF-Reader (da diese eine PDF ist).Wie kann ich das machen, dass ich das Programm mit Parametern ausführen kann und dann die Meldungen lesen kann?
-
Hallo,
pack bitte erstmal deinen Code in einen Spoiler, damit die anderen User nicht immer soweit runterscrollen müssen.
Also ich würde es so verkürzen, dass du für Quellcode, welchen du immer wieder einsetzt einfach eine separate Funktion mit Parametern schreibst.
Hier habe ich mal die Checkbox-Abfragen kurz in eine Funktion gepackt.Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; Beispiel: anstelle von Checkbox3() kannst du nun das schreiben
CheckboxAbfrage($Checkbox3, $Label3, "$Checkbox3User", $Checkbox3, 3)Func CheckboxAbfrage($varCheckbox, $varLabel, $sCheckboxUser, $sCheckboxName, $iAufgabenNr)
[/autoit] [autoit][/autoit] [autoit]
if BitAnd(GUICtrlRead($varCheckbox),$GUI_CHECKED) = $GUI_CHECKED thenIniWrite (@ScriptDir & "\db.activity","active","1","1")
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetBkColor($varCheckbox, 0x00FF00)
[/autoit] [autoit][/autoit] [autoit]
_FileWriteLog ($logpath, " * " & $Userdone & " * erledigte Aufgabe 3")
GUICtrlSetData ($varLabel, $Userdone)
IniWrite($Dataini, 'GUI Update Box', '$sCheckboxName', "1")
IniWrite($Dataini, 'GUI Update User', '$sCheckboxUser', $Userdone)sleep(2)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
FileDelete (@ScriptDir & "\db.activity")EndIf
[/autoit] [autoit][/autoit] [autoit]if BitAnd(GUICtrlRead($varCheckbox),$GUI_UNCHECKED) = $GUI_UNCHECKED then
[/autoit] [autoit][/autoit] [autoit]IniWrite (@ScriptDir & "\db.activity","active","1","1")
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetBkColor($varCheckbox, 0xFF0000)
[/autoit] [autoit][/autoit] [autoit]
_FileWriteLog ($logpath, " * " & $Userdone & " * hat Aufgabe 3 reaktiviert")
GUICtrlSetData ($varLabel, "")
IniWrite($Dataini, 'GUI Update Box', '$sCheckboxName', "0")
IniWrite($Dataini, 'GUI Update User', '$sCheckboxUser', $Userdone)sleep(2)
[/autoit] [autoit][/autoit] [autoit]
FileDelete (@ScriptDir & "\db.activity")EndIf
[/autoit]
EndFuncNoch besser wäre es, wenn du deine Checkboxen und Labels usw. einfach in einem Array speicherst. Damit hast du dann auf alle Fälle die Möglichkeit Schleifen zu durchlaufen.
[autoit]
Anstelle von:Global $Label3 = GUICtrlCreateLabel("", 248, 174, 38, 38)
[/autoit]
[autoit]
Könntest du dann einfach$Labels[3] = GUICtrlCreateLabel("", 248, 174, 38, 38)
[/autoit]
[autoit]
verwenden. Vorher natürlich noch das Array deklarieren mitGlobal $Labels[4]
[/autoit] -
Ich bins nochmal.
Ich habe ein wenige rumprobiert und dabei folgenden Code verwendet:
[autoit]$sSpeicherpfad = "C:\dies wird ein langer pfad werden\jetzt ist er zwar nich nicht so lang, aber in ein paar sekunden wird er gewachsen sein\was sollte man sonst noch darin speicher\ausser den langen namen natürlich\eines tages näherte sich der lange name dem end12"
[/autoit][autoit][/autoit][autoit][/autoit][autoit]If DirCreate($sSpeicherpfad) = 0 Then
[/autoit][autoit][/autoit][autoit]
MsgBox(64, "Fehler", "Das Erstellen des Verzeichnisses war nicht möglich." & @CRLF & $sSpeicherpfad)
Exit
EndIf; Titelinformation in separater textdatei speichern
[/autoit]
$fileHandle = FileOpen($sSpeicherpfad & "\12345678910", 1)
If $fileHandle = -1 Then
MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
Exit
Else
FileWriteLine($fileHandle, "Ich bin keine Schreibmaschine")
FileClose($fileHandle)
EndIfHierbei habe ich mich langsam von einem langen String zu einen immer kürzeren rangetastet. Dabei musste ich feststellen, dass die maximal erlaubte Pfadlänge bei der Funktion DirCreate() gleich 247 entspricht. Die Länge des Dateinamens funktionierte mit einer Länge von bis zu 11 Zeichen (+1 Zeichen -> Backslash). Insgesamt konnte ich bei FileOpen() also eine Pfadlänge inkl. Dateinamen von 259 Zeichen verwenden, ohne dass es zu Problemen bei der Ausführung kam.
Ich werde meinen Hauptscript mal umschreiben und dann nochmal berichten, ob es daran lag.
Danke Oscar für deine Hilfe, ich wäre sonst nicht darauf gekommen.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
So hat alles geklappt und ich bin super Zufrieden !

-
Das ist doch aber irrsinnig. Wenn es Windows ermöglicht einen Ordner alleine schon 244 Zeichen zu geben, dann kann doch die Länge des Pfades nicht auf 255 begrenzt sein. Dann könnte ja bei 2 Ordnern schon Schluss sein.
Ich werde trotzdem mal versuchen, ob es mit kürzeren Dateienamen auch Probleme gibt. -
Hallo zusammen,
Es gibt auch darstellbare Zeichen die in Datei- und Ordnernamen nicht vorkommen dürfen.
Diese habe ich bereits rausgefiltert. Siehe den 1. Spoiler (oben).Dein gesamter Pfad besitzt bereits 244 Zeichen. Plus die Zeichen vom Dateinamen bist Du bei 266 Zeichen und das sind zu viele (mehr als 255).
Du musst also dafür sorgen, dass der Pfad plus Dateiname immer kleiner als 256 Zeichen bleibt.
Ich habe bereits eine Überprüfung auf die Länge des Ordnernamens drin. Dabei lasse ich nur Ordnernamen zu, welche einen Dateinamen kürzer als 244 Zeichen besitzen. (habe mal getestet unter win7 64bit und die max Länge was er zugelassen hat waren 244 Zeichen)
Die 255 Zeichen sind doch für den jeweiligen Ordnernamen dachte ich und nicht für die Gesamtlänge des Pfades, oder?