Schonmal die Hilfe zu shellexecute gelesen? Dann sollte klar sein, dass bei shellexecute die Programmparameter im 2. Funktionsparameter übergeben werden. Alternativ kann auch run() benutzt werden, hier müssen die Programmparameter wie in deinem Beispiel übergeben werden.
Beiträge von misterspeed
-
-
Du hast zwar nicht wirklich geschrieben wofür du das brauchst und wo deine lange Zahl herkommt (eigtl sollte die sowieso als String vorliegen, denn Autoit selbst erzeugt keine integer die das Maximum überschreiten), aber du kannst auch mal nach der bignum.au3 suchen, vielleicht löst die ja dein Problem.
-
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Global $1
[/autoit] [autoit][/autoit] [autoit]
Global $intervall$Form1 = GUICreate("Form1", 681, 208, 663, 194)
[/autoit] [autoit][/autoit] [autoit]
$Pages = GUICtrlCreateButton("Blättern", 24, 24, 219, 169)
$Button1 = GUICtrlCreateButton("Text 1", 312, 24, 75, 25)
$Button2 = GUICtrlCreateButton("Text 2", 312, 56, 75, 25)
$Button3 = GUICtrlCreateButton("Text 3", 312, 88, 75, 25)GUICtrlSetState($Button1, $GUI_DISABLE)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Button2, $GUI_DISABLE)
GUICtrlSetState($Button3, $GUI_DISABLE)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Pages ; Seiten werden durchgeblättert
$1 = 0
GUICtrlSetState($Pages, $GUI_DISABLE)
GUICtrlSetState($Button1, $GUI_Enable)
GUICtrlSetState($Button2, $GUI_Enable)
GUICtrlSetState($Button3, $GUI_Enable)
for $j=1 to 3 ; solange bis alle 3 Buttons gedrückt wurden
$intervall = TimerInit()
Do
if TimerDiff($intervall)>=1000 Or $1=0 Then Anzeigen() ; nur einmal pro Sekunde
$abort = GUIGetMsg()
Until $abort=$Button1 or $abort=$Button2 or $abort=$Button3GUICtrlSetState($abort, $GUI_DISABLE) ; gedrückten Button deaktivieren
[/autoit] [autoit][/autoit] [autoit]
if $abort = $Button1 Then Button1()
if $abort = $Button2 Then Button2()
if $abort = $Button3 Then Button3()
Next
ToolTip("") ; fertig
GUICtrlSetState($Pages, $GUI_Enable)
EndSwitch
WEndFunc Anzeigen()
[/autoit] [autoit][/autoit] [autoit]
$1 +=1
ToolTip($1,600,300,$1)
$intervall = TimerInit()
EndFuncFunc Button1()
[/autoit] [autoit][/autoit] [autoit]
Msgbox(0,"","Code Button 1")
EndFuncFunc Button2()
[/autoit] [autoit][/autoit] [autoit]
Msgbox(0,"","Code Button 2")
EndFuncFunc Button3()
[/autoit]
Msgbox(0,"","Code Button 3")
EndFunc -
Am einfachsten kann man dir helfen wenn du mal eine alte und eine neue dieser Log Dateien als Dateianhang hier postest (packs in ne zip Datei). Was den Rest angeht stimme ich allen anderen hier zu. Benutz die ftp Funktionen der ftpex.au3, lad dir das alte log als oldhtml runter, mach deinen Datenabgleich, erzeuge die neue Datei, und lade die neue Datei dann hoch und überschreib dir das alte log auf dem FTP. Beim Datenabgleich liest du am besten beide Dateien in jeweils ein Array mit
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <file.au3>
dim $aOld
dim $aPC
_filereadtoarray("dateipfad1",$aOld)
_filereadtoarray("dateipfad2",$aPC)$aNew = vergleich($aOld,$aPC)
[/autoit][autoit][/autoit][autoit]
_filewritefromarray("dateipfad3",$aNew); siehe Hilfe; und dann noch den ftp upload der neuen Datei (dateipfad3) die wir lokal gespeichert haben...
[/autoit][autoit][/autoit][autoit][/autoit][autoit]func vergleich($aOld,$aNew)
[/autoit][autoit][/autoit][autoit];... hier vermutlich ne for Schleife welche die Arrays durchgeht
[/autoit][autoit][/autoit][autoit]
;... dazu müssten dann die Arraygrößen noch berücksichtigt werden
;... und es muss ein drittes Array $Ergebnis mit passender Größe angelegt werden (redim wird evtl benötigt, siehe Hilfe)return $ergebnis
[/autoit][autoit][/autoit][autoit][/autoit]
endFuncSofern die HTML Datei brauchbare Zeilenumbrüche hat biste damit schon fast am Ziel. Du musst dann nur noch jeden Eintrag beider Arrays auf Gleichheit prüfen und die Arrays dann ab dem Index zusammenfügen wo es Unterschiede gibt. Genaueres kann man aber ohne Beispieldateien schlecht sagen.
-
Wer Paranoid oder eher vorsichtig ist sollte aber wie bereits erwähnt wurde darauf verzichten Admin Passwörter auf Clientrechnern zu speichern, sei es nun im Klartext wie ursprünglich oder auch kompiliert. Beides kann ausgelesen werden und birgt Risiken.
Die bessere Lösung wäre auf dem Zielsystem einen Serverdienst einzurichten der Kommandos von Clienten annimmt und dann lokal als Admin ode System die Aktion auf dem Server ausführt. So wäre das Passwort nur auf dem Server gespeichert und von Ausserhalb nicht auslesbar.Hierzu sollte man sich dann am besten mit den TCP Funktionen befassen. Alternativ kann man aber auch mit eventtriggern arbeiten.
Der Aufbau könnte dann so aussehen:
Remotecomputer:
Useraccount ohne nennenswerte Rechte anlegen
Aufgabenplannung->Aufgabe anlegen die bei bestimmter TriggerId mit Admin Privilegien ausgeführt wirdClientcomputer
Trigger remote auslösen, dazu werden Passwort und Username des eingeschränkten Users benötigt und im Script gespeichert
Infos zu Eventcreate:
http://technet.microsoft.com/en-us/library/bb490899.aspxVorteil zur aktuellen Lösung ist, dass sich auf den Clients keine Accountdaten befinden mit dennen man Schaden anrichten könnte. Desweiteren gestalten sich Updates leichter, da hierzu nicht auf jedem Client eine aktuelle Version des Scriptes vorhanden sein muss, sondern lediglich auf dem Server die Aufgabe zur gewählten TriggerID geändert werden muss.
-
Eine Lösung die in kompilierten und nicht kompilierten Zustand funktioniert habe ich erst gestern hier gepostet:
https://autoit.de/index.php?page…6122#post236122
Die Frage ist aber wozu sich das Programm neustarten soll. Du kannst das sicher auch ohne Neustart bewerkstelligen, poste doch mal dein Script.
-
Wie wäre es wenn dein Hotkey das Programm neustartet anstatt die aktuelle Funktion zu verlassen? Das würde dann auch funktionieren wenn sich das Programm in einer verschachtelten Funktionsstruktur befindet.
Hier ein Beispiel:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("{ESC}", "Terminate")
HotKeySet("!d", "main")
MsgBox(0,"","neue instanz")While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc main()
[/autoit]
TrayTip("Welcome","main started",10000)
While 1
ConsoleWrite("-----------------" & @CRLF)
submain1()
submain2()
Sleep(100)
WEnd
EndFunc
Func submain1()
for $i=1 to 5
ConsoleWrite("submain1" & @CRLF)
Next
EndFunc
Func submain2()
for $i=1 to 5
ConsoleWrite("submain2" & @CRLF)
Next
ConsoleWrite("submain2-sleep" & @CRLF)
Sleep(3000)
EndFunc
Func Terminate()
MsgBox(0,"","scriptrestart")
if @Compiled then
ConsoleWrite("compiled: " & '"' & @AutoItExe & '"' & @CRLF)
Run('"' & @AutoItExe & '"') ; startet weitere instanz des kompilierten scripts
Else
ConsoleWrite("not compiled: " & '"' & @AutoItExe & '" "' & @ScriptFullPath & '"' & @CRLF)
Run('"' & @AutoItExe & '" "' & @ScriptFullPath & '"') ; startet weitere instanz des nicht kompilierten scripts
EndIf
Exit ; beendet aktuelle instanz
EndFunc -
FF 7 wurde ohnehin wegen Problemen mit Addons mehr oder weniger zurückgezogen (Auto Update...): http://www.heise.de/newsticker/mel…en-1351616.html
Aber probiers halt einfach aus, gibt schliesslich portable Versionen wenn man mal eben schnell die aktuelle Version testen will ohne komplett umzusteigen: http://portableapps.com/apps/internet/firefox_portableDie MozRepl Beta soll jedenfalls bis Version 8 funktionieren: https://addons.mozilla.org/en-US/firefox/…ersion-1.1beta2
-
Na das ging aus deinem Posting aber nicht wirklich hervor.
[autoit]
Den aktiven Tab wählt man mit_FFTabSetSelected
[/autoit]Entweder per Index falls dieser bekannt ist oder per Label (siehe Hilfe Datei der ff.au3). Sollte weder das eine noch das andere bekannt sein könntest du auch alle Tabs durchgehen und dir die aktuelle URL auslesen um dann letzten Endes den richtigen zu finden.
[autoit]
[/autoit]
$tabcount = _FFGetLength("tabs")
for $i=0 to $tabcount-1
_FFTabSetSelected($i)
if StringInStr(_FF_GetCurrentURL(),"DE0008404005") then exitloop
next -
[autoit]
[/autoit]
_FFTabAdd()
_ffopenurl("http://www.boerse.de/wertpapier/DE0008404005")
_ffloadwait()
$name = _FFXPath("//*[@id='content_container']/div[1]/h1", "textContent")
MsgBox(0, "", $name)So funktioniert es bei mir relativ oft, jedoch kommt manchmal eine 1 zurück anstelle von "Allianz". Das passiert so wie ich das beobachtet habe nur wenn ein bestimmtes Werbepopup geladen werden soll bzw. von FF geblockt wird. Die verschiedenen Werbeanbieter scheinen dort zu rotieren, so dass der falsche return Wert alle paar Versuche erscheint. Jedenfalls eine Verbesserung zu deinem Versuch, da habe ich grundsätzlich eine 0 zurück bekommen.
-
Ahja auf die 64bit Sache wäre ich wohl nicht gekommen. Danke für den Hinweis. Hier ein etwas unschöner workaround der nur mit sichtbarem IE Fenster funktioniert:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <IE.au3>HotKeySet("{F5}","_start")
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("{F6}","_exit")$IEObj = _IECreate("http://translate.google.de/?hl=de#de|it|")
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc _start()
[/autoit] [autoit][/autoit] [autoit]
$source = _IEGetObjById($IEObj,"source")
_IEFormElementSetValue($source,"test")$buttonSubmit = _IEGetObjById($IEObj,"gt-submit")
[/autoit] [autoit][/autoit] [autoit]
_IEAction($buttonSubmit,"click")
_IELoadWait($IEObj)$button = _IEGetObjById($IEObj,"gt-res-listen")
[/autoit] [autoit][/autoit] [autoit]$x=_IEPropertyGet($button, "screenx")
[/autoit] [autoit][/autoit] [autoit]
$y=_IEPropertyGet($button, "screeny")
MouseClick("",$x+5,$y+5,1,1)
;_IEAction($button,"click")
EndFuncFunc _exit()
[/autoit]
Exit
EndFunc -
Dürfte wohl ein Problem mit den Sicherheitseinstellungen und dem Flash Plugin sein. Jedenfalls fehlen bei mir die Buttons zum Anhören des Textes und mir wird oben auch eine Leiste eingeblendet um den Adobe Flash Player zu installieren. Startet man den IE von Hand sind die Buttons vorhanden und auch das Flash Plugin verrichtet seinen dienst. Warum Flash nicht zur Verfügung steht wenn man per Autoit mit einem IE Objekt arbeitet weiss ich nicht...
Der Rest des Scriptes funktioniert aber btw im IE8 bei mir fehlerfrei.
-
Ersetz einfach die if Bedingung in Zeile 13:
[autoit]If $teile[0] = 1 Then ; string wurde nicht gesplittet, weil keine punkte im string vorkommen...
[/autoit] -
Ich hab das Problem, dass ich keinen Quellcode sehe... woran könnte das liegen?

