Hatte einen Fehler bei _ienavigate drin, funktioniert bei mir jedenfalls nachdem ich das behoben habe:
[autoit]_ienavigate($inet,$alink[$search])
[/autoit]Hatte einen Fehler bei _ienavigate drin, funktioniert bei mir jedenfalls nachdem ich das behoben habe:
[autoit]_ienavigate($inet,$alink[$search])
[/autoit]Muss ich wohl überlesen haben...
[autoit]
;...
$search = _Arraysearch($alink,"http://cgi.ebay.de",0,0,0,1) ; findet den 1. Link in dem das suchwort vorkommt
if $search <> -1 Then ; wenn etwas gefunden wurde...
_ienavigate($inet,$alink[$search])
Else
MsgBox(0,"fehler","nix gefunden...")
EndIf
;...
Er findet aber mehr als einen... woher soll dein script nun wissen welchen du meinst. Musste halt den Suchbegriff so anpassen, dass er nur das findet was du eben haben willst. Bislang hast du nirgendwo geschrieben welcher der Links dich eigtl interessiert und was danach passieren soll. Ich gehe nun mal davon aus, dass du alle links die dem Kriterium entpsrechen nacheinander aufrufen und auf den entsprechenden Unterseiten weitere Dinge tun willst. In dem Fall arbeite eben mit Funktionen:
[autoit]
;...
$search = _ArrayFindAll($alink,"http://cgi.ebay.de",0,0,0,1) ; findet alle links in denen das suchwort vorkommt
if $search <> -1 Then ; wenn es links mit dem suchwort gibt...
for $i = 0 to UBound($search)-1
ConsoleWrite($alink[$search[$i]] & @CRLF) ; jeden gefunden link in die scite console schreiben, stattdessen einfach _ienavigate verwenden...
tuwas($alink[$search[$i]])
Next
Else
MsgBox(0,"fehler","nix gefunden...")
EndIf
;...
func tuwas($page)
_ienavigate($page)
; irgendwas auslesen, ausfüllen oder was weiss ich...
msgbox(0,"fertig",$page & " wurde abgearbeitet...")
endfunc
#include<IE.au3>
#include<Array.au3>
#include<String.au3>
#include<inet.au3>
Global $inet, $x, $links, $ie_fenster
[/autoit] [autoit][/autoit] [autoit]; Ebay Store wird geöffnet
$inet = _IECreate("http://stores.ebay.de/HANDY-TEILE-SHOP")
_IELoadWait($inet)
$links = _IELinkGetCollection($inet)
Local $x = 0, $alink[@extended]
[/autoit] [autoit][/autoit] [autoit]For $link in $links
$alink[$x] = $link.href
$x += 1
Next
_ArrayDisplay($alink) ; alle gefundenen links
$alink = _ArrayUnique($alink) ; entfernt doppelte links
_ArrayDisplay($alink) ; kontrolle
$search = _ArrayFindAll($alink,"http://cgi.ebay.de",0,0,0,1) ; findet alle links in denen das suchwort vorkommt
if $search <> -1 Then ; wenn es links mit dem suchwort gibt...
for $i = 0 to UBound($search)-1
ConsoleWrite($alink[$search[$i]] & @CRLF) ; jeden gefunden link in die scite console schreiben, stattdessen einfach _ienavigate verwenden...
Next
Else
MsgBox(0,"fehler","nix gefunden...")
EndIf
_IEQuit($inet)
Exit
Hier mal zumindestens ein Grundgerüst wie man das machen könnte:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;#include <array.au3>
global $LineCount = 1
[/autoit] [autoit][/autoit] [autoit]$gui = GUICreate("Meine GUI mit einem Edit-Feld") ; Erstellt ein GUI-Fenster welches mittig ausgerichtet wird
[/autoit] [autoit][/autoit] [autoit]$myedit = GUICtrlCreateEdit("", 176, 32, 100, $LineCount * 25, BitOR($ES_WANTRETURN, $WS_VSCROLL, $ES_AUTOVSCROLL))
;$debug = GUICtrlCreateButton("debug",10,10,100,30)
GUISetState()
[/autoit] [autoit][/autoit] [autoit]; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
While 1
$msg = GUIGetMsg()
;if $msg = $debug Then
checkEditSize()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
func checkEditSize()
$text = GUICtrlRead($myedit)
$lines = StringSplit($text,@CRLF,1)
;_ArrayDisplay($lines)
if $lines[0] <> $LineCount Then
$LineCount = $lines[0]
$curSize = ControlGetPos ( $gui, "", $myedit )
;_ArrayDisplay($curSize)
GUICtrlSetPos ( $myedit, $curSize[0], $curSize[1] , $curSize[2], $LineCount*25 )
EndIf
EndFunc
Ob Enter gedrückt wurde kannst du denke ich mit
[autoit]_ispressed
[/autoit]
abfragen, im obigen Beispiel muss der Debug Button gedrückt werden. Das Resizen passt so wohl auch noch nicht ganz, denke aber bekommst das schon in den Griff. Auf jedenfall solltest du aber wohl ein maximales Limit für die Höhe setzen...
EDIT: Debug Button funktionslos gemacht und arraydisplay auskommentiert... Abfrage ob Enter gedrückt wurde ist so eigtl. nicht notwendig
Würde mir da an deiner Stelle eher nähere Informationen zur XML API zusenden lassen: http://www.unwetterzentrale.de/uwz/webservice.html
Im Gegensatz zu diesem Abo Service scheint das auch kostenlos zu sein, steht da allerdings nicht dabei.
Vorteil ist eine besser strukturierte Datei, die leichter verarbeitet werden kann als dieser Quellcode.
Ahja, also wenn man multiple Profile verwendet hat jedes Profil eigene Addons? Das wusste ich nicht... dann werd ich das vllt bei mir auch mal so umstellen ![]()
PS: Bei der Portable muss man zunächst noch eine ini ins richtige Verzeichnis kopieren in der multiple Instanzen erlaubt sind (siehe webseite von portableapps), ausserdem darf/kann die ffstart Funktion nicht benutzt werden, sondern der Start muss per run und anschliessendem _ffconnect erfolgen. Aber die Profillösung ist natürlich sowieso die bessere Variante.
Kann so ja nicht funktionieren. Der Empfänger darf nicht an seiner Internet IP lauschen, sondern an der IP seiner Netzwerkkarte, was normalerweise ja etwas aus dem lokalen ip Bereich sein sollte (Ausnahme wäre wohl ein Server der im Rechenzentrum steht und direkt mit dieser IP erreichbar ist...).
Der Sender muss die externe IP Adresse des Empfängers nutzen.
Beispiel:
Sender (=Client):
Netzwerkkarte 1: 192.168.1.1
externe IP: 97.125.1.7
Empfänger (=Server):
Netzwerkkarte 1: 192.168.2.25
externe IP: 91.155.8.121
Sender verschickt an 91.155.8.121:1234
Empfänger lauscht an 192.168.2.25:1234
Empfänger muss ausserdem seinen Port 1234 im Router auf die lokale IP 192.168.2.25 weiterleiten (Stichwort Port Forwarding) und ggf. eingehende Verbindungen auf diesem Port in der Firewall des PC's erlauben.
hallo so sollte es klappen
Glaub du hast die Frage nicht verstanden. Er wollte wissen wie man den IE im privaten Modus startet, nicht wie ein login script ausschauen könnte.
@Topic:
Ich weiß ehrlich gesagt gerade aber nicht was der private modus im IE überhaupt bewirkt. Vielleicht kannst du das Verhalten mit
[autoit]
_iePropertySet()
nach dem Start erzwingen. Habe aber in der Hilfe nichts im speziellen zum private mode gesehen. Auch der IE start erfolgt nicht per run wenn man sich mal die ie.au3 ansieht, sondern per com Objekt. Vielleicht findest du da näheres in der MSDN Dokumentation wie man darüber den private mode realisieren kann. Ggf. müsstest du dir dann anhand der ie.au3 Vorlage eine modifizierte _iecreate Funktion schreiben.
EDIT:
Hier mal nach dem Stichwort "InternetExplorerMedium " schauen:
http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx
http://visualbasic.about.com/od/quicktips/qt/proc_html2.htm
und hier noch einige Lösungsversuche aus dem englischen Forum:
Auch wenn Progandy's Variante vielleicht im Endeffekt etwas performanter sein mag spielt die Performance hier doch aber keine Rolle, weil die Schleife permanent durch Usereingaben unterbrochen wird und wir es hier wohl nur mit sehr kleinen Arrays mit vermutlich weniger als 100 Einträgen zutun haben. Diese Methode macht höchtens Sinn wenn wir Richtung 1000+ Einträge gehen und das Befüllen automatisch ohne Unterbrechung erfolgt. Für das Beispiel hier ist die arrayadd Funktion denke ich die benutzerfreundlichste.
Hier noch eine Ergänzung um das Array nachträglich 0-basiert zu bekommen:
[autoit]
Dim $fieldarray[1]
$fieldid=InputBox("ID","Bitte gebe die erste ID ein")
While $fieldid <> ""
_ArrayAdd($fieldarray,$fieldid)
_ArrayDisplay($fieldarray,"Ganzer Array") ; Zum debuggen
$fieldid=InputBox("ID","Bitte gebe die nächste ID ein")
WEnd
_arraydelete($fieldarray,0) ; löscht index 0 und verkleinert das Array um 1
_ArrayDisplay($fieldarray,"Ganzer Array") ; Zum debuggen
Grundsätzlich stört es aber auch nicht wenn wir ein 1-basiertes Array verwenden, du musst das eben später beim auslesen berücksichtigen:
[autoit]
for $i=1 to ubound($array)-1 ; statt $i =1 eben $i = 0 wenn deine Daten 0-basiert sind
msgbox(0,"Index Nummer: " & $i,$array[$i])
next
Anstelle einer msgbox könntest du so natürlich auch edit Felder deiner gui befüllen oder dir ein lisview in einer gui füllen (array display ersatz oder sowas...).
Da du aber noch nix mit Autoit zutun hattest wird das aber wohl erstmal etwas zuviel des Guten sein.
Was ist das für ein Programm, wo kann man sich das angucken
Auch wenn du recht hast, dass es nicht unsere Aufgabe ist danach zu suchen, kurz googlen hilft...
http://vdownloader.softonic.de/screenshots
Mein erster Eindruck ist jedenfalls, dass die Hauptfunktion (Aktivität: linkinput und download button) problemlos von Au3info erkannt werden sollten. Was die suche angeht wird es möglicherweise problematisch (schaut nach einem integrierten Browser aus).
Die Frage bleibt also was du nun genau automatisieren willst. Hab mir das Teil aber jetzt nicht installiert und meine Vermutungen basieren rein auf den oben verlinkten Screenshots.
Run('C:\Programme\CAD-Station\Update.exe')
WinWait("Microsoft Visual C++ 2008 Redistributable Setup")
$text = wingettext("Microsoft Visual C++ 2008 Redistributable Setup")
if stringinstr($text,"Maintenance mode") <> 0 then
fall1()
else
fall2()
endif
;~ .... ab hier geht es gleich weiter
func fall1()
;~ Fall 1
;WinWait("Microsoft Visual C++ 2008 Redistributable Setup","Maintenance mode") ; Then <-- das gibts schonmal garnicht ohne ein if davor...
ControlClick("Microsoft Visual C++ 2008 Redistributable Setup","Maintenance mode","Button9")
ControlClick("Microsoft Visual C++ 2008 Redistributable Setup","Maintenance mode","Button7")
WinWait("Microsoft Visual C++ 2008 Redistributable Setup","Setup Complete") ; Then <-- das gibts schonmal garnicht ohne ein if davor...
ControlClick("Microsoft Visual C++ 2008 Redistributable Setup","Setup Complete","Button2")
endfunc
func fall2()
;~ Fall 2
;WinWait("Microsoft Visual C++ 2008 Redistributable Setup","Welcome to Microsoft Visual C++ 2008 Redistributable Setup")
ControlClick("Microsoft Visual C++ 2008 Redistributable Setup","Welcome to Microsoft Visual C++ 2008 Redistributable Setup","Button12")
WinWait("Microsoft Visual C++ 2008 Redistributable Setup","Setup Complete")
ControlClick("Microsoft Visual C++ 2008 Redistributable Setup","Setup Complete","Button2")
endfunc
Damit ich jeder Instanz einen seperaten Port zuweisen kann, muss ich dann x verschiedene mobile FF Versionen haben, damit ich bei jeder den MozRepl Port ändern kann.
Das war jedenfalls mein Gedanke. Also wirklich mehrere voneinander unabhängige portable ordner mit jeweils eigenem Mozrepl welche alle auf verschiedenen Ports lauschen.
Der Vorschlag beruht aber auf der Annahme, dass grundsätzlich nur eine gleichzeitige Verbindung mit mozrepl hergestellt werden kann. Das habe ich jedenfalls aus deinen connection Probs geschlossen und auch selbst hatte ich das schonmal mit 2 instanzen meines Scriptes die zeitgleich auf Mozrepl zugreifen sollten. Wirklich ausgetestet habe ich das ganze aber nie, stattdessen habe ich dafür gesorgt, dass die eine Scriptinstanz wartet bis die andere fertig ist und FF beendet wurde.
Theoretisch sollte es jedenfalls keine Komplikationen mehr geben wenn man mit zwei oder mehren unabhängigen FF Portables arbeitet.
Ob es auch möglich ist einer einzigen FF/Mozrepl Instanz eine ganze Portrange zuzuweisen um multiple connects ohne Komplikationen zu ermöglichen weiß ich nicht, das wäre dann natürlich die schönere Variante.
EDIT: Mehr als einen Port kann man offenbar nicht zuweisen, steht danach jedenfalls nur noch eine 0 im Feld...
Das Blockinput solltest du rausnehmen. Braucht man eigentlich nur wenn man mit send() oder auch mousemove() / mouseclick() arbeitet. Da du das ja nun alles schön durch control Funktionen ersetzt hast sollte kein Bedarf mehr für blockinput() bestehen.
Ich persönlich würde es als unschön erachten wenn ich ggf. minutenlang die Maus und Tastatur nicht verwenden kann. Gerade wenn dein script in den winwait Funktionen hängenbleibt könnte das ein ernstes Problem werden.
Ich würde da an deiner Stelle mit speraten portablen FF Instanzen arbeiten und dabei auch darauf achten, dass mehrere Instanzen erlaubt sind. Vorteile:
- Du kannst jeder FF & Mozrepl Instanz eigene Ports zuweisen, was deine Verbindungsprobleme beheben sollte
- Du hast seperate FF Prozesse die auch problemlos beendet werden können (normalerweis gibt es nur 1 FF Prozess mit mehreren Fenstern)
- Du kannst Updates abstellen und zumindestens für deine vorkonfigurierten Script FF Instanzen darauf vertrauen, dass sie auch in Jahren noch kompatibel zum Script sind, was beim Haupt FF den du auch zum browsen verwendest nicht empfehlenswert ist
Grundsätzlich kann man Fenster aber immer mit
[autoit]winclose()
[/autoit]schliessen. Dafür benötigst du aber einen eindeutigen Fenstertitel.
Sofern wir von einem nomalen Datei-Menü reden schau dir in der Hilfe mal das an:
[autoit]
WinMenuSelectItem(...)
Statt mit solchen Tastenkombinationen rumzumachen würde ich eher versuchen das gewünschte per control Funktionen zu erreichen. Neben controlsettext und controlclick gibt es ja noch einige weitere, die zum beispiel die Steuerung des Menüs (falls vorhanden) erlauben.
Kann man zum Beispiel so machen...
[autoit]
$name = @computername
$nameleft = stringleft($name,4)
if $nameleft = "i565" then
;...
else
$nameleft2 = stringleft($name,2)
switch $nameleft2
case "05"
;....
case "52"
;....
case else
msgbox(0,"fehler","computername ungültig....")
endswitch
endif
Direkt im Standard Include würde ich nichts ändern, da davon dann eben sämtliche Scripte betroffen wären die du zukünftig kompilierst. Aber du kannst dir das ganze als Vorlage nehmen und dir eine eigene _customArrayDisplay() Funktion daraus basteln die du dann direkt ins Script einfügst.
Kontrollier mal ob der Haken gesetzt ist und MozRepl überhaupt läuft.
[Blockierte Grafik: http://i.imgur.com/ebxhh.png]
Ansonsten könnte auch deine Firewall / Antivirenlösung den Port blocken oder aber der Port wird von anderen Programmen verwendet. In letzterem Fall mal Alternativports versuchen und FFconnect entsprechend anpassen.