Hi Leute,
ich arbeite gerade an einem Mod Tool für ein etwas älteres Spiel (Siege of Avalon) und bin dabei auf ein Problem gestoßen:
Ich will dem Nutzer die Möglichkeit geben, die Mods zu installieren, selbst wenn er nicht Siege of Avalon besitzt.
Das erste Kapitel von Siege of Avalon gibt es legal kostenlos zum Download und dieses wird auch für die Mods benötigt.
Ich will jedem Nutzer die Möglichkeit bieten, diese Mods zu spielen, deshalb habe ich die Möglichkeit der Installation von Siege of Avalon in meinen Mod-Tool Installer integriert.
Das Problem ist, dass die einzelnen Spieldateien nur von dem Installer installiert werden dürfen. Wenn man die Dateien anderweitig weitergibt verstößt dies gegen die Lizenzbedingungen.
Also habe ich ein kleines Programm programmiert, welches im Installer die entsprechenden Boxen anklickt.
Jedoch darf man, während das Programm klickt, den PC nicht bedienen, das ist ein Handicap.
Wie kann ich es hinbekommen, dass das Programm im Hintergrund die entsprechenden Dinger anklickt?
Ich habe unter anderem ein kleines Edit-Feld, in welches eine Variable eingetragen wird (Installations-Path), das sollte möglichst auch im Hintergrund laufen.
Vieleicht wisst ihr eine Lösung
Mfg Fliwatt
Fenster im Hintergrund bedienen
-
- [ offen ]
-
Fliwatt -
26. Februar 2013 um 18:14 -
Geschlossen -
Erledigt
-
-
Wenn du einen Mod hinbekommst dann kennst du sicher Blockinput.
Damit kannst du dem Nutzer für den Zeitraum der Installation das Recht des eingebens entziehen. So kann er dein Skript nicht stören.
-
Dankeschön, aber der Mod ist nicht von mir,
ich habe mal BlockInput gegoogelt und damit geht es ganz einfach, aber eleganter wäre es, wenn der User seinen PC in den 3 Minuten auch weiter benutzen könnte.
Fliwatt -
Tja aber es geht
Ne andere idee habe ich gerade leider nicht...
Aber ich denke nochmal darüber nach. -
PUSH
-
Controls benutzen ? Hab deinen Installer nicht vor mir aber geht nicht Control Click o.ä. ?
-
Das Problem ist, dass ControlClick keine Bedienung im Hintergrund erlaubt
-
Unsinn, warum sollte controlClick das nicht erlauben, genau dafür ist es da.
Beispiel:
myTool.au3
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("MyTool", 451, 191, 192, 124)
$Button1 = GUICtrlCreateButton("installieren", 160, 72, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
install()
EndSwitch
WEndFunc install()
[/autoit] [autoit][/autoit] [autoit]
run(@ScriptDir & "\setup.exe") ; vorher setup.au3 kompilieren...
Do
Sleep(10)
Until WinExists("Setup Window blabla")
WinSetState("Setup Window blabla","",@SW_HIDE)Sleep(2000) ; nur zu demo zwecken
[/autoit] [autoit][/autoit] [autoit]ControlClick("Setup Window blabla","","[CLASS:Button; INSTANCE:1]") ; 1. checkbox anhaken
[/autoit] [autoit][/autoit] [autoit]
ControlSetText("Setup Window blabla","","[CLASS:Edit; INSTANCE:1]","neuer pfad") ; pfad ändern
Sleep(10) ; setup braucht kurz zeit um den button zu aktivieren, sonst kann er nicht geklickt werden
ControlClick("Setup Window blabla","","[CLASS:Button; INSTANCE:2]") ; weiter button klickenSleep(2000) ; nur zu demo zwecken
[/autoit]
WinSetState("Setup Window blabla","",@SW_SHOW) ; sichtbar machen, siehe da alles wurde korrekt gesetzt
EndFuncsetup.au3
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Setup Window blabla", 373, 259, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("option 1", 120, 72, 97, 17)
$Button1 = GUICtrlCreateButton("weiter", 112, 192, 75, 25)
GUICtrlSetState($Button1, $GUI_DISABLE)
$Checkbox2 = GUICtrlCreateCheckbox("option 2", 120, 104, 97, 17)
$inputPath = GUICtrlCreateInput("bitte pfad eingeben", 112, 144, 121, 21)
$Label1 = GUICtrlCreateLabel("OK", 256, 144, 19, 17)
GUICtrlSetState($Label1,$GUI_HIDE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
case $Button1
MsgBox(0,"setup msg","installation fertig!")
EndSwitchIf GUICtrlRead($inputPath) <> "bitte pfad eingeben" Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If BitAND(GUICtrlGetState($Button1), $GUI_DISABLE) = $GUI_DISABLE Then
GUICtrlSetState($Button1,$GUI_ENABLE)
GUICtrlSetState($Label1,$GUI_SHOW)
EndIf
EndIfWEnd
[/autoit] [autoit][/autoit] [autoit][/autoit] -
Und wieso geht dann dieser Script nicht, wenn das Datum und Uhrzeit Fenster nicht(!) ausgewählt ist, aber offen?
[autoit]
[/autoit]
sleep(1000)
ControlClick("Datum und Uhrzeit","","[CLASS:Button; INSTANCE:1]")
sleep(1000)
Exit -
Welches Datum und Uhrzeit Fenster? Wenn du hier Hilfe erwartest wäre zumindestens mal ein Link zu diesem Setup sinnvoll oder alternativ auch mal ein au3info summary log des Fensters/Controls das du manipulieren willst.
-
Ich will ein Setup von einem Spiel namens Siege of Avalon, erstes Kapitel "manipulieren".
Die Sachen, die ich manipulieren will, sind ganz normale Buttons in einem Fenster und er sollte noch etwas in ein Edit Feld schreiben. Die AutoIT3 Summary kommt bald, ich bin gerade noch an einem anderen Rechner -
Der Downloadlink funktioniert bei mir weder im Firefox noch im IE. Da poppt nur ein leeres Fenster auf.
-
Der Downloadlink funktioniert bei mir weder im Firefox noch im IE. Da poppt nur ein leeres Fenster auf.
Das wird in allen Browsern passieren. Ich habe über ein FF-Addon versucht den Download bei virustotal.com zu prügen lassen. Resultat:Zitat{"result": 0, "verbose_msg": "Invalid URL"}
mfg autoBert
-
Hab es noch mal hochgeladen
LINK
Window Info SummarySpoiler anzeigen
Code
Alles anzeigen>>>> Window <<<< Title: Willkommen Class: GLBSWizard Position: 710, 341 Size: 483, 360 Style: 0x94C80080 ExStyle: 0x00000101 Handle: 0x000000000002192C >>>> Control <<<< Class: Button Instance: 1 ClassnameNN: Button1 Name: Advanced (Class): [CLASS:Button; INSTANCE:1] ID: 3 Text: &Weiter> Position: 301, 301 Size: 73, 23 ControlClick Coords: 37, 12 Style: 0x50010001 ExStyle: 0x00000004 Handle: 0x000000000002193C >>>> Mouse <<<< Position: 1051, 679 Cursor ID: 0 Color: 0xF0F0F0 >>>> StatusBar <<<< >>>> ToolsBar <<<< >>>> Visible Text <<<< &Weiter> Abbrechen Willkommen im Installationsprogramm für Siege of Avalon Chapter 1+. Dieses Programm installiert Siege of Avalon Chapter 1+ auf Ihrem Computer. Wir empfehlen nachdrücklich, vor Ausführen dieses Installationsprogramms alle Windows-Programme zu beenden. Auf Abbrechen klicken, um die Installation zu beenden und alle laufenden Programme zu schließen. Auf Weiter klicken, um mit dem Installationsprogramm zu beginnen. WARNUNG: Dieses Programm ist urheberrechtlich sowie durch internationale Verträge geschützt. Die unzulässige Vervielfältigung oder Verbreitung dieses Programms, ob ganz oder auszugsweise, kann schwere zivil- und strafrechtliche Konsequenzen nach sich ziehen und wird unter voller Ausschöpfung der Rechtsmittel geahndet. >>>> Hidden Text <<<<
Der Text ist nicht mehr aktuell, das erste Kapitel wurde kostenlos zur Vervielfältigung freigegeben
Fliwatt -
Und das Problem liegt nun wo? Funktioniert absolut einwandfrei, zumindestens bei sichtbarem Fenster, aber für die control Funktionen spielt es wie gesagt keine Rolle ob das Fenster sichtbar oder unsichtbar ist, siehe Beispiel oben.
Im Anhang findest du alle Au3Info Logs die man braucht, also zumindestens bis zu dem Schritt bei dem ich nun erstmal abgebrochen habe.Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
$setup = @ScriptDir & "\SoACH1b_bi2a.exe"Run($setup)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
Until WinExists("Windows NT not supported","This game is not officially supported on the Windows NT platform"); 1. button ok
[/autoit] [autoit][/autoit] [autoit]
ControlClick("Windows NT not supported","","[CLASS:Button; INSTANCE:1]")Do
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
Until WinExists("Willkommen","Willkommen im Installationsprogramm für Siege of Avalon Chapter 1"); 2. button weiter
[/autoit] [autoit][/autoit] [autoit]
ControlClick("Willkommen","","[CLASS:Button; INSTANCE:1]")Do
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
Until WinExists("Zielpfad wählen","Installation speichert Siege of Avalon Chapter 1"); 3. button pfad wählen
[/autoit] [autoit][/autoit] [autoit]
ControlClick("Zielpfad wählen","","[CLASS:Button; INSTANCE:5]")Do
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
Until WinExists("Zielverzeichnis wählen",""); 4. edit Zielpfad einfügen
[/autoit] [autoit][/autoit] [autoit]
ControlSetText("Zielverzeichnis wählen","","[CLASS:Edit; INSTANCE:1]","F:\testFolder")
; 5. button ok
ControlClick("Zielverzeichnis wählen","","[CLASS:Button; INSTANCE:1]")Do
[/autoit] [autoit][/autoit] [autoit]
Sleep(10)
Until Not WinExists("Zielverzeichnis wählen",""); 6. weiter Button
[/autoit] [autoit][/autoit] [autoit]
ControlClick("Zielpfad wählen","","[CLASS:Button; INSTANCE:1]")Do
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Sleep(10)
Until WinExists("Installation beginnen","Sie sind jetzt zur Installation von Siege of Avalon Chapter 1"); 7. letzter weiter button?
[/autoit]
MsgBox(0,"Fertig?","hier würde dann noch der hoffentlich letzte weiter button kommen, das bekommste aber wohl selber hin...") -
Du kannst praktisch jeden Installer mit Tastaturbefehlen durchlaufen.
Vielleicht fällt es dir ja leichter das ganze mit ControlSend() umzusetzen, da brauchst du im Prinzip nicht mal die IDs kennen sondern nur deine Tastendrücke in richtiger Reinfolge (TAB, Enter, Leertaste zum anhacken). Hab damit schön des öfteren Fenster ferngesteuert die nicht aktiv waren.Gruß
stro