-
Hmmm. einen Style gibt es dafür nicht...
Klar gibt es einen Style der das Problem umgeht. Wie bereits erwähnt wurde klappt das Dropdown nur dann nach oben auf wenn es höher wird als die Desktop Auflösung nach unten noch hergibt. Damit sowas nicht passiert setzt man einfach die Höhe auf einen festen maximal Wert (der innerhalb der GUI liegt) und schält die automatische Höhe mit $CBS_NOINTEGRALHEIGHT ab. Dazu dann natürlich noch eine vertikale Scrollbar mit $WS_VSCROLL
[autoit]
[/autoit]
; $CBS_NOINTEGRALHEIGHT --> deaktiviert automatische Höhen Anpassung
$Airlines = GUICtrlCreateCombo("", 290, 185, 250, 160, BitOR($CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL,$CBS_SORT,$WS_BORDER,$WS_VSCROLL,$CBS_NOINTEGRALHEIGHT), BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE)) -
So ist es. Die Funktionen, seien es nun Standard oder auch UDF kann man wohl recht leicht portieren, gibt schliesslich in jeder Sprache Funktionen die vergleichbares tun. Das Hauptproblem werden die Variablen sein, da es in autoit eben keine fixen Datentypen gibt. Versuch mal sowas automatisiert in C zu portieren:
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <array.au3>$test=test()
[/autoit][autoit][/autoit][autoit]
_ArrayDisplay($test)Func test()
[/autoit]
$test = 123
$test += 10
$test &= "test"
Local $test2[3]=[$test,2,3]
$test=$test2
return $test
EndFuncErst ist $test ein int, danach plötzlich ein string bzw. eine kette aus chars und später dann wird $test durch eine simple Wertzuweisung zum Array das strings und int enthält. Dürfte wohl äusserst schwer werden solche sachen abzufangen. Auch die GUI Konvertierung ist sicher nicht ganz so simpel.
-
Hab mein Beispiel mal noch erweitert, aber hast deinen Fehler ja mittlerweile selbst gefunden:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <array.au3>
#include <GuiTab.au3>Global $oIE[4]
[/autoit] [autoit][/autoit] [autoit]$oIE[1] = _IECreateEmbedded()
[/autoit] [autoit][/autoit] [autoit]
$oIE[2] = _IECreateEmbedded()
$oIE[3] = _IECreateEmbedded()$Form1 = GUICreate("Form1", 1200, 840)
[/autoit] [autoit][/autoit] [autoit]
$tabMenu = GUICtrlCreateTab(10,10,1180,780)
$tab1 = GUICtrlCreateTabItem("Seite1")
$Browser1 = GUICtrlCreateObj($oIE[1], 20, 40, 1160, 740)
$tab2 = GUICtrlCreateTabItem("Seite2")
$Browser2 = GUICtrlCreateObj($oIE[2], 20, 40, 1160, 740)
$tab3 = GUICtrlCreateTabItem("Seite3")
$Browser3 = GUICtrlCreateObj($oIE[3], 20, 40, 1160, 740)
GUICtrlCreateTabItem("")
$BtnAddPage = GUICtrlCreateButton("Seite hinzufügen",10,810,150,20)
$BtnBavigateTo = GUICtrlCreateButton("Navigiere zu",180,810,150,20)
GUISetState(@SW_SHOW)_IENavigate($oIE[1],"google.de",0)
[/autoit]
_IENavigate($oIE[2],"autoit.de",0)
_IENavigate($oIE[3],"heise.de",0)
$startTime=TimerInit()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $BtnAddPage
$page = InputBox("goto url","link eingeben","google.de")
_ArrayAdd($oIE,_IECreateEmbedded())
GUICtrlCreateTabItem("Seite" & UBound($oIE)-1)
GUICtrlCreateObj($oIE[UBound($oIE)-1], 20, 40, 1160, 740)
GUICtrlCreateTabItem("")
_IENavigate($oIE[UBound($oIE)-1], $page)
Case $BtnBavigateTo
$page = InputBox("goto url","link eingeben","google.de")
_IENavigate($oIE[_GUICtrlTab_GetCurSel($tabMenu)+1], $page)
EndSwitch
if TimerDiff($startTime) > 10000 Then
$startTime=TimerInit()
for $i=1 to UBound($oIE)-1
$page = _IEPropertyGet ( $oIE[$i], "locationurl" ) ; ist so schneller als mit ieaction "refresh", da nicht auf jede seite gewartet wird
_IENavigate($oIE[$i],$page,0);_IEAction($oIE[$i],"refresh")
ConsoleWrite("refresh site " & $i & ": " & $page & @CRLF)
Next
EndIf
WEnd -
Poste am besten das komplette Ergebnis von au3info.
EDIT: Ausserdem darfst du eine Variable natürlich nicht in Anführungszeichen setzen...
[autoit]
[/autoit]
ControlSend ( $windowtitle, "", "", "{Enter}") ; wenn dann so...Die Controlid leer lassen dürfte aber nicht gehen, daher bitte vollständiges Log aus dem Tab summary.
-
Kann ich bei meinem FTP Server ebenfalls nachvollziehen. Ich vermute das Ergebnis wird irgendwo gecached (vergleichbar mit inetget wenn man das flag für erneutes laden vom remote ort nicht setzt). Vielleicht kann Prog@ndy da ja was zu sagen, er scheint der UDF nach an der betreffenden Funktion beteilligt gewesen zu sein.
Ich glaube es ging nicht darum alle Dateien zu löschen, sondern in bestimmten Intervallen die Fileliste auf Veränderungen zu prüfen.
-
I don't think its possible to control other addons with ff.au3 (not sure about this...). But as you describe it (I don't know this addon) you don't need ff.au3 to control it. Instead you could use normal window control functions to select entry from FF file menu. The necessary window handle of FF should be available with:
[autoit]$handle = _FFWindowGetHandle()
[/autoit]After that you should be able to use:
[autoit]
[/autoit]
WinMenuSelectItem($handle,...)