Ob das geht, weiß ich nicht. Das Problem ist immer die Adressen zu finden. Clevere Spiele benutzen dynamische Adressen. Wie du da die richtigen findest (Pointer-Offset beachten), habe ich aber schon mal in einem Thread kurz erläutert. Also bemühe mal die Suche.
Bots sind hier nicht sooo beliebt. Für rein programmtechnische Fragen bekommst du natürlich immer Unterstützung.
Falls du es nicht kennst, such mal nach "Ollydbg".
Beiträge von BugFix
-
-
Hi Manu,
das ist wirklich ziemlich unstrukturiert.

Und meine Codebeispiele waren nur Beispiele und nicht direkt auf dein Programm bezogen. Insofern bringt es wenig diesen Code unangepaßt reinzukopieren.
Ich habe dir hier mal ein Muster erstellt. Die benötigte INI-Datei habe ich als Kommentarblock vorangestellt. Mußt du also nur in den Editor kopieren und als "Language.INI" abspeichern.
Spoiler anzeigen
[autoit]#cs
[/autoit] [autoit][/autoit] [autoit][EN]
[/autoit] [autoit][/autoit] [autoit]
1=ENGLISH
2=File
3=Open
4=Save
5=Delete
6=Edit
7=Copy
8=Paste
9=?
10=Help
11=Choose German Language
[DE]
1=DEUTSCH
2=Datei
3=Öffnen
4=Speichern
5=Löschen
6=Bearbeiten
7=Kopieren
8=Einfügen
9=?
10=Hilfe
11=Wähle Englisch#ce
[/autoit] [autoit][/autoit] [autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIOnEventMode", 1)Global $arControl[11], $Switch = 0
[/autoit] [autoit][/autoit] [autoit]
Global $INIPath = @ScriptDir & '\Language.INI'
Global $arTitleEN = IniReadSection($INIPath, 'EN')
Global $arTitleDE = IniReadSection($INIPath, 'DE')$arControl[0] = GUICreate("DEUTSCH", 633, 454, -1, -1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$arControl[1] = GUICtrlCreateMenu("Datei")
GUICtrlSetOnEvent(-1, "mnuFileClick")
$arControl[2] = GUICtrlCreateMenuItem("Öffnen", $arControl[1])
GUICtrlSetOnEvent(-1, "mnuOpenClick")
$arControl[3] = GUICtrlCreateMenuItem("Speichern", $arControl[1])
GUICtrlSetOnEvent(-1, "mnuSaveClick")
$arControl[4] = GUICtrlCreateMenuItem("Löschen", $arControl[1])
GUICtrlSetOnEvent(-1, "mnuDelClick")
$arControl[5] = GUICtrlCreateMenu("Bearbeiten")
GUICtrlSetOnEvent(-1, "mnuEditClick")
$arControl[6] = GUICtrlCreateMenuItem("Kopieren", $arControl[5])
GUICtrlSetOnEvent(-1, "mnuCopyClick")
$arControl[7] = GUICtrlCreateMenuItem("Einfügen", $arControl[5])
GUICtrlSetOnEvent(-1, "mnuPasteClick")
$arControl[8] = GUICtrlCreateMenu("?")
GUICtrlSetOnEvent(-1, "mnuHelpClick")
$arControl[9] = GUICtrlCreateMenuItem("Hilfe", $arControl[8])
GUICtrlSetOnEvent(-1, "mnuHelClick")
$arControl[10] = GUICtrlCreateMenuItem("Wähle Englisch", $arControl[8])
GUICtrlSetOnEvent(-1, "mnuLangClick")
GUISetState(@SW_SHOW)While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc Form1Close()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFunc
Func mnuLangClick()
Switch $Switch
Case 0
SetTitle($arTitleEN)
$Switch = 1
Case 1
SetTitle($arTitleDE)
$Switch = 0
EndSwitch
EndFunc
Func SetTitle(ByRef $ARRAYTITLE)
For $i = 0 To UBound($arControl) -1
If $i = 0 Then
WinSetTitle($arControl[0], '', $ARRAYTITLE[1][1])
Else
GUICtrlSetData($arControl[$i], $ARRAYTITLE[$i+1][1])
EndIf
Next
EndFunc
Func mnuCopyClick()EndFunc
[/autoit] [autoit][/autoit] [autoit]
Func mnuDelClick()EndFunc
[/autoit] [autoit][/autoit] [autoit]
Func mnuEditClick()EndFunc
[/autoit] [autoit][/autoit] [autoit]
Func mnuFileClick()EndFunc
[/autoit] [autoit][/autoit] [autoit]
Func mnuHelClick()EndFunc
[/autoit] [autoit][/autoit] [autoit]
Func mnuHelpClick()EndFunc
[/autoit] [autoit][/autoit] [autoit]
Func mnuOpenClick()EndFunc
[/autoit] [autoit][/autoit] [autoit]
Func mnuPasteClick()EndFunc
[/autoit] [autoit][/autoit] [autoit]
Func mnuSaveClick()EndFunc
[/autoit] -
Zitat
aber wir erstellen doch dann auch brav die GUI dazu, oder?
Genau, mach das!

-
ich bin mir nicht ganz sicher was du erreichen möchtest. Benenne genau welches Control was machen soll.
Also das übliche "Vorher-Aktion-Nachher" - Szenario.Deine Fragestellung ist mir momentan zu allgemein.
-
Aber da wir ja hier alles automatisieren, hier der Zugriff auf die Seite per Skript:
[autoit]#include <ie.au3>
[/autoit][autoit][/autoit][autoit]$url = "http://www.fax-manager.de/index.html"
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
$Vorwahl = "030"
$FaxNr = "123456789"
$Mail = "absender@mail.de"
$Inhalt = "Bla Bla Bla Bla" & @LF & "Bla Bla Bla Bla" & @LF & "Bla Bla Bla Bla"$oIE = _IECreate($url)
[/autoit][autoit][/autoit][autoit]
$oForm = _IEFormGetCollection($oIE,1)
$oVorwahl = _IEFormElementGetObjByName($oForm,"vorwahl")
$oNummer = _IEFormElementGetObjByName($oForm,"nummer")
$oEmail = _IEFormElementGetObjByName($oForm,"email")
$oText = _IEFormElementGetObjByName($oForm,"text")_IEFormElementSetValue($oVorwahl, $Vorwahl)
[/autoit][autoit][/autoit][autoit]
_IEFormElementSetValue($oNummer, $FaxNr)
_IEFormElementSetValue($oEmail, $Mail)
_IEFormElementSetValue($oText, $Inhalt)_IEFormSubmit($oForm)
[/autoit][autoit][/autoit][autoit]_IEQuit($oIE)
[/autoit] -
Nööö, nie nich.

-
Immer wieder gern. Und ich denke es hat dir auch 'ne Menge gebracht. -
Edit: Denkfehler, so paßt's:
[autoit]For $i = 1 To $daten[0]
[/autoit]
$inhalt = StringSplit($daten[$i], ",")
If IsArray($inhalt) Then
For $k = 1 to UBound($inhalt) -1
send($inhalt[$k])
If $k = 2 Then
If StringLen($inhalt[$k]) < 2 Then
send("{TAB}")
EndIf
Else
send("{TAB}")
EndIf
Next
EndIf
Next -
So wie ich dich verstanden habe, entsteht ein Tab von allein, wenn die Zahl 2-stellig ist. Aber wenn sie 1-stellig ist mußt du ein Tab senden um zum nächsten Feldzu wechseln.
Ergo: Wenn Länge < 2 Dann Sende Tab, sonst nicht. -
Dann prüf die Länge des Eintrags und sende den Tab nur bei Bedarf:
[autoit]For $i = 1 To $daten[0]
[/autoit]
$inhalt = StringSplit($daten[$i], ",")
If IsArray($inhalt) Then
For $k = 1 to UBound($inhalt) -1
send($inhalt[$k])
If StringLen($inhalt[$k]) < 2 Then
send("{TAB}")
EndIf
Next
EndIf
Next -
Wer oder was erzeugt denn da 'nen Tab?
-
Zeig mal eine Zeile vom csv-Code.
-
So kannst du alle WhiteSpaces (dazu gehören auch Tabs) löschen:
Spoiler anzeigen
[autoit]For $i = 1 To $daten[0]
[/autoit]
$inhalt = StringSplit($daten[$i], ",")
If IsArray($inhalt) Then
For $k = 1 to UBound($inhalt) -1
If $k = 2 Then
$Str = StringStripWS ( $inhalt[$k], 8 ) & @LF
Else
$Str = $inhalt[$k] & @LF
EndIf
send($Str)
send("{TAB}")
Next
MsgBox(0,'','Weiter ?')
EndIf
Next -
zu 1.
Habe jetzt einfach eine MsgBox eingefügt zum Warten.Spoiler anzeigen
[autoit]For $i = 1 To $daten[0]
[/autoit]
$inhalt = StringSplit($daten[$i], ",")
If IsArray($inhalt) Then
For $k = 1 to UBound($inhalt) -1
$Str = $inhalt[$k] & @LF
send($Str)
send("{TAB}")
Next
MsgBox(0,'','Weiter ?')
EndIf
Nextzu 2.
Schau dir mal Eval() an. Damit läßt sich das realisieren.
Oder benenne deine Fenster einfach um ( WinSetTitle() ), das geht auch bei Fremdanwendungen (meist). -
[autoit]ZitatWie kann ich denn den return value von exist dann abfragen?
$Rueckgabewert = Funktion()
[/autoit]
;also
$Return = FileExists()Da der Return aber nur 1 (Erfolg) oder 0 (Fehler) ist, hast du somit den Return als Boolschen Wert und kannst so abfragen
[autoit]If FileExists() Then
[/autoit]
; Erfolg
Else
; Fehler
EndIf -
Die Formelemente sind indexiert. Aber innerhalb jeder Form wieder neu bei 0 beginnend.
Du mußt also erst die Form auswählen und dann das Formelement. -
Hier mal ganz Allgemein das Umstellen der Sprache im laufenden Skript.
Deine INI kannst du dann allein reinfummeln.
Allerdings solltest du INIReadSection verwenden. Dann erhältst du ein Array und kannst das Umbenennen analog zu meinem Bsp. durchführen.Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
Opt("GUIOnEventMode", 1)Dim $arText[8][2] = [ _
[/autoit] [autoit][/autoit] [autoit]
['DEUTSCH','ENGLISH'], _
['Label Eins', 'Label One'], _
['Label Zwei', 'Label Two'], _
['Label Drei', 'Label Three'], _
['Button Eins', 'Button One'], _
['Button Zwei', 'Button Two'], _
['Button Drei', 'Button Three'], _
['Button ENGLISH', 'Button DEUTSCH']]
Dim $Switch = 0
Dim $arControls[7]
$Form1 = GUICreate($arText[0][0], 502, 184, 193, 115)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$arControls[0] = GUICtrlCreateLabel($arText[1][0], 46, 34, 100, 17)
$arControls[1] = GUICtrlCreateLabel($arText[2][0], 46, 77, 100, 17)
$arControls[2] = GUICtrlCreateLabel($arText[3][0], 46, 120, 100, 17)
$arControls[3] = GUICtrlCreateButton($arText[4][0], 240, 34, 100, 30, 0)
$arControls[4] = GUICtrlCreateButton($arText[5][0], 240, 70, 100, 30, 0)
$arControls[5] = GUICtrlCreateButton($arText[6][0], 240, 106, 100, 30, 0)
$arControls[6] = GUICtrlCreateButton($arText[7][0], 377, 70, 100, 30, 0)
GUICtrlSetOnEvent(-1, "btSwitchClick")
GUISetState(@SW_SHOW)While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc btSwitchClick()
[/autoit]
Switch $Switch
Case 0
WinSetTitle($Form1, '', $arText[0][1])
For $i = 0 To UBound($arControls) -1
GUICtrlSetData($arControls[$i], $arText[$i+1][1])
Next
$Switch = 1
Case 1
WinSetTitle($Form1, '', $arText[0][0])
For $i = 0 To UBound($arControls) -1
GUICtrlSetData($arControls[$i], $arText[$i+1][0])
Next
$Switch = 0
EndSwitch
EndFunc
Func Form1Close()
Exit
EndFuncEdit:
Ich habe jetzt alle GUI-Ctrl in ein eigenes Array gepackt, dann kann man das Umbenennen in einer Schleife ausführen. -
Es laufen zwei Schleifen. Die äußere liest die Zeile aus, ZeilenIndex $i.
Die innere splittet die Zeile auf in Spalten, SpaltenIndex $k.
Beim Auslesen jeder einzelnen Spalte wird der Inhalt zu einem String hinzugefügt. Für Zeile 1, Spalte 1 würde das so aussehen:
Wert 1/1: "Spalteninhalt" & @LF -
Edit: Du liest sicher mit _FileReadToArray ein. Also muß es nicht $daten sondern $daten[0] heißen.
[autoit]$Str = ''
[/autoit]
For $i=1 to $daten[0]
$inhalt=StringSplit($daten[$i], ",") ; liefert ein Array zurück
If IsArray($inhalt) Then
For $k = 1 To UBound($inhalt) -1
$Str &= 'Wert ' $i & '/' & $k & ': ' & $inhalt[$k] & @LF ; $i ist Zeil/ $k ist Spalte
Next
EndIf
Next
MsgBox(0, '', $Str) -
Tränenbäche rinnen....
Der Bau einer Arche Noah ist dringend von Nöten.
Wir vermissen dich! :weinen: